Add "MikMod for Rockbox 0.1" from 2007-06-29
[mikmod-rockbox.git] / apps / plugins / mikmod / include / mikmod_build.h
diff --git a/apps/plugins/mikmod/include/mikmod_build.h b/apps/plugins/mikmod/include/mikmod_build.h
new file mode 100644 (file)
index 0000000..0f80319
--- /dev/null
@@ -0,0 +1,753 @@
+/*     MikMod sound library\r
+       (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS\r
+       for complete list.\r
+\r
+       This library is free software; you can redistribute it and/or modify\r
+       it under the terms of the GNU Library General Public License as\r
+       published by the Free Software Foundation; either version 2 of\r
+       the License, or (at your option) any later version.\r
\r
+       This program is distributed in the hope that it will be useful,\r
+       but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+       GNU Library General Public License for more details.\r
\r
+       You should have received a copy of the GNU Library General Public\r
+       License along with this library; if not, write to the Free Software\r
+       Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA\r
+       02111-1307, USA.\r
+*/\r
+\r
+/*==============================================================================\r
+\r
+  $Id: mikmod_build.h,v 1.3 2004/02/19 14:15:22 raph Exp $\r
+\r
+  MikMod sound library include file\r
+\r
+==============================================================================*/\r
+\r
+#ifndef _MIKMOD_H_\r
+#define _MIKMOD_H_\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+/*\r
+ * ========== Compiler magic for shared libraries\r
+ */\r
+\r
+#if defined WIN32 && defined _DLL\r
+#ifdef DLL_EXPORTS\r
+#define MIKMODAPI __declspec(dllexport)\r
+#else\r
+#define MIKMODAPI __declspec(dllimport)\r
+#endif\r
+#else\r
+#define MIKMODAPI\r
+#endif\r
+\r
+#define BOOL BOOLTYPE\r
+\r
+#ifdef WIN32\r
+       #undef WIN32\r
+#endif\r
+\r
+/*\r
+ *     ========== Library version\r
+ */\r
+\r
+#define LIBMIKMOD_VERSION_MAJOR 3L\r
+#define LIBMIKMOD_VERSION_MINOR 2L\r
+#define LIBMIKMOD_REVISION      0L\r
+\r
+#define LIBMIKMOD_VERSION \\r
+       ((LIBMIKMOD_VERSION_MAJOR<<16)| \\r
+        (LIBMIKMOD_VERSION_MINOR<< 8)| \\r
+        (LIBMIKMOD_REVISION))\r
+\r
+MIKMODAPI extern long MikMod_GetVersion(void);\r
+\r
+/*\r
+ *     ========== Platform independent-type definitions\r
+ */\r
+\r
+#ifdef WIN32\r
+#define WIN32_LEAN_AND_MEAN\r
+#include <windows.h>\r
+#include <io.h>\r
+#include <mmsystem.h>\r
+#endif\r
+\r
+#if defined(__OS2__)||defined(__EMX__)\r
+#define INCL_DOSSEMAPHORES\r
+#include <os2.h>\r
+#else\r
+typedef char CHAR;\r
+#endif\r
+\r
+\r
+\r
+#if defined(__arch64__) || defined(__alpha)\r
+/* 64 bit architectures */\r
+\r
+typedef signed char     SBYTE;      /* 1 byte, signed */\r
+typedef unsigned char   UBYTE;      /* 1 byte, unsigned */\r
+typedef signed short    SWORD;      /* 2 bytes, signed */\r
+typedef unsigned short  UWORD;      /* 2 bytes, unsigned */\r
+typedef signed int      SLONG;      /* 4 bytes, signed */\r
+typedef unsigned int    ULONG;      /* 4 bytes, unsigned */\r
+typedef int             BOOL;       /* 0=false, <>0 true */\r
+\r
+#else\r
+/* 32 bit architectures */\r
+\r
+typedef signed char     SBYTE;      /* 1 byte, signed */\r
+typedef unsigned char   UBYTE;      /* 1 byte, unsigned */\r
+typedef signed short    SWORD;      /* 2 bytes, signed */\r
+typedef unsigned short  UWORD;      /* 2 bytes, unsigned */\r
+typedef signed long     SLONG;      /* 4 bytes, signed */\r
+#if !defined(__OS2__)&&!defined(__EMX__)&&!defined(WIN32)\r
+typedef unsigned long   ULONG;      /* 4 bytes, unsigned */\r
+typedef int             BOOL;       /* 0=false, <>0 true */\r
+#endif\r
+#endif\r
+\r
+/*\r
+ *     ========== Error codes\r
+ */\r
+\r
+enum {\r
+       MMERR_OPENING_FILE = 1,\r
+       MMERR_OUT_OF_MEMORY,\r
+       MMERR_DYNAMIC_LINKING,\r
+\r
+       MMERR_SAMPLE_TOO_BIG,\r
+       MMERR_OUT_OF_HANDLES,\r
+       MMERR_UNKNOWN_WAVE_TYPE,\r
+\r
+       MMERR_LOADING_PATTERN,\r
+       MMERR_LOADING_TRACK,\r
+       MMERR_LOADING_HEADER,\r
+       MMERR_LOADING_SAMPLEINFO,\r
+       MMERR_NOT_A_MODULE,\r
+       MMERR_NOT_A_STREAM,\r
+       MMERR_MED_SYNTHSAMPLES,\r
+       MMERR_ITPACK_INVALID_DATA,\r
+\r
+       MMERR_DETECTING_DEVICE,\r
+       MMERR_INVALID_DEVICE,\r
+       MMERR_INITIALIZING_MIXER,\r
+       MMERR_OPENING_AUDIO,\r
+       MMERR_8BIT_ONLY,\r
+       MMERR_16BIT_ONLY,\r
+       MMERR_STEREO_ONLY,\r
+       MMERR_ULAW,\r
+       MMERR_NON_BLOCK,\r
+\r
+       MMERR_AF_AUDIO_PORT,\r
+\r
+       MMERR_AIX_CONFIG_INIT,\r
+       MMERR_AIX_CONFIG_CONTROL,\r
+       MMERR_AIX_CONFIG_START,\r
+\r
+       MMERR_GUS_SETTINGS,\r
+       MMERR_GUS_RESET,\r
+       MMERR_GUS_TIMER,\r
+\r
+       MMERR_HP_SETSAMPLESIZE,\r
+       MMERR_HP_SETSPEED,\r
+       MMERR_HP_CHANNELS,\r
+       MMERR_HP_AUDIO_OUTPUT,\r
+       MMERR_HP_AUDIO_DESC,\r
+       MMERR_HP_BUFFERSIZE,\r
+\r
+       MMERR_OSS_SETFRAGMENT,\r
+       MMERR_OSS_SETSAMPLESIZE,\r
+       MMERR_OSS_SETSTEREO,\r
+       MMERR_OSS_SETSPEED,\r
+\r
+       MMERR_SGI_SPEED,\r
+       MMERR_SGI_16BIT,\r
+       MMERR_SGI_8BIT,\r
+       MMERR_SGI_STEREO,\r
+       MMERR_SGI_MONO,\r
+\r
+       MMERR_SUN_INIT,\r
+\r
+       MMERR_OS2_MIXSETUP,\r
+       MMERR_OS2_SEMAPHORE,\r
+       MMERR_OS2_TIMER,\r
+       MMERR_OS2_THREAD,\r
+\r
+       MMERR_DS_PRIORITY,\r
+       MMERR_DS_BUFFER,\r
+       MMERR_DS_FORMAT,\r
+       MMERR_DS_NOTIFY,\r
+       MMERR_DS_EVENT,\r
+       MMERR_DS_THREAD,\r
+       MMERR_DS_UPDATE,\r
+\r
+       MMERR_WINMM_HANDLE,\r
+       MMERR_WINMM_ALLOCATED,\r
+       MMERR_WINMM_DEVICEID,\r
+       MMERR_WINMM_FORMAT,\r
+       MMERR_WINMM_UNKNOWN,\r
+\r
+       MMERR_MAC_SPEED,\r
+       MMERR_MAC_START,\r
+\r
+    MMERR_OSX_UNKNOWN_DEVICE,\r
+    MMERR_OSX_BAD_PROPERTY,\r
+    MMERR_OSX_UNSUPPORTED_FORMAT,\r
+    MMERR_OSX_SET_STEREO,\r
+    MMERR_OSX_BUFFER_ALLOC,\r
+    MMERR_OSX_ADD_IO_PROC,\r
+    MMERR_OSX_DEVICE_START,\r
+       MMERR_OSX_PTHREAD,\r
+\r
+       MMERR_DOSWSS_STARTDMA,\r
+       MMERR_DOSSB_STARTDMA,\r
+       \r
+       MMERR_MAX\r
+};\r
+\r
+/*\r
+ *     ========== Error handling\r
+ */\r
+\r
+typedef void (MikMod_handler)(void);\r
+typedef MikMod_handler *MikMod_handler_t;\r
+\r
+MIKMODAPI extern int  MikMod_errno;\r
+MIKMODAPI extern BOOL MikMod_critical;\r
+MIKMODAPI extern char *MikMod_strerror(int);\r
+\r
+MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t);\r
+\r
+/*\r
+ *     ========== Library initialization and core functions\r
+ */\r
+\r
+struct MDRIVER;\r
+\r
+MIKMODAPI extern void   MikMod_RegisterAllDrivers(void);\r
+\r
+MIKMODAPI extern CHAR*  MikMod_InfoDriver(void);\r
+MIKMODAPI extern void   MikMod_RegisterDriver(struct MDRIVER*);\r
+MIKMODAPI extern int    MikMod_DriverFromAlias(CHAR*);\r
+MIKMODAPI extern struct MDRIVER *MikMod_DriverByOrdinal(int);\r
+\r
+MIKMODAPI extern BOOL   MikMod_Init(CHAR*);\r
+MIKMODAPI extern void   MikMod_Exit(void);\r
+MIKMODAPI extern BOOL   MikMod_Reset(CHAR*);\r
+MIKMODAPI extern BOOL   MikMod_SetNumVoices(int,int);\r
+MIKMODAPI extern BOOL   MikMod_Active(void);\r
+MIKMODAPI extern BOOL   MikMod_EnableOutput(void);\r
+MIKMODAPI extern void   MikMod_DisableOutput(void);\r
+MIKMODAPI extern void   MikMod_Update(void);\r
+\r
+MIKMODAPI extern BOOL   MikMod_InitThreads(void);\r
+MIKMODAPI extern void   MikMod_Lock(void);\r
+MIKMODAPI extern void   MikMod_Unlock(void);\r
+\r
+/*\r
+ *     ========== Reader, Writer\r
+ */\r
+\r
+typedef struct MREADER {\r
+       BOOL (*Seek)(struct MREADER*,long,int);\r
+       long (*Tell)(struct MREADER*);\r
+       BOOL (*Read)(struct MREADER*,void*,size_t);\r
+       int  (*Get)(struct MREADER*);\r
+       BOOL (*Eof)(struct MREADER*);\r
+} MREADER;\r
+\r
+typedef struct MWRITER {\r
+       BOOL (*Seek)(struct MWRITER*,long,int);\r
+       long (*Tell)(struct MWRITER*);\r
+       BOOL (*Write)(struct MWRITER*,void*,size_t);\r
+       BOOL (*Put)(struct MWRITER*,int);\r
+} MWRITER;\r
+\r
+/*\r
+ *     ========== Samples\r
+ */\r
+\r
+/* Sample playback should not be interrupted */\r
+#define SFX_CRITICAL 1\r
+\r
+/* Sample format [loading and in-memory] flags: */\r
+#define SF_16BITS       0x0001\r
+#define SF_STEREO       0x0002\r
+#define SF_SIGNED       0x0004\r
+#define SF_BIG_ENDIAN   0x0008\r
+#define SF_DELTA        0x0010\r
+#define SF_ITPACKED            0x0020\r
+\r
+#define        SF_FORMATMASK   0x003F\r
+\r
+/* General Playback flags */\r
+\r
+#define SF_LOOP         0x0100\r
+#define SF_BIDI         0x0200\r
+#define SF_REVERSE      0x0400\r
+#define SF_SUSTAIN      0x0800\r
+\r
+#define SF_PLAYBACKMASK        0x0C00\r
+\r
+/* Module-only Playback Flags */\r
+\r
+#define SF_OWNPAN              0x1000\r
+#define SF_UST_LOOP     0x2000\r
+\r
+#define SF_EXTRAPLAYBACKMASK   0x3000\r
+\r
+/* Panning constants */\r
+#define PAN_LEFT               0\r
+#define PAN_HALFLEFT   64\r
+#define PAN_CENTER             128\r
+#define PAN_HALFRIGHT  192\r
+#define PAN_RIGHT              255\r
+#define PAN_SURROUND   512 /* panning value for Dolby Surround */\r
+\r
+typedef struct SAMPLE {\r
+       SWORD  panning;     /* panning (0-255 or PAN_SURROUND) */\r
+       ULONG  speed;       /* Base playing speed/frequency of note */\r
+       UBYTE  volume;      /* volume 0-64 */\r
+       UWORD  inflags;         /* sample format on disk */\r
+       UWORD  flags;       /* sample format in memory */\r
+       ULONG  length;      /* length of sample (in samples!) */\r
+       ULONG  loopstart;   /* repeat position (relative to start, in samples) */\r
+       ULONG  loopend;     /* repeat end */\r
+       ULONG  susbegin;    /* sustain loop begin (in samples) \  Not Supported */\r
+       ULONG  susend;      /* sustain loop end                /      Yet! */\r
+\r
+       /* Variables used by the module player only! (ignored for sound effects) */\r
+       UBYTE  globvol;     /* global volume */\r
+       UBYTE  vibflags;    /* autovibrato flag stuffs */\r
+       UBYTE  vibtype;     /* Vibratos moved from INSTRUMENT to SAMPLE */\r
+       UBYTE  vibsweep;\r
+       UBYTE  vibdepth;\r
+       UBYTE  vibrate;\r
+       CHAR*  samplename;  /* name of the sample */\r
+\r
+       /* Values used internally only */\r
+       UWORD  avibpos;     /* autovibrato pos [player use] */\r
+       UBYTE  divfactor;   /* for sample scaling, maintains proper period slides */\r
+       ULONG  seekpos;     /* seek position in file */\r
+       SWORD  handle;      /* sample handle used by individual drivers */\r
+} SAMPLE;\r
+\r
+/* Sample functions */\r
+\r
+MIKMODAPI extern SAMPLE *Sample_Load(CHAR*);\r
+MIKMODAPI extern SAMPLE *Sample_LoadFP(int);\r
+MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*);\r
+MIKMODAPI extern void   Sample_Free(SAMPLE*);\r
+MIKMODAPI extern SBYTE  Sample_Play(SAMPLE*,ULONG,UBYTE);\r
+\r
+MIKMODAPI extern void   Voice_SetVolume(SBYTE,UWORD);\r
+MIKMODAPI extern UWORD  Voice_GetVolume(SBYTE);\r
+MIKMODAPI extern void   Voice_SetFrequency(SBYTE,ULONG);\r
+MIKMODAPI extern ULONG  Voice_GetFrequency(SBYTE);\r
+MIKMODAPI extern void   Voice_SetPanning(SBYTE,ULONG);\r
+MIKMODAPI extern ULONG  Voice_GetPanning(SBYTE);\r
+MIKMODAPI extern void   Voice_Play(SBYTE,SAMPLE*,ULONG);\r
+MIKMODAPI extern void   Voice_Stop(SBYTE);\r
+MIKMODAPI extern BOOL   Voice_Stopped(SBYTE);\r
+MIKMODAPI extern SLONG  Voice_GetPosition(SBYTE);\r
+MIKMODAPI extern ULONG  Voice_RealVolume(SBYTE);\r
+\r
+/*\r
+ *     ========== Internal module representation (UniMod)\r
+ */\r
+\r
+/*\r
+       Instrument definition - for information only, the only field which may be\r
+       of use in user programs is the name field\r
+*/\r
+\r
+/* Instrument note count */\r
+#define INSTNOTES 120\r
+\r
+/* Envelope point */\r
+typedef struct ENVPT {\r
+       SWORD pos;\r
+       SWORD val;\r
+} ENVPT;\r
+\r
+/* Envelope point count */\r
+#define ENVPOINTS 32\r
+\r
+/* Instrument structure */\r
+typedef struct INSTRUMENT {\r
+       CHAR* insname;\r
+\r
+       UBYTE flags;\r
+       UWORD samplenumber[INSTNOTES];\r
+       UBYTE samplenote[INSTNOTES];\r
+\r
+       UBYTE nnatype;\r
+       UBYTE dca;              /* duplicate check action */\r
+       UBYTE dct;              /* duplicate check type */\r
+       UBYTE globvol;\r
+       UWORD volfade;\r
+       SWORD panning;          /* instrument-based panning var */\r
+\r
+       UBYTE pitpansep;        /* pitch pan separation (0 to 255) */\r
+       UBYTE pitpancenter;     /* pitch pan center (0 to 119) */\r
+       UBYTE rvolvar;          /* random volume varations (0 - 100%) */\r
+       UBYTE rpanvar;          /* random panning varations (0 - 100%) */\r
+\r
+       /* volume envelope */\r
+       UBYTE volflg;           /* bit 0: on 1: sustain 2: loop */\r
+       UBYTE volpts;\r
+       UBYTE volsusbeg;\r
+       UBYTE volsusend;\r
+       UBYTE volbeg;\r
+       UBYTE volend;\r
+       ENVPT volenv[ENVPOINTS];\r
+       /* panning envelope */\r
+       UBYTE panflg;           /* bit 0: on 1: sustain 2: loop */\r
+       UBYTE panpts;\r
+       UBYTE pansusbeg;\r
+       UBYTE pansusend;\r
+       UBYTE panbeg;\r
+       UBYTE panend;\r
+       ENVPT panenv[ENVPOINTS];\r
+       /* pitch envelope */\r
+       UBYTE pitflg;           /* bit 0: on 1: sustain 2: loop */\r
+       UBYTE pitpts;\r
+       UBYTE pitsusbeg;\r
+       UBYTE pitsusend;\r
+       UBYTE pitbeg;\r
+       UBYTE pitend;\r
+       ENVPT pitenv[ENVPOINTS];\r
+} INSTRUMENT;\r
+\r
+struct MP_CONTROL;\r
+struct MP_VOICE;\r
+\r
+/*\r
+       Module definition\r
+*/\r
+\r
+/* maximum master channels supported */\r
+#define UF_MAXCHAN     64\r
+\r
+/* Module flags */\r
+#define UF_XMPERIODS   0x0001 /* XM periods / finetuning */\r
+#define UF_LINEAR              0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */\r
+#define UF_INST                        0x0004 /* Instruments are used */\r
+#define UF_NNA                 0x0008 /* IT: NNA used, set numvoices rather\r
+                                                                 than numchn */\r
+#define UF_S3MSLIDES   0x0010 /* uses old S3M volume slides */\r
+#define UF_BGSLIDES            0x0020 /* continue volume slides in the background */\r
+#define UF_HIGHBPM             0x0040 /* MED: can use >255 bpm */\r
+#define UF_NOWRAP              0x0080 /* XM-type (i.e. illogical) pattern break\r
+                                                                 semantics */\r
+#define UF_ARPMEM              0x0100 /* IT: need arpeggio memory */\r
+#define UF_FT2QUIRKS   0x0200 /* emulate some FT2 replay quirks */\r
+#define UF_PANNING             0x0400 /* module uses panning effects or have\r
+                                                                 non-tracker default initial panning */\r
+\r
+typedef struct MODULE {\r
+       /* general module information */\r
+               CHAR*       songname;    /* name of the song */\r
+               CHAR*       modtype;     /* string type of module loaded */\r
+               CHAR*       comment;     /* module comments */\r
+\r
+               UWORD       flags;       /* See module flags above */\r
+               UBYTE       numchn;      /* number of module channels */\r
+               UBYTE       numvoices;   /* max # voices used for full NNA playback */\r
+               UWORD       numpos;      /* number of positions in this song */\r
+               UWORD       numpat;      /* number of patterns in this song */\r
+               UWORD       numins;      /* number of instruments */\r
+               UWORD       numsmp;      /* number of samples */\r
+struct  INSTRUMENT* instruments; /* all instruments */\r
+struct  SAMPLE*     samples;     /* all samples */\r
+               UBYTE       realchn;     /* real number of channels used */\r
+               UBYTE       totalchn;    /* total number of channels used (incl NNAs) */\r
+\r
+       /* playback settings */\r
+               UWORD       reppos;      /* restart position */\r
+               UBYTE       initspeed;   /* initial song speed */\r
+               UWORD       inittempo;   /* initial song tempo */\r
+               UBYTE       initvolume;  /* initial global volume (0 - 128) */\r
+               UWORD       panning[UF_MAXCHAN]; /* panning positions */\r
+               UBYTE       chanvol[UF_MAXCHAN]; /* channel positions */\r
+               UWORD       bpm;         /* current beats-per-minute speed */\r
+               UWORD       sngspd;      /* current song speed */\r
+               SWORD       volume;      /* song volume (0-128) (or user volume) */\r
+\r
+               BOOL        extspd;      /* extended speed flag (default enabled) */\r
+               BOOL        panflag;     /* panning flag (default enabled) */\r
+               BOOL        wrap;        /* wrap module ? (default disabled) */\r
+               BOOL        loop;                /* allow module to loop ? (default enabled) */\r
+               BOOL        fadeout;     /* volume fade out during last pattern */\r
+\r
+               UWORD       patpos;      /* current row number */\r
+               SWORD       sngpos;      /* current song position */\r
+               ULONG       sngtime;     /* current song time in 2^-10 seconds */\r
+\r
+               SWORD       relspd;      /* relative speed factor */\r
+\r
+       /* internal module representation */\r
+               UWORD       numtrk;      /* number of tracks */\r
+               UBYTE**     tracks;      /* array of numtrk pointers to tracks */\r
+               UWORD*      patterns;    /* array of Patterns */\r
+               UWORD*      pattrows;    /* array of number of rows for each pattern */\r
+               UWORD*      positions;   /* all positions */\r
+\r
+               BOOL        forbid;      /* if true, no player update! */\r
+               UWORD       numrow;      /* number of rows on current pattern */\r
+               UWORD       vbtick;      /* tick counter (counts from 0 to sngspd) */\r
+               UWORD       sngremainder;/* used for song time computation */\r
+\r
+struct MP_CONTROL*  control;     /* Effects Channel info (size pf->numchn) */\r
+struct MP_VOICE*    voice;       /* Audio Voice information (size md_numchn) */\r
+\r
+               UBYTE       globalslide; /* global volume slide rate */\r
+               UBYTE       pat_repcrazy;/* module has just looped to position -1 */\r
+               UWORD       patbrk;      /* position where to start a new pattern */\r
+               UBYTE       patdly;      /* patterndelay counter (command memory) */\r
+               UBYTE       patdly2;     /* patterndelay counter (real one) */\r
+               SWORD       posjmp;      /* flag to indicate a jump is needed... */\r
+               UWORD           bpmlimit;        /* threshold to detect bpm or speed values */\r
+} MODULE;\r
+\r
+\r
+/* This structure is used to query current playing voices status */\r
+typedef struct VOICEINFO {\r
+               INSTRUMENT* i;            /* Current channel instrument */\r
+               SAMPLE*     s;            /* Current channel sample */\r
+               SWORD       panning;      /* panning position */\r
+               SBYTE       volume;       /* channel's "global" volume (0..64) */\r
+               UWORD       period;       /* period to play the sample at */\r
+               UBYTE       kick;         /* if true = sample has been restarted */\r
+} VOICEINFO;\r
+\r
+/*\r
+ *     ========== Module loaders\r
+ */\r
+\r
+struct MLOADER;\r
+\r
+MIKMODAPI extern CHAR*   MikMod_InfoLoader(void);\r
+MIKMODAPI extern void    MikMod_RegisterAllLoaders(void);\r
+MIKMODAPI extern void    MikMod_RegisterLoader(struct MLOADER*);\r
+\r
+MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */\r
+MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */\r
+MIKMODAPI extern struct MLOADER load_asy; /* ASYLUM Music Format 1.0 */\r
+MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */\r
+MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */\r
+MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */\r
+MIKMODAPI extern struct MLOADER load_it;  /* Impulse Tracker (by Jeffrey Lim) */\r
+MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */\r
+MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */\r
+MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */\r
+MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */\r
+MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */\r
+MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */\r
+MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */\r
+MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */\r
+MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */\r
+MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */\r
+MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */\r
+MIKMODAPI extern struct MLOADER load_xm;  /* FastTracker 2 (by Triton) */\r
+\r
+/*\r
+ *     ========== Module player\r
+ */\r
+\r
+MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL);\r
+MIKMODAPI extern MODULE* Player_LoadFP(int,int,BOOL);\r
+MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL);\r
+MIKMODAPI extern CHAR*   Player_LoadTitle(CHAR*);\r
+MIKMODAPI extern CHAR*   Player_LoadTitleFP(int);\r
+MIKMODAPI extern void    Player_Free(MODULE*);\r
+MIKMODAPI extern void    Player_Start(MODULE*);\r
+MIKMODAPI extern BOOL    Player_Active(void);\r
+MIKMODAPI extern void    Player_Stop(void);\r
+MIKMODAPI extern void    Player_TogglePause(void);\r
+MIKMODAPI extern BOOL    Player_Paused(void);\r
+MIKMODAPI extern void    Player_NextPosition(void);\r
+MIKMODAPI extern void    Player_PrevPosition(void);\r
+MIKMODAPI extern void    Player_SetPosition(UWORD);\r
+MIKMODAPI extern BOOL    Player_Muted(UBYTE);\r
+MIKMODAPI extern void    Player_SetVolume(SWORD);\r
+MIKMODAPI extern MODULE* Player_GetModule(void);\r
+MIKMODAPI extern void    Player_SetSpeed(UWORD);\r
+MIKMODAPI extern void    Player_SetTempo(UWORD);\r
+MIKMODAPI extern void    Player_Unmute(SLONG,...);\r
+MIKMODAPI extern void    Player_Mute(SLONG,...);\r
+MIKMODAPI extern void    Player_ToggleMute(SLONG,...);\r
+MIKMODAPI extern int     Player_GetChannelVoice(UBYTE);\r
+MIKMODAPI extern UWORD   Player_GetChannelPeriod(UBYTE);\r
+MIKMODAPI extern int     Player_QueryVoices(UWORD numvoices, VOICEINFO *vinfo); \r
+\r
+typedef void (MikMod_player)(void);\r
+typedef MikMod_player *MikMod_player_t;\r
+\r
+MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t);\r
+\r
+#define MUTE_EXCLUSIVE  32000\r
+#define MUTE_INCLUSIVE  32001\r
+\r
+/*\r
+ *     ========== Drivers\r
+ */\r
+\r
+enum {\r
+       MD_MUSIC = 0,\r
+       MD_SNDFX\r
+};\r
+\r
+enum {\r
+       MD_HARDWARE = 0,\r
+       MD_SOFTWARE\r
+};\r
+\r
+/* Mixing flags */\r
+\r
+/* These ones take effect only after MikMod_Init or MikMod_Reset */\r
+#define DMODE_16BITS     0x0001 /* enable 16 bit output */\r
+#define DMODE_STEREO     0x0002 /* enable stereo output */\r
+#define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */\r
+#define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */\r
+#define DMODE_HQMIXER    0x0010 /* Use high-quality (slower) software mixer */\r
+#define DMODE_FLOAT      0x0020 /* enable float output */\r
+/* These take effect immediately. */\r
+#define DMODE_SURROUND   0x0100 /* enable surround sound */\r
+#define DMODE_INTERP     0x0200 /* enable interpolation */\r
+#define DMODE_REVERSE    0x0400 /* reverse stereo */\r
+\r
+struct SAMPLOAD;\r
+typedef struct MDRIVER {\r
+struct MDRIVER* next;\r
+       CHAR*       Name;\r
+       CHAR*       Version;\r
+\r
+       UBYTE       HardVoiceLimit; /* Limit of hardware mixer voices */\r
+       UBYTE       SoftVoiceLimit; /* Limit of software mixer voices */\r
+\r
+       CHAR        *Alias;\r
+       CHAR        *CmdLineHelp;\r
+\r
+       void        (*CommandLine)      (CHAR*);\r
+       BOOL        (*IsPresent)        (void);\r
+       SWORD       (*SampleLoad)       (struct SAMPLOAD*,int);\r
+       void        (*SampleUnload)     (SWORD);\r
+       ULONG       (*FreeSampleSpace)  (int);\r
+       ULONG       (*RealSampleLength) (int,struct SAMPLE*);\r
+       BOOL        (*Init)             (void);\r
+       void        (*Exit)             (void);\r
+       BOOL        (*Reset)            (void);\r
+       BOOL        (*SetNumVoices)     (void);\r
+       BOOL        (*PlayStart)        (void);\r
+       void        (*PlayStop)         (void);\r
+       void        (*Update)           (void);\r
+       void            (*Pause)                        (void);\r
+       void        (*VoiceSetVolume)   (UBYTE,UWORD);\r
+       UWORD       (*VoiceGetVolume)   (UBYTE);\r
+       void        (*VoiceSetFrequency)(UBYTE,ULONG);\r
+       ULONG       (*VoiceGetFrequency)(UBYTE);\r
+       void        (*VoiceSetPanning)  (UBYTE,ULONG);\r
+       ULONG       (*VoiceGetPanning)  (UBYTE);\r
+       void        (*VoicePlay)        (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);\r
+       void        (*VoiceStop)        (UBYTE);\r
+       BOOL        (*VoiceStopped)     (UBYTE);\r
+       SLONG       (*VoiceGetPosition) (UBYTE);\r
+       ULONG       (*VoiceRealVolume)  (UBYTE);\r
+} MDRIVER;\r
+\r
+/* These variables can be changed at ANY time and results will be immediate */\r
+MIKMODAPI extern UBYTE md_volume;      /* global sound volume (0-128) */\r
+MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */\r
+MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */\r
+MIKMODAPI extern UBYTE md_reverb;      /* 0 = none;  15 = chaos */\r
+MIKMODAPI extern UBYTE md_pansep;      /* 0 = mono;  128 == 100% (full left/right) */\r
+\r
+/* The variables below can be changed at any time, but changes will not be\r
+   implemented until MikMod_Reset is called. A call to MikMod_Reset may result\r
+   in a skip or pop in audio (depending on the soundcard driver and the settings\r
+   changed). */\r
+MIKMODAPI extern UWORD md_device;      /* device */\r
+MIKMODAPI extern UWORD md_mixfreq;     /* mixing frequency */\r
+MIKMODAPI extern UWORD md_mode;        /* mode. See DMODE_? flags above */\r
+\r
+/* The following variable should not be changed! */\r
+MIKMODAPI extern MDRIVER* md_driver;   /* Current driver in use. */\r
+\r
+/* Known drivers list */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_nos;    /* no sound */\r
+MIKMODAPI extern struct MDRIVER drv_pipe;   /* piped output */\r
+MIKMODAPI extern struct MDRIVER drv_raw;    /* raw file disk writer [music.raw] */\r
+MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */\r
+MIKMODAPI extern struct MDRIVER drv_wav;    /* RIFF WAVE file disk writer [music.wav] */\r
+MIKMODAPI extern struct MDRIVER drv_aiff;   /* AIFF file disk writer [music.aiff] */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_ultra;  /* Linux Ultrasound driver */\r
+MIKMODAPI extern struct MDRIVER drv_sam9407;   /* Linux sam9407 driver */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_AF;     /* Dec Alpha AudioFile */\r
+MIKMODAPI extern struct MDRIVER drv_aix;    /* AIX audio device */\r
+MIKMODAPI extern struct MDRIVER drv_alsa;   /* Advanced Linux Sound Architecture (ALSA) */\r
+MIKMODAPI extern struct MDRIVER drv_esd;    /* Enlightened sound daemon (EsounD) */\r
+MIKMODAPI extern struct MDRIVER drv_hp;     /* HP-UX audio device */\r
+MIKMODAPI extern struct MDRIVER drv_oss;    /* OpenSound System (Linux,FreeBSD...) */\r
+MIKMODAPI extern struct MDRIVER drv_sgi;    /* SGI audio library */\r
+MIKMODAPI extern struct MDRIVER drv_sun;    /* Sun/NetBSD/OpenBSD audio device */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_dart;   /* OS/2 Direct Audio RealTime */\r
+MIKMODAPI extern struct MDRIVER drv_os2;    /* OS/2 MMPM/2 */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_ds;     /* Win32 DirectSound driver */\r
+MIKMODAPI extern struct MDRIVER drv_win;    /* Win32 multimedia API driver */\r
+\r
+MIKMODAPI extern struct MDRIVER drv_mac;    /* Macintosh Sound Manager driver */\r
+MIKMODAPI extern struct MDRIVER drv_osx;       /* MacOS X CoreAudio Driver */\r
+\r
+/*========== Virtual channel mixer interface (for user-supplied drivers only) */\r
+\r
+MIKMODAPI extern BOOL  VC_Init(void);\r
+MIKMODAPI extern void  VC_Exit(void);\r
+MIKMODAPI extern BOOL  VC_SetNumVoices(void);\r
+MIKMODAPI extern ULONG VC_SampleSpace(int);\r
+MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*);\r
+\r
+MIKMODAPI extern BOOL  VC_PlayStart(void);\r
+MIKMODAPI extern void  VC_PlayStop(void);\r
+\r
+MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int);\r
+MIKMODAPI extern void  VC_SampleUnload(SWORD);\r
+\r
+MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG);\r
+MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG);\r
+\r
+MIKMODAPI extern void  VC_VoiceSetVolume(UBYTE,UWORD);\r
+MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE);\r
+MIKMODAPI extern void  VC_VoiceSetFrequency(UBYTE,ULONG);\r
+MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE);\r
+MIKMODAPI extern void  VC_VoiceSetPanning(UBYTE,ULONG);\r
+MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE);\r
+MIKMODAPI extern void  VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);\r
+\r
+MIKMODAPI extern void  VC_VoiceStop(UBYTE);\r
+MIKMODAPI extern BOOL  VC_VoiceStopped(UBYTE);\r
+MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE);\r
+MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif\r
+\r
+/* ex:set ts=4: */\r