+++ /dev/null
-/*\r
-\r
-Name:\r
-MIKMOD.C\r
-\r
-Description:\r
-Modplaying example of mikmod.\r
-\r
-MSDOS: BC(y) Watcom(y) DJGPP(y)\r
-Win95: BC(y*)\r
-Os2: y\r
-Linux: n\r
-\r
-* console mode only\r
-(y) - yes\r
-(n) - no (not possible or not useful)\r
-(?) - may be possible, but not tested\r
-\r
-*/\r
-#ifdef __WIN32__\r
-#include <windows.h>\r
-#endif\r
-\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <conio.h>\r
-#include <string.h>\r
-\r
-#ifndef __OS2__\r
-#include <dos.h>\r
-#endif\r
-\r
-#include "wildfile.h"\r
-#include "mikmod.h"\r
-\r
-char helptext[]=\r
-\r
-"Available switches (CaSe SeNsItIvE!):\n"\r
-"\n"\r
-" /d x use device-driver #x for output (0 is autodetect). Default=0\n"\r
-" /ld List all available device-drivers\n"\r
-" /ll List all available loaders\n"\r
-" /x disables protracker extended speed\n"\r
-" /p disables panning effects (9fingers.mod)\n"\r
-" /v xx Sets volume from 0 (silence) to 100. Default=100\n"\r
-" /f xxxx Sets mixing frequency. Default=44100\n"\r
-" /m Force mono output (so sb-pro can mix at 44100)\n"\r
-" /8 Force 8 bit output\n"\r
-" /i Use interpolated mixing\n"\r
-" /r Restart a module when it's done playing";\r
-\r
-\r
-/*\r
- declarations for boring old sys-v style getopt *yawn*:\r
-*/\r
-int getopt(int argc, char *argv[], char *optionS);\r
-extern char *optarg;\r
-extern int optind;\r
-extern int opterr;\r
-\r
-\r
-void tickhandler(void)\r
-{\r
- MP_HandleTick(); /* play 1 tick of the module */\r
- MD_SetBPM(mp_bpm);\r
-}\r
-\r
-\r
-int main(int argc,char *argv[])\r
-{\r
- UNIMOD *mf;\r
- int cmderr=0; /* error in commandline flag */\r
- int morehelp=0; /* set if user wants more help */\r
- int quit;\r
- int t;\r
- static int nargc;\r
- static char **nargv;\r
-\r
- puts(mikbanner);\r
-\r
- /* Expand wildcards on commandline */\r
-\r
- nargc=argc; nargv=argv;\r
-#ifndef __DJGPP__\r
- MyGlob(&nargc,&nargv,0);\r
-#else\r
- setvbuf(stdout, NULL, _IONBF, 0);\r
- __djgpp_set_ctrl_c(0);\r
-#endif\r
-\r
- /*\r
- Initialize soundcard parameters.. you _have_ to do this\r
- before calling MD_Init(), and it's illegal to change them\r
- after you've called MD_Init()\r
- */\r
-\r
- md_mixfreq =44100; /* standard mixing freq */\r
- md_dmabufsize =20000; /* standard dma buf size */\r
- md_mode =DMODE_16BITS|DMODE_STEREO; /* standard mixing mode */\r
- md_device =0; /* standard device: autodetect */\r
-\r
- /*\r
- Register the loaders we want to use..\r
- */\r
-\r
- ML_RegisterLoader(&load_m15); /* if you use m15load, register it as first! */\r
- ML_RegisterLoader(&load_mod);\r
- ML_RegisterLoader(&load_mtm);\r
- ML_RegisterLoader(&load_s3m);\r
- ML_RegisterLoader(&load_stm);\r
- ML_RegisterLoader(&load_ult);\r
- ML_RegisterLoader(&load_uni);\r
- ML_RegisterLoader(&load_xm);\r
-\r
- /*\r
- Register the drivers we want to use:\r
- */\r
-\r
- MD_RegisterDriver(&drv_nos);\r
-#ifdef __OS2__\r
- MD_RegisterDriver(&drv_os2);\r
-#elif defined(__WIN32__)\r
- MD_RegisterDriver(&drv_w95);\r
-#else\r
- MD_RegisterDriver(&drv_ss);\r
- MD_RegisterDriver(&drv_sb);\r
- MD_RegisterDriver(&drv_gus);\r
-#endif\r
-\r
- MD_RegisterPlayer(tickhandler);\r
-\r
- /* Parse option switches using standard getopt function: */\r
-\r
- opterr=0;\r
-\r
- while( !cmderr &&\r
- (t=getopt(nargc,nargv,"ohxpm8irv:f:l:d:")) != EOF ){\r
-\r
- switch(t){\r
-\r
- case 'd':\r
- md_device=atoi(optarg);\r
- break;\r
-\r
- case 'l':\r
- if(optarg[0]=='d') MD_InfoDriver();\r
- else if(optarg[0]=='l') ML_InfoLoader();\r
- else{\r
- cmderr=1;\r
- break;\r
- }\r
- exit(0);\r
-\r
- case 'r':\r
- mp_loop=1;\r
- break;\r
-\r
- case 'm':\r
- md_mode&=~DMODE_STEREO;\r
- break;\r
-\r
- case '8':\r
- md_mode&=~DMODE_16BITS;\r
- break;\r
-\r
- case 'i':\r
- md_mode|=DMODE_INTERP;\r
- break;\r
-\r
- case 'x':\r
- mp_extspd=0;\r
- break;\r
-\r
- case 'p':\r
- mp_panning=0;\r
- break;\r
-\r
- case 'v':\r
- if((mp_volume=atoi(optarg))>100) mp_volume=100;\r
- break;\r
-\r
- case 'f':\r
- md_mixfreq=atol(optarg);\r
- break;\r
-\r
- case 'h':\r
- morehelp=1;\r
- cmderr=1;\r
- break;\r
-\r
- case '?':\r
- puts("\07Invalid switch or option needs an argument\n");\r
- cmderr=1;\r
- break;\r
- }\r
- }\r
-\r
- if(cmderr || optind>=nargc){\r
-\r
- /*\r
- there was an error in the commandline, or there were no true\r
- arguments, so display a usage message\r
- */\r
-\r
- puts("Usage: MIKMOD [switches] <fletch.mod> ... \n");\r
-\r
- if(morehelp)\r
- puts(helptext);\r
- else\r
- puts("Type MIKMOD /h for more help.");\r
-\r
- exit(-1);\r
- }\r
-\r
- /* initialize soundcard */\r
-\r
- if(!MD_Init()){\r
- printf("Driver error: %s.\n",myerr);\r
- return 0;\r
- }\r
-\r
- printf("Using %s for %d bit %s %s sound at %u Hz\n\n",\r
- md_driver->Name,\r
- (md_mode&DMODE_16BITS) ? 16:8,\r
- (md_mode&DMODE_INTERP) ? "interpolated":"normal",\r
- (md_mode&DMODE_STEREO) ? "stereo":"mono",\r
- md_mixfreq);\r
-\r
-#ifdef __OS2__\r
- DosSetPriority( PRTYS_THREAD, PRTYC_TIMECRITICAL, 5L, 0UL );\r
-#endif\r
-\r
- for(quit=0; !quit && optind<nargc; optind++){\r
-\r
- printf("File : %s\n",nargv[optind]);\r
-\r
- /* load the module */\r
-\r
- mf=ML_LoadFN(nargv[optind]);\r
-\r
- /* didn't work -> exit with errormsg. */\r
-\r
- if(mf==NULL){\r
- printf("MikMod Error: %s\n",myerr);\r
- break;\r
- }\r
-\r
- /* initialize modplayer to play this module */\r
-\r
- MP_Init(mf);\r
-\r
- printf( "Songname: %s\n"\r
- "Modtype : %s\n"\r
- "Periods : %s,%s\n",\r
- mf->songname,\r
- mf->modtype,\r
- (mf->flags&UF_XMPERIODS) ? "XM type" : "mod type",\r
- (mf->flags&UF_LINEAR) ? "Linear" : "Log");\r
-\r
- /*\r
- set the number of voices to use.. you\r
- could add extra channels here (e.g. md_numchn=mf->numchn+4; )\r
- to use for your own soundeffects:\r
- */\r
-\r
- md_numchn=mf->numchn;\r
-\r
- /* start playing the module: */\r
-\r
- MD_PlayStart();\r
-\r
- while(!MP_Ready()){\r
-\r
- char c;\r
-\r
- c=kbhit() ? getch() : 0;\r
-\r
- if(c=='+')\r
- MP_NextPosition();\r
- else if(c=='-')\r
- MP_PrevPosition();\r
- else if(c==0x1b){\r
- quit=1;\r
- break;\r
- }\r
- else if(c==' ') break;\r
-\r
- MD_Update();\r
-\r
- /* wait a bit */\r
-\r
-#if defined(__OS2__)\r
- DosSleep(40); /* hmmmm */\r
-#elif defined(__WIN32__)\r
- Sleep(10);\r
-#elif defined(__DJGPP__)\r
- /* no wait for djgpp ? */\r
-#else\r
- delay(10);\r
-#endif\r
- printf("\rsngpos:%d patpos:%d sngspd %d bpm %d ",mp_sngpos,mp_patpos,mp_sngspd,mp_bpm);\r
- }\r
-\r
- MD_PlayStop(); /* stop playing */\r
- ML_Free(mf); /* and free the module */\r
- puts("\n");\r
- }\r
-\r
- MD_Exit();\r
- return 0;\r
-}\r