Initial commit.
[amiga/xmodule.git] / PlayWin.c
1 /*
2 **      PlayWin.c
3 **
4 **      Copyright (C) 1995,96 Bernardo Innocenti
5 **
6 **      Play window handling functions.
7 */
8
9 #include <intuition/intuition.h>
10 #include <intuition/gadgetclass.h>
11 #include <intuition/imageclass.h>
12 #include <libraries/gadtools.h>
13 #include <dos/dostags.h>
14
15 #include <proto/exec.h>
16 #include <proto/dos.h>
17 #include <proto/intuition.h>
18 #include <proto/gadtools.h>
19 #include <proto/utility.h>
20
21 #include "XModulePriv.h"
22 #include "Gui.h"
23 #include "Player.h"
24 #include "CustomClasses.h"
25
26
27
28 /*****************************/
29 /* Local function prototypes */
30 /*****************************/
31
32 static void PlayRewClicked (void);
33 static void PlayPlayClicked (void);
34 static void PlayFwdClicked (void);
35 static void PlayStopClicked (void);
36 static void PlayVolClicked (void);
37 static void PlayRstClicked (void);
38
39
40
41 enum {
42         GD_PlayGroup0,
43                 GD_PlayGroup1,
44                         GD_PlayGroup2,
45                                 GD_PlayGroup3,
46                                         GD_PlayRew,
47                                         GD_PlayPlay,
48                                         GD_PlayFwd,
49                                         GD_PlayStop,
50                                 GD_PlayVol,
51                         GD_PlayGroup4,
52                                 GD_PlayPos,
53                                 GD_PlayGroup5,
54                                         GD_PlayTime,
55                                         GD_PlayTimeReset,
56
57         Play_CNT
58 };
59
60
61
62 static struct Process *PlayerProc = NULL;
63 static struct MsgPort *PlayerPort = NULL;
64
65
66
67 static LONG PlayArgs[] =
68 {
69         HGROUP_KIND, 0,
70                 VGROUP_KIND, 0,
71                         HGROUP_KIND, 0,
72                                 IMAGEBUTTON_KIND,       (LONG)PlayRewClicked,   IM_REW,         TAG_DONE,
73                                 IMAGEBUTTON_KIND,       (LONG)PlayPlayClicked,  IM_PLAY,        TAG_DONE,
74                                 IMAGEBUTTON_KIND,       (LONG)PlayFwdClicked,   IM_FWD,         TAG_DONE,
75                                 IMAGEBUTTON_KIND,       (LONG)PlayStopClicked,  IM_STOP,        TAG_DONE,
76                                 ENDGROUP_KIND,
77                         SLIDER_KIND,    (LONG)PlayVolClicked, MSG_VOL_GAD, 0, 64, (LONG)"%lu", 3, TAG_DONE,
78                         ENDGROUP_KIND,
79                 VGROUP_KIND, 0,
80                         TEXT_KIND,      MSG_POS_GAD,    7,      GTTX_Border,    TRUE,   TAG_DONE,
81                         HGROUP_KIND, 0,
82                                 TEXT_KIND,              MSG_TIME_GAD,   7,      GTTX_Border,    TRUE,   TAG_DONE,
83                                 BUTTON_KIND,    (LONG)PlayRstClicked,   MSG_RST_GAD,            TAG_DONE,
84                                 ENDGROUP_KIND,
85                         ENDGROUP_KIND,
86                 ENDGROUP_KIND,
87         ENDGROUP_KIND
88 };
89
90
91
92 XDEF LONG PlayWinTags[] =
93 {
94         XMWIN_LayoutArgs,       (LONG)PlayArgs,
95         XMWIN_GCount,           Play_CNT,
96         XMWIN_Title,            MSG_PLAY_TITLE,
97         XMWIN_WindowFlags,      WFLG_CLOSEGADGET,
98         XMWIN_IDCMPFlags,       IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|BUTTONIDCMP|SLIDERIDCMP,
99         XMWIN_PostOpenFunc,     (LONG)SetupPlayer,
100 //      XMWIN_PostOpenFunc,     (LONG)UpdatePlay,
101         XMWIN_PostCloseFunc,(LONG)CleanupPlayer,
102         XMWIN_HelpNode,         (LONG)"Play",
103         TAG_DONE
104 };
105
106
107
108 /*************************/
109 /* Play window functions */
110 /*************************/
111
112
113 /*
114 static void UpdatePlay (void)
115 {
116
117 }
118 */
119
120
121 GLOBALCALL LONG SetupPlayer (void)
122 {
123         LONG err;
124         BPTR PlayerSegList;
125
126         if (PlayerProc) return RETURN_OK;
127
128         if (PlayerPort = CreateMsgPort())
129         {
130                 if (PlayerSegList = NewLoadSeg ("PROGDIR:Players/32Channels.player", NULL))
131                 {
132                         if (PlayerProc = CreateNewProcTags (
133                                 NP_Seglist,             PlayerSegList,
134                                 NP_FreeSeglist, TRUE,
135                                 NP_Name,                "XModule Player",
136                                 NP_Priority,    25,
137                                 NP_WindowPtr,   NULL,
138                                 NP_Input,               NULL,
139                                 NP_Output,              NULL,
140                                 NP_Error,               NULL,
141                                 NP_CopyVars,    FALSE,
142                                 TAG_DONE))
143                         {
144                                 struct PlayerCmd dummy;
145
146                                 dummy.pcmd_Message.mn_ReplyPort = PlayerPort;
147                                 dummy.pcmd_ID = PCMD_SETUP;
148
149                                 PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&dummy);
150
151                                 WaitPort (PlayerPort);
152                                 GetMsg (PlayerPort);
153
154                                 if (!dummy.pcmd_Err)
155                                         return RETURN_OK;
156
157                                 /* Error cleanup */
158
159                                 ShowRequest (MSG_PLAYER_INIT_ERR, 0, dummy.pcmd_Err);
160                                 CleanupPlayer();
161                                 return dummy.pcmd_Err;
162                         }
163                         else
164                                 err = ERROR_NO_FREE_STORE;
165
166                         UnLoadSeg (PlayerSegList);
167                 }
168                 else
169                         CantOpenLib ("PROGDIR:Players/32Channels.player", 0);
170
171                 DeleteMsgPort (PlayerPort);     PlayerPort = NULL;
172         }
173         else
174                 err = ERROR_NO_FREE_STORE;
175
176         return err;
177 }
178
179
180
181 void CleanupPlayer (void)
182 {
183         if (PlayerProc)
184         {
185                 /* Signal player process to give up.  dos.library will
186                  * automatically UnLoadSeg() its code.
187                  */
188                 Signal ((struct Task *)PlayerProc, SIGBREAKF_CTRL_C);
189                 PlayerProc = NULL;
190
191                 DeleteMsgPort (PlayerPort);     PlayerPort = NULL;
192         }
193 }
194
195
196
197 /****************/
198 /* Play Gadgets */
199 /****************/
200
201 static void PlayPlayClicked (void)
202 {
203         ShowRequestStr ("Enjoy the silence...\n\n"
204                 "Sorry, XModule replay code is still under developement.\n"
205                 "I'm adapting the DeliTracker 14bit-NotePlayer mixing engine\n"
206                 "to XModule's internal module format, which will allow\n"
207                 "upto 32 channels with 14bit stereo output at 56Khz max,\n"
208                 "provided your machine is fast enough.",
209                 "Incredible!", NULL);
210 }
211
212
213
214 static void PlayRewClicked (void)
215 {
216 /*
217         struct PlayerCmd cmd;
218
219         cmd.pcmd_Message.mn_ReplyPort = PlayerPort;
220         cmd.pcmd_ID = PCMD_INIT;
221         cmd.pcmd_Data = songinfo;
222
223         PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd);
224
225         WaitPort (PlayerPort);
226         GetMsg (PlayerPort);
227
228         ShowString ("%ld", &cmd.pcmd_Err);
229 */
230 }
231
232
233 static void PlayFwdClicked (void)
234 {
235 /*
236         struct PlayerCmd cmd;
237
238         cmd.pcmd_Message.mn_ReplyPort = PlayerPort;
239         cmd.pcmd_ID = PCMD_PLAY;
240         cmd.pcmd_Data = songinfo;
241
242         PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd);
243
244         WaitPort (PlayerPort);
245         GetMsg (PlayerPort);
246 */
247 }
248
249
250 static void PlayStopClicked (void)
251 {
252 }
253
254
255 static void PlayVolClicked (void)
256 {
257 }
258
259
260 static void PlayRstClicked (void)
261 {
262 }