4 ** Copyright (C) 1995,96 Bernardo Innocenti
6 ** Play window handling functions.
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>
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>
21 #include "XModulePriv.h"
24 #include "CustomClasses.h"
28 /*****************************/
29 /* Local function prototypes */
30 /*****************************/
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);
62 static struct Process *PlayerProc = NULL;
63 static struct MsgPort *PlayerPort = NULL;
67 static LONG PlayArgs[] =
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,
77 SLIDER_KIND, (LONG)PlayVolClicked, MSG_VOL_GAD, 0, 64, (LONG)"%lu", 3, TAG_DONE,
80 TEXT_KIND, MSG_POS_GAD, 7, GTTX_Border, TRUE, TAG_DONE,
82 TEXT_KIND, MSG_TIME_GAD, 7, GTTX_Border, TRUE, TAG_DONE,
83 BUTTON_KIND, (LONG)PlayRstClicked, MSG_RST_GAD, TAG_DONE,
92 XDEF LONG PlayWinTags[] =
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",
108 /*************************/
109 /* Play window functions */
110 /*************************/
114 static void UpdatePlay (void)
121 GLOBALCALL LONG SetupPlayer (void)
126 if (PlayerProc) return RETURN_OK;
128 if (PlayerPort = CreateMsgPort())
130 if (PlayerSegList = NewLoadSeg ("PROGDIR:Players/32Channels.player", NULL))
132 if (PlayerProc = CreateNewProcTags (
133 NP_Seglist, PlayerSegList,
134 NP_FreeSeglist, TRUE,
135 NP_Name, "XModule Player",
144 struct PlayerCmd dummy;
146 dummy.pcmd_Message.mn_ReplyPort = PlayerPort;
147 dummy.pcmd_ID = PCMD_SETUP;
149 PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&dummy);
151 WaitPort (PlayerPort);
159 ShowRequest (MSG_PLAYER_INIT_ERR, 0, dummy.pcmd_Err);
161 return dummy.pcmd_Err;
164 err = ERROR_NO_FREE_STORE;
166 UnLoadSeg (PlayerSegList);
169 CantOpenLib ("PROGDIR:Players/32Channels.player", 0);
171 DeleteMsgPort (PlayerPort); PlayerPort = NULL;
174 err = ERROR_NO_FREE_STORE;
181 void CleanupPlayer (void)
185 /* Signal player process to give up. dos.library will
186 * automatically UnLoadSeg() its code.
188 Signal ((struct Task *)PlayerProc, SIGBREAKF_CTRL_C);
191 DeleteMsgPort (PlayerPort); PlayerPort = NULL;
201 static void PlayPlayClicked (void)
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);
214 static void PlayRewClicked (void)
217 struct PlayerCmd cmd;
219 cmd.pcmd_Message.mn_ReplyPort = PlayerPort;
220 cmd.pcmd_ID = PCMD_INIT;
221 cmd.pcmd_Data = songinfo;
223 PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd);
225 WaitPort (PlayerPort);
228 ShowString ("%ld", &cmd.pcmd_Err);
233 static void PlayFwdClicked (void)
236 struct PlayerCmd cmd;
238 cmd.pcmd_Message.mn_ReplyPort = PlayerPort;
239 cmd.pcmd_ID = PCMD_PLAY;
240 cmd.pcmd_Data = songinfo;
242 PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd);
244 WaitPort (PlayerPort);
250 static void PlayStopClicked (void)
255 static void PlayVolClicked (void)
260 static void PlayRstClicked (void)