/* Copyright (c) 1998-1999 Microsoft Corporation
   Thunked entry points to DMUSIC16.DLL
 */

enablemapdirect3216 = true;

typedef unsigned short USHORT;
typedef          short  SHORT;
typedef unsigned long  ULONG;
typedef          long   LONG;
typedef unsigned int   UINT;
typedef          int    INT;
typedef unsigned char  UCHAR;
typedef LONG           LPARAM;
typedef LONG           LRESULT;

typedef void   *LPVOID;
typedef UCHAR   BYTE;
typedef USHORT  WORD;
typedef ULONG   DWORD;
typedef UINT    HANDLE;
typedef WORD    HANDLE16;
typedef DWORD   HANDLE32;
typedef int     BOOL;
typedef char   *LPSTR;
typedef char   *LPCSTR;
typedef BYTE   *PBYTE;
typedef BYTE   *LPBYTE;
typedef DWORD  *LPDWORD;
typedef WORD   *LPWORD;

typedef DWORD   HRESULT;

typedef HANDLE  HWND;
typedef HANDLE  HINSTANCE;
typedef HANDLE  HTASK;

/**********************************************/
typedef UINT        VERSION;
typedef UINT        MMRESULT;
typedef DWORD       MCIERROR;
typedef UINT        MCIDEVICEID;
typedef UINT       *LPUINT;
typedef HANDLE      HMMIO;
typedef DWORD       FOURCC;
typedef char       *HPSTR;
/*typedef DWORD       DRVCALLBACK;*/
typedef void       *LPMMIOPROC;
typedef void       *LPDRVCALLBACK;
typedef void       *LPTIMECALLBACK;
typedef void       *YIELDPROC;

typedef struct tagMMTIME {
    UINT    wType;
    BYTE    hour;
    BYTE    min;
    BYTE    sec;
    BYTE    frame;
    BYTE    fps;
    BYTE    dummy;
} MMTIME;
typedef MMTIME       *LPMMTIME;

typedef struct tagDRVCONFIGINFO {
    DWORD   dwDCISize;
    LPCSTR  lpszDCISectionName;
    LPCSTR  lpszDCIAliasName;
} DRVCONFIGINFO;
typedef DRVCONFIGINFO    *LPDRVCONFIGINFO;

typedef HANDLE            HSOUNDEVENT;
typedef HSOUNDEVENT      *LPHSOUNDEVENT;

typedef	HANDLE		HMREGNOTIFY;

typedef	HANDLE	HWAVE;
typedef	HANDLE	HWAVEIN;
typedef	HANDLE	HWAVEOUT;
typedef HWAVEIN  *LPHWAVEIN;
typedef HWAVEOUT *LPHWAVEOUT;
typedef void *LPWAVECALLBACK;

typedef struct tagWAVEHDR {
    LPBYTE      lpData;
    DWORD       dwBufferLength;
    DWORD       dwBytesRecorded;
    DWORD       dwUser;
    DWORD       dwFlags;
    DWORD       dwLoops;
    LPBYTE      lpNext;
    DWORD       reserved;
} WAVEHDR;
typedef WAVEHDR  *LPWAVEHDR;

typedef struct tagWAVEOUTCAPS {
    WORD    wMid;
    WORD    wPid;
    VERSION vDriverVersion;
    char    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
    DWORD   dwSupport;
} WAVEOUTCAPS;
typedef WAVEOUTCAPS  *LPWAVEOUTCAPS;

typedef struct tagWAVEINCAPS {
    WORD    wMid;
    WORD    wPid;
    VERSION vDriverVersion;
    char    szPname[32];
    DWORD   dwFormats;
    WORD    wChannels;
} WAVEINCAPS;
typedef WAVEINCAPS  *LPWAVEINCAPS;

typedef struct tagWAVEFORMAT {
    WORD    wFormatTag;
    WORD    nChannels;
    DWORD   nSamplesPerSec;
    DWORD   nAvgBytesPerSec;
    WORD    nBlockAlign;
} WAVEFORMAT;
typedef WAVEFORMAT  *LPWAVEFORMAT;

typedef struct tagPCMWAVEFORMAT {
    WAVEFORMAT  wf;
    WORD        wBitsPerSample;
} PCMWAVEFORMAT;
typedef PCMWAVEFORMAT  *LPPCMWAVEFORMAT;

typedef struct tagWAVEFORMATEX {
    WORD        wFormatTag;
    WORD        nChannels;
    DWORD       nSamplesPerSec;
    DWORD       nAvgBytesPerSec;
    WORD        nBlockAlign;
    WORD        wBitsPerSample;
    WORD        cbSize;
} WAVEFORMATEX;
typedef WAVEFORMATEX  *LPWAVEFORMATEX;

typedef	HANDLE	HMIDI;
typedef	HANDLE	HMIDIIN;
typedef	HANDLE	HMIDIOUT;
typedef HMIDIIN *LPHMIDIIN;
typedef HMIDIOUT *LPHMIDIOUT;
typedef void *LPMIDICALLBACK;
typedef WORD PATCHARRAY[128];
typedef WORD *LPPATCHARRAY;
typedef WORD KEYARRAY[128];
typedef WORD *LPKEYARRAY;

typedef struct tagMIDIOUTCAPS {
    WORD    wMid;
    WORD    wPid;
    VERSION vDriverVersion;
    char    szPname[32];
    WORD    wTechnology;
    WORD    wVoices;
    WORD    wNotes;
    WORD    wChannelMask;
    DWORD   dwSupport;
} MIDIOUTCAPS;
typedef MIDIOUTCAPS  *LPMIDIOUTCAPS;

typedef struct tagMIDIINCAPS {
    WORD    wMid;
    WORD    wPid;
    VERSION vDriverVersion;
    char    szPname[32];
    DWORD   dwSupport;
} MIDIINCAPS;
typedef MIDIINCAPS  *LPMIDIINCAPS;

typedef struct tagMIDIHDR {
    LPBYTE      lpData;
    DWORD       dwBufferLength;
    DWORD       dwBytesRecorded;
    DWORD       dwUser;
    DWORD       dwFlags;
    LPBYTE      lpNext;
    DWORD       reserved;
} MIDIHDR;
typedef MIDIHDR  *LPMIDIHDR;

typedef struct tagAUXCAPS {
    WORD    wMid;
    WORD    wPid;
    VERSION vDriverVersion;
    char    szPname[32];
    WORD    wTechnology;
    DWORD   dwSupport;
} AUXCAPS;
typedef AUXCAPS  *LPAUXCAPS;

typedef	HANDLE	HMIXER;
typedef HMIXER *LPHMIXER;

typedef HANDLE     HMIXEROBJ;
typedef HMIXEROBJ *LPHMIXEROBJ;

typedef struct tagMIXERCAPS {
    WORD            wMid;
    WORD            wPid;
    VERSION         vDriverVersion;
    char            szPname[32];
    DWORD           fdwSupport;
    DWORD           cDestinations;
} MIXERCAPS;
typedef MIXERCAPS  *LPMIXERCAPS;

typedef struct tagMIXERLINE {
    DWORD       cbStruct;
    DWORD       dwDestination;
    DWORD       dwSource;
    DWORD       dwLineID;
    DWORD       fdwLine;
    DWORD       dwUser;
    DWORD       dwComponentType;
    DWORD       cChannels;
    DWORD       cConnections;
    DWORD       cControls;
    char        szShortName[16];
    char        szName[64];
    DWORD       dwType;
    DWORD       dwDeviceID;
    WORD        wMid;
    WORD        wPid;
    VERSION     vDriverVersion;
    char        szPname[32];
} MIXERLINE;
typedef MIXERLINE *LPMIXERLINE;

typedef struct tagMIXERCONTROL {
    DWORD           cbStruct;
    DWORD           dwControlID;
    DWORD           dwControlType;
    DWORD           fdwControl;
    DWORD           cMultipleItems;
    char            szShortName[16];
    char            szName[64];
    DWORD           dwReserved1[6];
    DWORD           dwReserved2[6];
} MIXERCONTROL;
typedef MIXERCONTROL *LPMIXERCONTROL;

typedef struct tagMIXERLINECONTROLS {
    DWORD           cbStruct;
    DWORD           dwLineID;
    DWORD           dwControlID;
    DWORD           cControls;
    DWORD           cbmxctrl;
    LPMIXERCONTROL  pamxctrl;
} MIXERLINECONTROLS;
typedef MIXERLINECONTROLS *LPMIXERLINECONTROLS;

typedef struct tagMIXERCONTROLDETAILS {
    DWORD           cbStruct;
    DWORD           dwControlID;
    DWORD           cChannels;
    DWORD           cMultipleItems;	/*HWND        hwndOwner;*/
    DWORD           cbDetails;
    LPVOID          paDetails;
} MIXERCONTROLDETAILS;
typedef MIXERCONTROLDETAILS *LPMIXERCONTROLDETAILS;

typedef struct tagMIXERCONTROLDETAILS_LISTTEXT {
    DWORD           dwParam1;
    DWORD           dwParam2;
    char            szName[64];
} MIXERCONTROLDETAILS_LISTTEXT;
typedef MIXERCONTROLDETAILS_LISTTEXT *LPMIXERCONTROLDETAILS_LISTTEXT;

typedef struct tagMIXERCONTROLDETAILS_BOOLEAN {
    LONG            fValue;
} MIXERCONTROLDETAILS_BOOLEAN;
typedef MIXERCONTROLDETAILS_BOOLEAN *LPMIXERCONTROLDETAILS_BOOLEAN;

typedef struct tagMIXERCONTROLDETAILS_SIGNED {
    LONG            lValue;
} MIXERCONTROLDETAILS_SIGNED;
typedef MIXERCONTROLDETAILS_SIGNED *LPMIXERCONTROLDETAILS_SIGNED;

typedef struct tagMIXERCONTROLDETAILS_UNSIGNED {
    DWORD           dwValue;
} MIXERCONTROLDETAILS_UNSIGNED;
typedef MIXERCONTROLDETAILS_UNSIGNED *LPMIXERCONTROLDETAILS_UNSIGNED;

typedef struct tagJOYCAPS {
    WORD wMid;
    WORD wPid;
    char szPname[32];
    UINT wXmin;
    UINT wXmax;
    UINT wYmin;
    UINT wYmax;
    UINT wZmin;
    UINT wZmax;
    UINT wNumButtons;
    UINT wPeriodMin;
    UINT wPeriodMax;
    UINT wRmin;
    UINT wRmax;
    UINT wUmin;
    UINT wUmax;
    UINT wVmin;
    UINT wVmax;
    UINT wCaps;
    UINT wMaxAxes;
    UINT wNumAxes;
    UINT wMaxButtons;
    char szRegKey[32];
    char szOEMVxD[260];
} JOYCAPS;
typedef JOYCAPS  *LPJOYCAPS;

typedef struct tagMIDIPACKITEM {
    DWORD   cbStruct;
    DWORD   dwDelta;
    DWORD   dwEvent;
    DWORD   cbLongEvent;
    LPBYTE  lpLongEvent;
} MIDIPACKITEM;
typedef MIDIPACKITEM *LPMIDIPACKITEM;

typedef struct tagMMCKINFO {
        FOURCC          ckid;
        DWORD           cksize;
        FOURCC          fccType;
        DWORD           dwDataOffset;
        DWORD           dwFlags;
} MMCKINFO;
typedef MMCKINFO       *LPMMCKINFO;

typedef struct tagMMIOINFO
{
        DWORD           dwFlags;
        FOURCC          fccIOProc;
        LPMMIOPROC      pIOProc;
        UINT            wErrorRet;
        HTASK           htask;
        LONG            cchBuffer;
        HPSTR           pchBuffer;
        HPSTR           pchNext;
        HPSTR           pchEndRead;
        HPSTR           pchEndWrite;
        LONG            lBufOffset;
        LONG            lDiskOffset;
        DWORD           adwInfo[3];
        DWORD           dwReserved1;
        DWORD           dwReserved2;
        HMMIO           hmmio;
} MMIOINFO;
typedef MMIOINFO       *LPMMIOINFO;

typedef struct tagTIMECAPS {
    UINT    wPeriodMin;
    UINT    wPeriodMax;
} TIMECAPS;
typedef TIMECAPS       *LPTIMECAPS;

void dmUntileBuffer(DWORD dwTilingInfo)
{
}

DWORD dmTileBuffer(DWORD dwFlatMemory, DWORD dwLength)
{
}

MMRESULT OpenLegacyDevice(UINT id, BOOL fIsOutput, BOOL fShare, HANDLE *ph)
{
}

MMRESULT CloseLegacyDevice(HANDLE h)
{
}

MMRESULT ActivateLegacyDevice(HANDLE h, BOOL fActivate)
{
}

MMRESULT MidiOutSubmitPlaybackBuffer(HANDLE hMidiOut, DWORD pbBuffer, DWORD cbBuffer, DWORD msStartTime, DWORD rtStartTimeLow, DWORD rtStartTimeHigh)
{
}

MMRESULT MidiInSetEventHandle(HANDLE hMidiIn, DWORD hEvent)
{
}

MMRESULT MidiInRead(HANDLE hMidiIn, DWORD pbBuffer, DWORD *cbBuffer, DWORD *msStartTime)
{
}

MMRESULT MidiInThru(HANDLE hMidiIn, DWORD dwFrom, DWORD dwTo, HANDLE hMidiOut)
{
}