home *** CD-ROM | disk | FTP | other *** search
- /* ---------------------------------------- */
- /* MEDPlayer.c V2.00 by Teijo Kinnunen 1990 */
- /* ---------------------------------------- */
- #include <workbench/startup.h>
- #include <workbench/icon.h>
- #include <workbench/workbench.h>
- #include "med.h"
- struct Kappale far tamakappale;
- struct SoundTrackerKappale far ladattu;
- UWORD lohkoja = 0,chip zeroptr = 0;
- struct Window *window = NULL;
- struct Lohko *blocks[100];
- struct Soitin *samples[33];
- struct ObjSong song;
- extern struct CIA far ciaa;
- extern struct WBStartup *WBenchMsg;
- void FreeAllBlocks(),VapautaSoittimet(),Ilmoita();
- struct Library *IconBase = NULL;
- BOOL clistartup = FALSE,LoadSong();
- BPTR outputfh;
- static char defaulttitle[] = "MEDPlayer V2.00 by Teijo Kinnunen, 1990";
-
- void MakeObjSong()
- {
- UBYTE scnt = 0;
- for(scnt = 0; scnt < 32; scnt++) {
- song.vol[scnt] = tamakappale.soittimenvoimakkuus[scnt];
- song.rep[scnt] = tamakappale.stoisto[scnt];
- song.replen[scnt] = tamakappale.stoistonpit[scnt];
- song.midichan[scnt] = tamakappale.midikanava[scnt];
- song.midipres[scnt] = tamakappale.midipreset[scnt];
- }
- song.blocks = lohkoja;
- memcpy(song.playseq,tamakappale.soittojarjestys,100);
- song.songlen = tamakappale.kappaleen_pituus;
- song.playtransp = tamakappale.playtransp;
- song.flags = tamakappale.liput;
- song.slide = tamakappale.vaihtoja;
- }
-
- void Play()
- {
- struct Message *imsg;
- MakeObjSong();
- if(InitPlayer()) return;
- SetTempo(tamakappale.tempo);
- StartPlayer();
- if(clistartup) {
- Write(outputfh,"Press Ctrl-C to quit\n",21);
- Wait(SIGBREAKF_CTRL_C);
- } else {
- Ilmoita(defaulttitle);
- WaitPort(window->UserPort);
- imsg = GetMsg(window->UserPort);
- ReplyMsg(imsg);
- }
- StopPlayer();
- }
-
- void PrintUsage()
- {
- Write(outputfh,"MEDPlayer usage:\n",17);
- Write(outputfh," MEDPlayer song [pathfile]\n",28);
- }
-
- BOOL CLIStartup(char *cmdline)
- {
- char *argv[3],argc = 0,quote = 0;
- outputfh = Output();
- clistartup = TRUE;
- Write(outputfh,"MEDPlayer V2.00 by Teijo Kinnunen, 1990\n",40);
- for(;;) { /* The command line parser */
- if(*cmdline == '\"') {
- if((quote = (!quote)) == FALSE) *cmdline = '\0';
- }
- else if((*cmdline == '\t'||*cmdline == ' ') && !quote) {
- *cmdline = '\0';
- if(++argc >= 3) break;
- while(*(++cmdline) == ' ' || *cmdline == '\t');
- argv[argc] = (*cmdline == '\"' ? cmdline+1 : cmdline);
- continue;
- }
- else if(*cmdline == '\n' || *cmdline == '\0') {
- *cmdline = '\0'; argc++; break; }
- cmdline++;
- }
- if(argc < 2 || argc > 3 || *argv[1] == '?' || !(*argv[1])) {
- PrintUsage();
- return(TRUE);
- }
- LataaSoitinLista(argc == 3 ? argv[2] : NULL);
- return(LoadSong(argv[1]));
- }
-
- BOOL WBenchStartup()
- {
- struct DiskObject *plr;
- char *pathf;
- struct WBArg *wbarg;
- if(!(IconBase = OpenLibrary(ICONNAME,0))) return(TRUE);
- if(WBenchMsg->sm_NumArgs < 2) return(TRUE);
- wbarg = WBenchMsg->sm_ArgList;
- CurrentDir(wbarg[1].wa_Lock);
- if(!(plr = GetDiskObject(wbarg[1].wa_Name))) return(TRUE);
- pathf = FindToolType(plr->do_ToolTypes,"PATHF");
- LataaSoitinLista(pathf);
- FreeDiskObject(plr);
- return(LoadSong(wbarg[1].wa_Name));
- }
-
- static BOOL Window()
- {
- static struct NewWindow nw = {
- 230,10,400,10,2,1,CLOSEWINDOW,WINDOWDEPTH|WINDOWCLOSE|
- WINDOWDRAG|SIMPLE_REFRESH|NOCAREREFRESH|RMBTRAP,
- NULL,NULL,NULL,NULL,NULL,0,0,0,0,WBENCHSCREEN };
- nw.Title = defaulttitle;
- if(!(window = OpenWindow(&nw))) return(TRUE);
- return(FALSE);
- }
-
- static void CloseDown()
- {
- ciaa.ciapra &= ~CIAF_LED;
- if(clistartup) Write(outputfh,"\n",1);
- RemPlayer();
- FreeAllBlocks();
- if(window) CloseWindow(window);
- VapautaSoittimet();
- VapautaSoitinLista();
- if(IconBase) CloseLibrary(IconBase);
- CloseLibrary(IntuitionBase);
- }
-
- void Ilmoita(char *text)
- {
- if(clistartup) {
- Write(outputfh,text,strlen(text));
- Write(outputfh," ",
- 50 - strlen(text));
- Write(outputfh,"\x0d",1);
- } else SetWindowTitles(window,text,(char *)-1);
- }
-
- void _main(char *cmdline)
- {
- if(!(IntuitionBase = OpenLibrary("intuition.library",0))) return;
- if(!WBenchMsg) { if(!CLIStartup(cmdline)) Play(); }
- else if(!Window()) if(!WBenchStartup()) Play();
- CloseDown();
- }
-
- void FreeBlock(num)
- UWORD num;
- {
- if(blocks[num]) {
- FreeMem(blocks[num],4 + blocks[num]->numtracks * ONETRKSIZE);
- blocks[num] = 0L;
- }
- }
-
- BOOL AllocBlock(UWORD num,UBYTE tracks) /* TRUE = virhe, FALSE = ok!! */
- {
- if(blocks[num]) {
- if(blocks[num]->numtracks == tracks) return(FALSE);
- FreeBlock(num);
- }
- if(!(blocks[num] = AllocMem(4 + ONETRKSIZE * tracks,MEMF_PUBLIC|
- MEMF_CLEAR))) return(TRUE);
- blocks[num]->numtracks = tracks;
- return(FALSE);
- }
-
- void FreeAllBlocks()
- {
- int cnt;
- for(cnt = 0; cnt < 100; cnt++) FreeBlock(cnt);
- }
-
- void VapautaSoittimet()
- {
- UCOUNT slsk;
- for(slsk = 1; slsk < 32; slsk++)
- if(samples[slsk]) {
- FreeMem((void *)samples[slsk],samples[slsk]->length + sizeof(struct Soitin));
- samples[slsk] = NULL;
- tamakappale.soitin[slsk][0] = '\0';
- }
- }
-
- void Ilmoita2(char *txt1,char *txt2)
- {
- char info[100];
- strcpy(info,txt1);
- strcat(info,txt2);
- Ilmoita(info);
- }
-