*.dll
*.occ
*.OCC
+*.map
+*.MAP
ASFLAGS = -fobj
CFLAGS = $(dbg) $(opt) $(def) -zq -bt=dos $(incpath)
CXXFLAGS = $(CFLAGS)
-LDFLAGS = $(libpath) library { $(libs) }
+LDFLAGS = option stack=16k option map $(libpath) library { $(libs) }
LD = wlink
$(bin): cflags.occ $(obj) libs/imago/imago.lib
alib = mikmod.lib
-opt = -5 -fp5 -otexan
-dbg = -d1
-def =
+opt = -5 -oxl+
+#dbg = -d1
CC = wcc386
AS = wasm
-CFLAGS = $(dbg) $(opt) $(def) -zq -zu -bt=dos -Isrc
+CFLAGS = $(dbg) $(opt) -zq -zu -j -s -bt=dos -Isrc
ASFLAGS = -zq -5pr
$(alib): cflags.occ $(obj)
***************************************************************************/\r
\r
static DMAMEM *SB_DMAMEM;\r
-static signed char *SB_DMABUF;\r
+static char *SB_DMABUF;\r
\r
static UBYTE SB_TIMECONSTANT;\r
\r
/* Scan for first printing char in buffer [includes high ascii up to 254] */\r
\r
while(len){\r
- if(!(s[len-1]>=0 && s[len-1]<=0x20)) break;\r
+ if(!(s[len-1]>=0 && s[len-1]<=0x20)) break;\r
len--;\r
}\r
\r
for any control-chars */\r
\r
if((d=(char *)malloc(len+1))!=NULL){\r
- for(t=0;t<len;t++) {\r
- d[t]=(s[t]>=0 && s[t]<32) ? ' ': s[t];\r
- }\r
+ for(t=0;t<len;t++) d[t]=(s[t]>=0 && s[t]<32) ? ' ': s[t];\r
d[t]=0;\r
}\r
}\r
\r
#else\r
\r
-typedef signed char SBYTE; /* has to be 1 byte signed */\r
+typedef char SBYTE; /* has to be 1 byte signed */\r
typedef unsigned char UBYTE; /* has to be 1 byte unsigned */\r
typedef short SWORD; /* has to be 2 bytes signed */\r
typedef unsigned short UWORD; /* has to be 2 bytes unsigned */\r
--- /dev/null
+/*\r
+\r
+Name:\r
+MWAV.C\r
+\r
+Description:\r
+WAV sample loader\r
+\r
+Portability:\r
+\r
+MSDOS: BC(y) Watcom(y) DJGPP(?)\r
+Win95: BC(n)\r
+Linux: n\r
+\r
+(y) - yes\r
+(n) - no (not possible or not useful)\r
+(?) - may be possible, but not tested\r
+\r
+*/\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include "mikmod.h"\r
+\r
+\r
+typedef struct WAV{\r
+ char rID[4];\r
+ ULONG rLen;\r
+ char wID[4];\r
+ char fID[4];\r
+ ULONG fLen;\r
+ UWORD wFormatTag;\r
+ UWORD nChannels;\r
+ ULONG nSamplesPerSec;\r
+ ULONG nAvgBytesPerSec;\r
+ UWORD nBlockAlign;\r
+ UWORD nFormatSpecific;\r
+} WAV;\r
+\r
+\r
+\r
+SAMPLE *MW_LoadWavFP(FILE *fp)\r
+{\r
+ SAMPLE *si;\r
+ static WAV wh;\r
+ static char dID[4];\r
+\r
+ _mm_rewind(fp);\r
+\r
+ /* read wav header */\r
+\r
+ _mm_read_str(wh.rID,4,fp);\r
+ wh.rLen=_mm_read_I_ULONG(fp);\r
+ _mm_read_str(wh.wID,4,fp);\r
+ _mm_read_str(wh.fID,4,fp);\r
+ wh.fLen=_mm_read_I_ULONG(fp);\r
+ wh.wFormatTag=_mm_read_I_UWORD(fp);\r
+ wh.nChannels=_mm_read_I_UWORD(fp);\r
+ wh.nSamplesPerSec=_mm_read_I_ULONG(fp);\r
+ wh.nAvgBytesPerSec=_mm_read_I_ULONG(fp);\r
+ wh.nBlockAlign=_mm_read_I_UWORD(fp);\r
+ wh.nFormatSpecific=_mm_read_I_UWORD(fp);\r
+\r
+ /* check it */\r
+\r
+ if( feof(fp) ||\r
+ memcmp(wh.rID,"RIFF",4) ||\r
+ memcmp(wh.wID,"WAVE",4) ||\r
+ memcmp(wh.fID,"fmt ",4) ){\r
+ myerr="Not a WAV file";\r
+ return NULL;\r
+ }\r
+\r
+ /* skip other crap */\r
+\r
+ _mm_fseek(fp,wh.fLen-16,SEEK_CUR);\r
+ _mm_read_str(dID,4,fp);\r
+\r
+ if( memcmp(dID,"data",4) ){\r
+ myerr="Not a WAV file";\r
+ return NULL;\r
+ }\r
+\r
+ if(wh.nChannels>1){\r
+ myerr="Only mono WAV's are supported";\r
+ return NULL;\r
+ }\r
+\r
+/* printf("wFormatTag: %x\n",wh.wFormatTag); */\r
+/* printf("blockalign: %x\n",wh.nBlockAlign); */\r
+/* prinff("nFormatSpc: %x\n",wh.nFormatSpecific); */\r
+\r
+ if((si=(SAMPLE *)calloc(1,sizeof(SAMPLE)))==NULL){\r
+ myerr="Out of memory";\r
+ return NULL;\r
+ };\r
+\r
+ si->c2spd=8192;\r
+ si->volume=64;\r
+\r
+ si->length=_mm_read_I_ULONG(fp);\r
+\r
+ if(wh.nBlockAlign==2){\r
+ si->flags=SF_16BITS|SF_SIGNED;\r
+ si->length>>=1;\r
+ }\r
+\r
+ si->handle=MD_SampleLoad(fp,si->length,0,si->length,si->flags);\r
+\r
+ if(si->handle<0){\r
+ free(si);\r
+ return NULL;\r
+ }\r
+\r
+ return si;\r
+}\r
+\r
+\r
+SAMPLE *MW_LoadWavFN(char *filename)\r
+{\r
+ FILE *fp;\r
+ SAMPLE *si;\r
+\r
+ if((fp=fopen(filename,"rb"))==NULL){\r
+ myerr="Couldn't open wav file";\r
+ return NULL;\r
+ }\r
+\r
+ si=MW_LoadWavFP(fp);\r
+\r
+ fclose(fp);\r
+ return si;\r
+}\r
+\r
+\r
+void MW_FreeWav(SAMPLE *si)\r
+{\r
+ if(si!=NULL){\r
+ MD_SampleUnLoad(si->handle);\r
+ free(si);\r
+ }\r
+}\r
#include <stdlib.h>
#include "music.h"
#include "mikmod.h"
+#include "logger.h"
static void update_callback(void);
static int init(void)
{
+ md_mixfreq = 44100;
+ md_dmabufsize = 20000;
+ md_mode = DMODE_STEREO | DMODE_16BITS;/* | DMODE_INTERP;*/
+ md_device = 0;
+
+ ML_RegisterLoader(&load_m15);
ML_RegisterLoader(&load_mod);
+ ML_RegisterLoader(&load_mtm);
ML_RegisterLoader(&load_s3m);
+ ML_RegisterLoader(&load_stm);
+ ML_RegisterLoader(&load_ult);
+ ML_RegisterLoader(&load_uni);
ML_RegisterLoader(&load_xm);
MD_RegisterDriver(&drv_nos);
MD_RegisterDriver(&drv_sb);
MD_RegisterDriver(&drv_gus);
- MD_RegisterPlayer(&update_callback);
+ MD_RegisterPlayer(update_callback);
- /*md_mode |= DMODE_INTERP;*/
if(!MD_Init()) {
- fprintf(stderr, "mikmod init failed: %s\n", myerr);
+ printlog("mikmod init failed: %s\n", myerr);
return -1;
}
- printf("using mikmod driver %s\n", md_driver->Name);
- printf(" %d bits, %s, %s mixing at %d Hz\n", md_mode & DMODE_16BITS ? 16 : 8,
+ printlog("using mikmod driver %s\n", md_driver->Name);
+ printlog(" %d bits, %s, %s mixing at %d Hz\n", md_mode & DMODE_16BITS ? 16 : 8,
md_mode & DMODE_STEREO ? "stereo" : "mono",
md_mode & DMODE_INTERP ? "interpolated" : "normal",
md_mixfreq);
}
if(!(mod = ML_LoadFN((const signed char*)fname))) {
- fprintf(stderr, "failed to load music: %s: %s\n", fname, myerr);
+ printlog("failed to load music: %s: %s\n", fname, myerr);
return -1;
}
+
+ MP_Init(mod);
md_numchn = mod->numchn;
+ printlog("opened module %s (%d channels)\n", fname, md_numchn);
return 0;
}
void music_close(void)
{
if(mod) {
+ printlog("shutting down music playback\n");
music_stop();
ML_Free(mod);
mod = 0;