Include mysystem.i Include libraries/xpk.i Include lib/xpkmaster_lib.i Include libraries/reqtools.i Include lib/reqtools_lib.i Include libraries/playsidbase.i Include lib/playsid_lib.i Section CLIPS,Code CLIPS_PLAY Equ 0 CLIPS_STOP Equ 1 CLIPS_CHANGE Equ 2 CLIPS_NEXT Equ 3 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Start: Bsr ProcessArgs Move.L $4.w,A6 Move.L A6,_EXECBase ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Lea (Title,PC),A1 CALL FindPort Tst.L D0 Beq.S .NoPort Move.L D0,A0 Lea (_MyMsg,PC),A1 CALL PutMsg .NoPort Cmp.W #CLIPS_PLAY,_MsgType Bne CloseDown CALL CreateMsgPort Move.L D0,_MyMsgPort Beq CloseDown Move.L D0,A1 Moveq #0,D0 Move.B (MP_SIGBIT,A1),D0 Moveq #1,D1 Lsl.L D0,D1 Move.L D1,_SignalSet Move.L #Title,LN_NAME(A1) Move.B #5,LN_PRI(A1) CALL AddPort ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Lea (XPKLibrary,PC),A1 Moveq #0,D0 CALL OpenLibrary Move.L D0,_XPKBase Beq CloseDown ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Lea (XPKTags,PC),A0 CALL XpkUnpack,XPK Tst.L D0 Bne CloseDown ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Lea (PSLibrary,PC),A1 Moveq #0,D0 CALL OpenLibrary,EXEC Move.L D0,_PLAYSIDBase Beq CloseDown CALL AllocEmulResource,PLAYSID ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Move.L (_OutputBuffer,PC),A0 CALL CheckModule Tst.L D0 Bne BadMOD Move.L (_OutputBuffer,PC),A0 Move.L A0,A1 Move.L (_OutputBufLen,PC),D0 CALL SetModule Moveq #50,D0 CALL SetVertFreq Moveq #0,D0 Move.L (_OutputBuffer,PC),A0 Move.W (sidh_defsong,A0),D0 Move.L D0,_SongNum Move.W (sidh_number,A0),D0 Move.L D0,RTTags+4 ;max songs ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- MainLoop: Move.L (_SongNum,PC),D0 CALL StartSong,PLAYSID ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .WaitLoop Move.L (_SignalSet,PC),D0 Bset #SIGBREAKB_CTRL_C,D0 CALL Wait,EXEC Move.L D0,D4 Move.L (_MyMsgPort,PC),A0 CALL GetMsg Move.L D0,_MsgReceived Btst #SIGBREAKB_CTRL_C,D4 Bne.S ShutDown Tst.L _MsgReceived Beq.S ShutDown Move.L (_MsgReceived,PC),A0 Lea (MN_SIZE,A0),A0 Move.W (A0)+,D0 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cmp.W #CLIPS_NEXT,D0 Bne.S .NotNext Move.L (_SongNum,PC),D0 ;current song number Addq.L #1,D0 ;advance to next track Move.L (RTTags+4,PC),D1 ;maximum number of songs Cmp.L D1,D0 ;make sure we have a new one to play Ble.S .NextNumOk Moveq.L #1,D0 ;loop back to first track .NextNumOk Move.L D0,_SongNum ;record for later use CALL StopSong,PLAYSID ;stop current song Bra.S MainLoop ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= .NotNext Cmp.W #CLIPS_CHANGE,D0 Bne.S ShutDown ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cmp.L #1,RTTags+4 Beq.S .NumOk Tst.L _REQTOOLSBase Bne.S .RTOk Lea (RTLibrary,PC),A1 Moveq #38,D0 CALL OpenLibrary,EXEC Move.L D0,_REQTOOLSBase Beq.S .NumOk .RTOk Lea (_SongNum,PC),A1 Lea (Title,PC),A2 Sub.L A3,A3 Lea (RTTags,PC),A0 CALL rtGetLongA,REQTOOLS Tst.L D0 Beq .WaitLoop .NumOk CALL StopSong,PLAYSID Bra MainLoop ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ShutDown: CALL StopSong,PLAYSID BadMOD: CALL FreeEmulResource ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= CloseDown: Move.L (_OutputBuffer,PC),A1 Cmp.L #0,A1 Beq.S .NoMem Move.L (_OutputBufLen,PC),D0 CALL FreeMem,EXEC .NoMem Move.L (_PLAYSIDBase,PC),A1 Cmp.L #0,A1 Beq.S .NoPS CALL CloseLibrary,EXEC .NoPS Move.L (_XPKBase,PC),A1 Cmp.L #0,A1 Beq.S .NoXPK CALL CloseLibrary,EXEC .NoXPK Move.L (_REQTOOLSBase,PC),A1 Cmp.L #0,A1 Beq.S .NoRT CALL CloseLibrary,EXEC .NoRT Move.L (_MyMsgPort,PC),A4 Cmp.L #0,A4 Beq.S .NoMsg Move.L A4,A1 CALL RemPort,EXEC Move.L A4,A0 CALL DeleteMsgPort .NoMsg Rts ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ProcessArgs: Clr.B -1(A0,D0.l) Lea _ArgString,A1 Moveq #0,D0 .ArgLoop Move.B (A0)+,D0 Beq.S .Exit Cmp.B #'\"',D0 Beq.S .Skip Bsr.S ChangeCase Move.B D0,(A1)+ .Skip Bra.S .ArgLoop .Exit Move.B #0,(A1)+ Move.L _ArgString,D0 Bne.S .NotStop Move.W #CLIPS_STOP,_MsgType Rts .NotStop Cmp.L #'CHAN',D0 Bne.S .NotChange Move.L _ArgString+4,D0 Cmp.L #$47450000,D0 Bne.S .NotChange Move.W #CLIPS_CHANGE,_MsgType Rts .NotChange Cmp.L #'NEXT',D0 Bne.S .NotNext Move.W #CLIPS_NEXT,_MsgType Rts .NotNext Move.W #CLIPS_PLAY,_MsgType Rts ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= ChangeCase: Cmp.B #'a',D0 Blo.S .exit Cmp.B #'z',D0 Bgt.S .exit .change Sub.B #32,D0 .exit Rts ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Version: Dc.B 0,'$VER: CLI_PlaySID 0.06 (19/1/97)',0 XPKLibrary: Dc.B 'xpkmaster.library',0 PSLibrary: Dc.B 'playsid.library',0 RTLibrary: Dc.B 'reqtools.library',0 Title: Dc.B 'CLI PlaySID',0 SongNumber: Dc.B 'Please select a new song',0 Even ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= XPKTags: Dc.L XPK_InName,_ArgString Dc.L XPK_GetOutBuf,_OutputBuffer Dc.L XPK_GetOutLen,_OutputLength Dc.L XPK_GetOutBufLen,_OutputBufLen Dc.L XPK_PassThru,-1 Dc.L TAG_DONE RTTags: Dc.L RTGL_Max,1 Dc.L RTGL_Min,1 Dc.L RTGL_TextFmt,SongNumber Dc.L RTGL_Flags,GLREQF_CENTERTEXT Dc.L RT_ReqPos,REQPOS_CENTERSCR Dc.L TAG_DONE ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= _EXECBase: Dc.L 0 _XPKBase: Dc.L 0 _PLAYSIDBase: Dc.L 0 _REQTOOLSBase: Dc.L 0 _OutputBuffer: Dc.L 0 _OutputLength Dc.L 0 _OutputBufLen: Dc.L 0 _MyMsgPort: Dc.L 0 _SignalSet: Dc.L 0 _MsgReceived: Dc.L 0 _SongNum: Dc.L 0 _MyMsg: Ds.B MN_SIZE-2 Dc.W 2 _MsgType: Dc.W CLIPS_PLAY ;STOP/CHANGE ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Section ClipsData,BSS _ArgString: Ds.B 256