/* ** PlayWin.c ** ** Copyright (C) 1995,96 Bernardo Innocenti ** ** Play window handling functions. */ #include #include #include #include #include #include #include #include #include #include #include "XModulePriv.h" #include "Gui.h" #include "Player.h" #include "CustomClasses.h" /*****************************/ /* Local function prototypes */ /*****************************/ static void PlayRewClicked (void); static void PlayPlayClicked (void); static void PlayFwdClicked (void); static void PlayStopClicked (void); static void PlayVolClicked (void); static void PlayRstClicked (void); enum { GD_PlayGroup0, GD_PlayGroup1, GD_PlayGroup2, GD_PlayGroup3, GD_PlayRew, GD_PlayPlay, GD_PlayFwd, GD_PlayStop, GD_PlayVol, GD_PlayGroup4, GD_PlayPos, GD_PlayGroup5, GD_PlayTime, GD_PlayTimeReset, Play_CNT }; static struct Process *PlayerProc = NULL; static struct MsgPort *PlayerPort = NULL; static LONG PlayArgs[] = { HGROUP_KIND, 0, VGROUP_KIND, 0, HGROUP_KIND, 0, IMAGEBUTTON_KIND, (LONG)PlayRewClicked, IM_REW, TAG_DONE, IMAGEBUTTON_KIND, (LONG)PlayPlayClicked, IM_PLAY, TAG_DONE, IMAGEBUTTON_KIND, (LONG)PlayFwdClicked, IM_FWD, TAG_DONE, IMAGEBUTTON_KIND, (LONG)PlayStopClicked, IM_STOP, TAG_DONE, ENDGROUP_KIND, SLIDER_KIND, (LONG)PlayVolClicked, MSG_VOL_GAD, 0, 64, (LONG)"%lu", 3, TAG_DONE, ENDGROUP_KIND, VGROUP_KIND, 0, TEXT_KIND, MSG_POS_GAD, 7, GTTX_Border, TRUE, TAG_DONE, HGROUP_KIND, 0, TEXT_KIND, MSG_TIME_GAD, 7, GTTX_Border, TRUE, TAG_DONE, BUTTON_KIND, (LONG)PlayRstClicked, MSG_RST_GAD, TAG_DONE, ENDGROUP_KIND, ENDGROUP_KIND, ENDGROUP_KIND, ENDGROUP_KIND }; XDEF LONG PlayWinTags[] = { XMWIN_LayoutArgs, (LONG)PlayArgs, XMWIN_GCount, Play_CNT, XMWIN_Title, MSG_PLAY_TITLE, XMWIN_WindowFlags, WFLG_CLOSEGADGET, XMWIN_IDCMPFlags, IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|BUTTONIDCMP|SLIDERIDCMP, XMWIN_PostOpenFunc, (LONG)SetupPlayer, // XMWIN_PostOpenFunc, (LONG)UpdatePlay, XMWIN_PostCloseFunc,(LONG)CleanupPlayer, XMWIN_HelpNode, (LONG)"Play", TAG_DONE }; /*************************/ /* Play window functions */ /*************************/ /* static void UpdatePlay (void) { } */ GLOBALCALL LONG SetupPlayer (void) { LONG err; BPTR PlayerSegList; if (PlayerProc) return RETURN_OK; if (PlayerPort = CreateMsgPort()) { if (PlayerSegList = NewLoadSeg ("PROGDIR:Players/32Channels.player", NULL)) { if (PlayerProc = CreateNewProcTags ( NP_Seglist, PlayerSegList, NP_FreeSeglist, TRUE, NP_Name, "XModule Player", NP_Priority, 25, NP_WindowPtr, NULL, NP_Input, NULL, NP_Output, NULL, NP_Error, NULL, NP_CopyVars, FALSE, TAG_DONE)) { struct PlayerCmd dummy; dummy.pcmd_Message.mn_ReplyPort = PlayerPort; dummy.pcmd_ID = PCMD_SETUP; PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&dummy); WaitPort (PlayerPort); GetMsg (PlayerPort); if (!dummy.pcmd_Err) return RETURN_OK; /* Error cleanup */ ShowRequest (MSG_PLAYER_INIT_ERR, 0, dummy.pcmd_Err); CleanupPlayer(); return dummy.pcmd_Err; } else err = ERROR_NO_FREE_STORE; UnLoadSeg (PlayerSegList); } else CantOpenLib ("PROGDIR:Players/32Channels.player", 0); DeleteMsgPort (PlayerPort); PlayerPort = NULL; } else err = ERROR_NO_FREE_STORE; return err; } void CleanupPlayer (void) { if (PlayerProc) { /* Signal player process to give up. dos.library will * automatically UnLoadSeg() its code. */ Signal ((struct Task *)PlayerProc, SIGBREAKF_CTRL_C); PlayerProc = NULL; DeleteMsgPort (PlayerPort); PlayerPort = NULL; } } /****************/ /* Play Gadgets */ /****************/ static void PlayPlayClicked (void) { ShowRequestStr ("Enjoy the silence...\n\n" "Sorry, XModule replay code is still under developement.\n" "I'm adapting the DeliTracker 14bit-NotePlayer mixing engine\n" "to XModule's internal module format, which will allow\n" "upto 32 channels with 14bit stereo output at 56Khz max,\n" "provided your machine is fast enough.", "Incredible!", NULL); } static void PlayRewClicked (void) { /* struct PlayerCmd cmd; cmd.pcmd_Message.mn_ReplyPort = PlayerPort; cmd.pcmd_ID = PCMD_INIT; cmd.pcmd_Data = songinfo; PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd); WaitPort (PlayerPort); GetMsg (PlayerPort); ShowString ("%ld", &cmd.pcmd_Err); */ } static void PlayFwdClicked (void) { /* struct PlayerCmd cmd; cmd.pcmd_Message.mn_ReplyPort = PlayerPort; cmd.pcmd_ID = PCMD_PLAY; cmd.pcmd_Data = songinfo; PutMsg (&PlayerProc->pr_MsgPort, (struct Message *)&cmd); WaitPort (PlayerPort); GetMsg (PlayerPort); */ } static void PlayStopClicked (void) { } static void PlayVolClicked (void) { } static void PlayRstClicked (void) { }