+++ /dev/null
-#ifndef MIKMOD_H\r
-#define MIKMOD_H\r
-\r
-#include <stdio.h>\r
-#include "mtypes.h" /* include atomic mikmod types */\r
-\r
-\r
-#define mikbanner \\r
-"=======================================================================\n" \\r
-"MIKMOD v2.10 - Portable version - Programmed by MikMak of HaRDCoDE '95\n" \\r
-"=======================================================================\n" \\r
-"This program is SHAREWARE - Read MIKMOD.TXT for more info\n" \\r
-"E-Mail : mikmak@stack.urc.tue.nl\n"\r
-\r
-\r
-/*\r
- error variables:\r
- ===============\r
-*/\r
-\r
-extern char *ERROR_ALLOC_STRUCT;\r
-extern char *ERROR_LOADING_PATTERN;\r
-extern char *ERROR_LOADING_TRACK;\r
-extern char *ERROR_LOADING_HEADER;\r
-extern char *ERROR_NOT_A_MODULE;\r
-extern char *ERROR_LOADING_SAMPLEINFO;\r
-extern char *ERROR_OUT_OF_HANDLES;\r
-extern char *ERROR_SAMPLE_TOO_BIG;\r
-extern char *myerr;\r
-\r
-\r
-\r
-#define _mm_rewind(x) _mm_fseek(x,0,SEEK_SET)\r
-int _mm_fseek(FILE *stream,long offset,int whence);\r
-void _mm_setiobase(long iobase);\r
-long _mm_ftell(FILE *stream);\r
-\r
-\r
-extern SBYTE _mm_read_SBYTE (FILE *fp);\r
-extern UBYTE _mm_read_UBYTE (FILE *fp);\r
-\r
-extern SWORD _mm_read_M_SWORD (FILE *fp);\r
-extern SWORD _mm_read_I_SWORD (FILE *fp);\r
-\r
-extern UWORD _mm_read_M_UWORD(FILE *fp);\r
-extern UWORD _mm_read_I_UWORD(FILE *fp);\r
-\r
-extern SLONG _mm_read_M_SLONG (FILE *fp);\r
-extern SLONG _mm_read_I_SLONG (FILE *fp);\r
-\r
-extern ULONG _mm_read_M_ULONG(FILE *fp);\r
-extern ULONG _mm_read_I_ULONG(FILE *fp);\r
-\r
-extern int _mm_read_str(char *str, int size, FILE *fp);\r
-\r
-extern int _mm_read_SBYTES (SBYTE *buffer, int number, FILE *fp);\r
-extern int _mm_read_UBYTES (UBYTE *buffer, int number, FILE *fp);\r
-\r
-extern int _mm_read_M_SWORDS (SWORD *buffer, int number, FILE *fp);\r
-extern int _mm_read_I_SWORDS (SWORD *buffer, int number, FILE *fp);\r
-\r
-extern int _mm_read_M_UWORDS (UWORD *buffer, int number, FILE *fp);\r
-extern int _mm_read_I_UWORDS (UWORD *buffer, int number, FILE *fp);\r
-\r
-extern int _mm_read_M_SLONGS (SLONG *buffer, int number, FILE *fp);\r
-extern int _mm_read_I_SLONGS (SLONG *buffer, int number, FILE *fp);\r
-\r
-extern int _mm_read_M_ULONGS (ULONG *buffer, int number, FILE *fp);\r
-extern int _mm_read_I_ULONGS (ULONG *buffer, int number, FILE *fp);\r
-\r
-\r
-extern void _mm_write_SBYTE (SBYTE data,FILE *fp);\r
-extern void _mm_write_UBYTE (UBYTE data,FILE *fp);\r
-\r
-extern void _mm_write_M_SWORD (SWORD data,FILE *fp);\r
-extern void _mm_write_I_SWORD (SWORD data,FILE *fp);\r
-\r
-extern void _mm_write_M_UWORD (UWORD data,FILE *fp);\r
-extern void _mm_write_I_UWORD (UWORD data,FILE *fp);\r
-\r
-extern void _mm_write_M_SLONG (SLONG data,FILE *fp);\r
-extern void _mm_write_I_SLONG (SLONG data,FILE *fp);\r
-\r
-extern void _mm_write_M_ULONG (ULONG data,FILE *fp);\r
-extern void _mm_write_I_ULONG (ULONG data,FILE *fp);\r
-\r
-extern void _mm_write_SBYTES (SBYTE *data, int number,FILE *fp);\r
-extern void _mm_write_UBYTES (UBYTE *data, int number,FILE *fp);\r
-\r
-extern void _mm_write_M_SWORDS (SWORD *data, int number,FILE *fp);\r
-extern void _mm_write_I_SWORDS (SWORD *data, int number,FILE *fp);\r
-\r
-extern void _mm_write_M_UWORDS (UWORD *data, int number,FILE *fp);\r
-extern void _mm_write_I_UWORDS (UWORD *data, int number,FILE *fp);\r
-\r
-extern void _mm_write_M_SLONGS (SLONG *data, int number,FILE *fp);\r
-extern void _mm_write_I_SLONGS (SLONG *data, int number,FILE *fp);\r
-\r
-extern void _mm_write_M_ULONGS (ULONG *data, int number,FILE *fp);\r
-extern void _mm_write_I_ULONGS (ULONG *data, int number,FILE *fp);\r
-\r
-\r
-/**************************************************************************\r
-****** Unitrack stuff: ****************************************************\r
-**************************************************************************/\r
-\r
-/*\r
- prototypes:\r
-*/\r
-\r
-void UniSetRow(UBYTE *t);\r
-UBYTE UniGetByte(void);\r
-UBYTE *UniFindRow(UBYTE *t,UWORD row);\r
-void UniReset(void);\r
-void UniWrite(UBYTE data);\r
-void UniNewline(void);\r
-void UniInstrument(UBYTE ins);\r
-void UniNote(UBYTE note);\r
-void UniPTEffect(UBYTE eff,UBYTE dat);\r
-UBYTE *UniDup(void);\r
-void UniSkipOpcode(UBYTE op);\r
-BOOL UniInit(void);\r
-void UniCleanup(void);\r
-UWORD TrkLen(UBYTE *t);\r
-BOOL MyCmp(UBYTE *a,UBYTE *b,UWORD l);\r
-\r
-/*\r
- all known effects:\r
-*/\r
-\r
-enum {\r
- UNI_NOTE=1,\r
- UNI_INSTRUMENT,\r
- UNI_PTEFFECT0,\r
- UNI_PTEFFECT1,\r
- UNI_PTEFFECT2,\r
- UNI_PTEFFECT3,\r
- UNI_PTEFFECT4,\r
- UNI_PTEFFECT5,\r
- UNI_PTEFFECT6,\r
- UNI_PTEFFECT7,\r
- UNI_PTEFFECT8,\r
- UNI_PTEFFECT9,\r
- UNI_PTEFFECTA,\r
- UNI_PTEFFECTB,\r
- UNI_PTEFFECTC,\r
- UNI_PTEFFECTD,\r
- UNI_PTEFFECTE,\r
- UNI_PTEFFECTF,\r
- UNI_S3MEFFECTA,\r
- UNI_S3MEFFECTD,\r
- UNI_S3MEFFECTE,\r
- UNI_S3MEFFECTF,\r
- UNI_S3MEFFECTI,\r
- UNI_S3MEFFECTQ,\r
- UNI_S3MEFFECTT,\r
- UNI_XMEFFECTA,\r
- UNI_XMEFFECTG,\r
- UNI_XMEFFECTH,\r
- UNI_XMEFFECTP\r
-};\r
-\r
-\r
-/**************************************************************************\r
-****** mikmod types: ******************************************************\r
-**************************************************************************/\r
-\r
-\r
-/*\r
- Sample format flags:\r
-*/\r
-\r
-#define SF_16BITS 1\r
-#define SF_SIGNED 2\r
-#define SF_DELTA 4\r
-#define SF_BIG_ENDIAN 8\r
-#define SF_LOOP 16\r
-#define SF_BIDI 32\r
-#define SF_OWNPAN 64\r
-#define SF_REVERSE 128\r
-\r
-\r
-/*\r
- Envelope flags:\r
-*/\r
-\r
-#define EF_ON 1\r
-#define EF_SUSTAIN 2\r
-#define EF_LOOP 4\r
-\r
-\r
-/*\r
- Unimod flags\r
-*/\r
-\r
-#define UF_XMPERIODS 1 /* if set use XM periods/finetuning */\r
-#define UF_LINEAR 2 /* if set use LINEAR periods */\r
-\r
-\r
-typedef struct ENVPT{\r
- SWORD pos;\r
- SWORD val;\r
-} ENVPT;\r
-\r
-\r
-typedef struct SAMPLE{\r
- UWORD c2spd; /* finetune frequency */\r
- SBYTE transpose; /* transpose value */\r
- UBYTE volume; /* volume 0-64 */\r
- UBYTE panning; /* panning */\r
- ULONG length; /* length of sample (in samples!) */\r
- ULONG loopstart; /* repeat position (relative to start, in samples) */\r
- ULONG loopend; /* repeat end */\r
- UWORD flags; /* sample format */\r
- ULONG seekpos; /* seek position in file */\r
- char *samplename; /* name of the sample */\r
- SWORD handle; /* sample handle */\r
-} SAMPLE;\r
-\r
-\r
-typedef struct INSTRUMENT{\r
- UBYTE numsmp;\r
- UBYTE samplenumber[96];\r
-\r
- UBYTE volflg; /* bit 0: on 1: sustain 2: loop */\r
- UBYTE volpts;\r
- UBYTE volsus;\r
- UBYTE volbeg;\r
- UBYTE volend;\r
- ENVPT volenv[12];\r
-\r
- UBYTE panflg; /* bit 0: on 1: sustain 2: loop */\r
- UBYTE panpts;\r
- UBYTE pansus;\r
- UBYTE panbeg;\r
- UBYTE panend;\r
- ENVPT panenv[12];\r
-\r
- UBYTE vibtype;\r
- UBYTE vibsweep;\r
- UBYTE vibdepth;\r
- UBYTE vibrate;\r
-\r
- UWORD volfade;\r
- char *insname;\r
- SAMPLE *samples;\r
-} INSTRUMENT;\r
-\r
-\r
-/*\r
- MikMod UNImod types:\r
- ====================\r
-*/\r
-\r
-typedef struct UNIMOD{\r
- UBYTE numchn; /* number of channels */\r
- UWORD numpos; /* number of positions in this song */\r
- UWORD reppos; /* restart position */\r
- UWORD numpat; /* number of patterns in this song */\r
- UWORD numtrk; /* number of tracks */\r
- UWORD numins; /* number of samples */\r
- UBYTE initspeed; /* */\r
- UBYTE inittempo; /* */\r
- UBYTE positions[256]; /* all positions */\r
- UBYTE panning[32]; /* 32 panning positions */\r
- UBYTE flags; /* */\r
- char *songname; /* name of the song */\r
- char *modtype; /* string type of module */\r
- char *comment; /* module comments */\r
- INSTRUMENT *instruments; /* all samples */\r
- UWORD *patterns; /* array of PATTERN */\r
- UWORD *pattrows; /* array of number of rows for each pattern */\r
- UBYTE **tracks; /* array of pointers to tracks */\r
-} UNIMOD;\r
-\r
-\r
-/**************************************************************************\r
-****** Loader stuff: ******************************************************\r
-**************************************************************************/\r
-\r
-/*\r
- loader structure:\r
-*/\r
-\r
-typedef struct LOADER{\r
- struct LOADER *next;\r
- char *type;\r
- char *version;\r
- BOOL (*Init)(void);\r
- BOOL (*Test)(void);\r
- BOOL (*Load)(void);\r
- void (*Cleanup)(void);\r
-} LOADER;\r
-\r
-\r
-/*\r
- public loader variables:\r
-*/\r
-\r
-extern UNIMOD of;\r
-extern FILE *modfp;\r
-extern UWORD finetune[16];\r
-\r
-\r
-/*\r
- main loader prototypes:\r
-*/\r
-\r
-void ML_InfoLoader(void);\r
-void ML_RegisterLoader(LOADER *ldr);\r
-UNIMOD *ML_LoadFP(FILE *fp);\r
-UNIMOD *ML_LoadFN(char *filename);\r
-void ML_Free(UNIMOD *mf);\r
-\r
-\r
-/*\r
- other loader prototypes: (used by the loader modules)\r
-*/\r
-\r
-BOOL InitTracks(void);\r
-void AddTrack(UBYTE *tr);\r
-BOOL ReadComment(UWORD len);\r
-BOOL AllocPatterns(void);\r
-BOOL AllocTracks(void);\r
-BOOL AllocInstruments(void);\r
-BOOL AllocSamples(INSTRUMENT *i);\r
-char *DupStr(char *s,UWORD len);\r
-void *MyMalloc(size_t size);\r
-void *MyCalloc(size_t nitems,size_t size);\r
-\r
-\r
-/*\r
- Declare external loaders:\r
-*/\r
-extern LOADER load_uni;\r
-extern LOADER load_mod;\r
-extern LOADER load_m15;\r
-extern LOADER load_mtm;\r
-extern LOADER load_s3m;\r
-extern LOADER load_stm;\r
-extern LOADER load_ult;\r
-extern LOADER load_xm;\r
-\r
-\r
-/**************************************************************************\r
-****** Wavload stuff: *****************************************************\r
-**************************************************************************/\r
-\r
-SAMPLE *MW_LoadWavFP(FILE *fp);\r
-SAMPLE *MW_LoadWavFN(char *filename);\r
-void MW_FreeWav(SAMPLE *si);\r
-\r
-\r
-/**************************************************************************\r
-****** Driver stuff: ******************************************************\r
-**************************************************************************/\r
-\r
-/*\r
- max. number of handles a driver has to provide. (not strict)\r
-*/\r
-\r
-#define MAXSAMPLEHANDLES 128\r
-\r
-\r
-/*\r
- possible mixing mode bits:\r
-*/\r
-\r
-#define DMODE_STEREO 1\r
-#define DMODE_16BITS 2\r
-#define DMODE_INTERP 4\r
-\r
-\r
-/*\r
- driver structure:\r
-*/\r
-\r
-typedef struct DRIVER{\r
- struct DRIVER *next;\r
- char *Name;\r
- char *Version;\r
- BOOL (*IsPresent) (void);\r
- SWORD (*SampleLoad) (FILE *fp,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
- void (*SampleUnLoad) (SWORD handle);\r
- BOOL (*Init) (void);\r
- void (*Exit) (void);\r
- void (*PlayStart) (void);\r
- void (*PlayStop) (void);\r
- void (*Update) (void);\r
- void (*VoiceSetVolume) (UBYTE voice,UBYTE vol);\r
- void (*VoiceSetFrequency) (UBYTE voice,ULONG frq);\r
- void (*VoiceSetPanning) (UBYTE voice,UBYTE pan);\r
- void (*VoicePlay) (UBYTE voice,SWORD handle,ULONG start,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
-} DRIVER;\r
-\r
-\r
-/*\r
- public driver variables:\r
-*/\r
-\r
-extern DRIVER *md_driver;\r
-extern UWORD md_device;\r
-extern UWORD md_mixfreq;\r
-extern UWORD md_dmabufsize;\r
-extern UWORD md_mode;\r
-extern UBYTE md_numchn;\r
-extern UBYTE md_bpm;\r
-extern void (*md_player)(void);\r
-\r
-/*\r
- main driver prototypes:\r
-*/\r
-\r
-void MD_InfoDriver(void);\r
-void MD_RegisterDriver(DRIVER *drv);\r
-void MD_RegisterPlayer(void (*plr)(void));\r
-SWORD MD_SampleLoad(FILE *fp,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
-void MD_SampleUnLoad(SWORD handle);\r
-BOOL MD_Init(void);\r
-void MD_Exit(void);\r
-void MD_PlayStart(void);\r
-void MD_PlayStop(void);\r
-void MD_SetBPM(UBYTE bpm);\r
-void MD_Update(void);\r
-void MD_VoiceSetVolume(UBYTE voice,UBYTE ivol);\r
-void MD_VoiceSetFrequency(UBYTE voice,ULONG frq);\r
-void MD_VoiceSetPanning(UBYTE voice,ULONG pan);\r
-void MD_VoicePlay(UBYTE voice,SWORD handle,ULONG start,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
-void SL_Init(FILE *fp,UWORD infmt,UWORD outfmt);\r
-void SL_Load(void *buffer,ULONG length);\r
-\r
-/*\r
- Declare external drivers:\r
-*/\r
-\r
-extern DRIVER drv_gus; /* gravis ultrasound driver */\r
-extern DRIVER drv_sb; /* soundblaster DSP driver */\r
-extern DRIVER drv_ss; /* ensoniq soundscape driver */\r
-extern DRIVER drv_nos; /* nosound driver */\r
-extern DRIVER drv_raw; /* file output driver */\r
-extern DRIVER drv_w95; /* win95 driver */\r
-extern DRIVER drv_awe; /* experimental SB-AWE driver */\r
-extern DRIVER drv_vox; /* linux voxware driver */\r
-extern DRIVER drv_af; /* Dec Alpha AudioFile driver */\r
-extern DRIVER drv_sun; /* Sun driver */\r
-extern DRIVER drv_os2; /* Os2 driver */\r
-extern DRIVER drv_tim; /* timing driver */\r
-\r
-/**************************************************************************\r
-****** Player stuff: ******************************************************\r
-**************************************************************************/\r
-\r
-\r
-typedef struct ENVPR{\r
- UBYTE flg; /* envelope flag */\r
- UBYTE pts; /* number of envelope points */\r
- UBYTE sus; /* envelope sustain index */\r
- UBYTE beg; /* envelope loop begin */\r
- UBYTE end; /* envelope loop end */\r
- SWORD p; /* current envelope counter */\r
- UWORD a; /* envelope index a */\r
- UWORD b; /* envelope index b */\r
- ENVPT *env; /* envelope points */\r
-} ENVPR;\r
-\r
-\r
-typedef struct AUDTMP{\r
- INSTRUMENT *i;\r
- SAMPLE *s;\r
-\r
- UWORD fadevol; /* fading volume */\r
-\r
- ENVPR venv;\r
- ENVPR penv;\r
-\r
- UBYTE keyon; /* if true=key is pressed. */\r
- UBYTE kick; /* if true=sample has to be restarted */\r
- UBYTE sample; /* which sample number (0-31) */\r
- SWORD handle; /* which sample-handle */\r
-\r
- ULONG start; /* The start byte index in the sample */\r
-\r
- UBYTE panning; /* panning position */\r
- UBYTE pansspd; /* panslide speed */\r
-\r
- SBYTE volume; /* amiga volume (0 t/m 64) to play the sample at */\r
- UWORD period; /* period to play the sample at */\r
-\r
- /* You should not have to use the values\r
- below in the player routine */\r
-\r
- SBYTE transpose;\r
-\r
- UBYTE note; /* */\r
-\r
- SWORD ownper;\r
- SWORD ownvol;\r
-\r
- UBYTE *row; /* row currently playing on this channel */\r
-\r
- SBYTE retrig; /* retrig value (0 means don't retrig) */\r
- UWORD c2spd; /* what finetune to use */\r
-\r
- SBYTE tmpvolume; /* tmp volume */\r
-\r
- UWORD tmpperiod; /* tmp period */\r
- UWORD wantedperiod; /* period to slide to (with effect 3 or 5) */\r
-\r
- UWORD slidespeed; /* */\r
- UWORD portspeed; /* noteslide speed (toneportamento) */\r
-\r
- UBYTE s3mtremor; /* s3m tremor (effect I) counter */\r
- UBYTE s3mtronof; /* s3m tremor ontime/offtime */\r
-\r
- UBYTE s3mvolslide; /* last used volslide */\r
-\r
- UBYTE s3mrtgspeed; /* last used retrig speed */\r
- UBYTE s3mrtgslide; /* last used retrig slide */\r
-\r
- UBYTE glissando; /* glissando (0 means off) */\r
- UBYTE wavecontrol; /* */\r
-\r
- SBYTE vibpos; /* current vibrato position */\r
- UBYTE vibspd; /* "" speed */\r
- UBYTE vibdepth; /* "" depth */\r
-\r
- SBYTE trmpos; /* current tremolo position */\r
- UBYTE trmspd; /* "" speed */\r
- UBYTE trmdepth; /* "" depth */\r
-\r
- UWORD soffset; /* last used sample-offset (effect 9) */\r
-} AUDTMP;\r
-\r
-\r
-extern AUDTMP mp_audio[32]; /* max eight channels */\r
-extern UBYTE mp_bpm; /* beats-per-minute speed */\r
-extern UWORD mp_patpos; /* current row number (0-63) */\r
-extern SWORD mp_sngpos; /* current song position */\r
-extern UWORD mp_sngspd; /* current songspeed */\r
-\r
-extern BOOL mp_loop;\r
-extern BOOL mp_panning;\r
-extern BOOL mp_extspd;\r
-extern UBYTE mp_volume;\r
-\r
-/*\r
- player prototypes:\r
-*/\r
-\r
-int MP_Ready(void);\r
-void MP_NextPosition(void);\r
-void MP_PrevPosition(void);\r
-void MP_SetPosition(UWORD pos);\r
-void MP_HandleTick(void);\r
-void MP_Init(UNIMOD *m);\r
-\r
-\r
-/**************************************************************************\r
-****** Virtual channel stuff: *********************************************\r
-**************************************************************************/\r
-\r
-BOOL VC_Init(void);\r
-void VC_Exit(void);\r
-\r
-void VC_PlayStart(void);\r
-void VC_PlayStop(void);\r
-\r
-SWORD VC_SampleLoad(FILE *fp,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
-void VC_SampleUnload(SWORD handle);\r
-\r
-void VC_WriteSamples(SBYTE *buf,UWORD todo);\r
-UWORD VC_WriteBytes(SBYTE *buf,UWORD todo);\r
-void VC_SilenceBytes(SBYTE *buf,UWORD todo);\r
-\r
-void VC_VoiceSetVolume(UBYTE voice,UBYTE vol);\r
-void VC_VoiceSetFrequency(UBYTE voice,ULONG frq);\r
-void VC_VoiceSetPanning(UBYTE voice,UBYTE pan);\r
-void VC_VoicePlay(UBYTE voice,SWORD handle,ULONG start,ULONG size,ULONG reppos,ULONG repend,UWORD flags);\r
-\r
-#endif\r