diff options
Diffstat (limited to 'private/mvdm/wow16/mmsystem/mmsysi.h')
-rw-r--r-- | private/mvdm/wow16/mmsystem/mmsysi.h | 557 |
1 files changed, 557 insertions, 0 deletions
diff --git a/private/mvdm/wow16/mmsystem/mmsysi.h b/private/mvdm/wow16/mmsystem/mmsysi.h new file mode 100644 index 000000000..86265d240 --- /dev/null +++ b/private/mvdm/wow16/mmsystem/mmsysi.h @@ -0,0 +1,557 @@ +/* + mmsysi.h + + private include file for mm kitchen sink + +*/ + +#include <logerror.h> + +#ifdef DEBUG + #define DEBUG_RETAIL +#endif + +#define WinFlags (WORD)(&__WinFlags) +extern short pascal __WinFlags; + +extern HINSTANCE ghInst; + +// Define the product version to be returned from +// mmsystemgetversion and any other messagebox or +// API that needs the public product version. + +#define MMSYSTEM_VERSION 0X0101 + +#define MM_SND_PLAY (WM_MM_RESERVED_FIRST+0x2B) + +/* ------------------------------------------------------------------------- +** Thunking stuff +** ------------------------------------------------------------------------- +*/ +DWORD +mciAppExit( + HTASK hTask + ); + +/**************************************************************************** + + external interupt time data (in INTDS) + + this global data is in the FIXED DATA SEGMENT. + +****************************************************************************/ + +extern WORD FAR PASCAL gwStackFrames; // in STACK.ASM +extern WORD FAR PASCAL gwStackSize; // in STACK.ASM +extern HGLOBAL FAR PASCAL gwStackSelector; // in STACK.ASM +extern WORD FAR PASCAL gwStackUse; // in STACK.ASM +extern HLOCAL FAR PASCAL hdrvDestroy; // in STACK.ASM +extern HDRVR FAR PASCAL hTimeDrv; // in TIMEA.ASM +extern FARPROC FAR PASCAL lpTimeMsgProc; // in TIMEA.ASM +extern WORD FAR PASCAL fDebugOutput; // in COMM.ASM + +/**************************************************************************** + +KERNEL APIs we use that are not in WINDOWS.H + +****************************************************************************/ + +//extern long WINAPI _hread(HFILE, void _huge*, long); +//extern long WINAPI _hwrite(HFILE, const void _huge*, long); + +extern UINT FAR PASCAL LocalCountFree(void); +extern UINT FAR PASCAL LocalHeapSize(void); + +/**************************************************************************** + + API to install/remove a MMSYS driver + +****************************************************************************/ + +#define MMDRVI_TYPE 0x000F // low 4 bits give driver type +#define MMDRVI_WAVEIN 0x0001 +#define MMDRVI_WAVEOUT 0x0002 +#define MMDRVI_MIDIIN 0x0003 +#define MMDRVI_MIDIOUT 0x0004 +#define MMDRVI_AUX 0x0005 + +#define MMDRVI_MAPPER 0x8000 // install this driver as the mapper +#define MMDRVI_HDRV 0x4000 // hDriver is a installable driver +#define MMDRVI_REMOVE 0x2000 // remove the driver + +// generic prototype for audio device driver entry-point functions +// midMessage(), modMessage(), widMessage(), wodMessage(), auxMessage() +typedef DWORD (CALLBACK *DRIVERMSGPROC)(UINT wDeviceID, UINT message, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2); + +BOOL WINAPI mmDrvInstall(HANDLE hDriver, DRIVERMSGPROC *drvMessage, UINT wFlags); +HDRVR NEAR PASCAL mmDrvOpen( LPSTR szAlias ); + +/**************************************************************************** +****************************************************************************/ + +// +// exclude some stuff if MMDDK.H is not included +// +#ifdef MMDDKINC // use this to test for MMDDK.H + + // + // note this must be the same as MIDIDRV/WAVEDRV/AUXDRV + // + typedef struct { + HDRVR hDriver; // handle to the module + DRIVERMSGPROC drvMessage; // pointer to entry point + BYTE bNumDevs; // number of devices supported + BYTE bUsage; // usage count (number of handle's open) + } MMDRV, *PMMDRV; + + #ifndef MMNOMIDI + + typedef MMDRV MIDIDRV, *PMIDIDRV; + + + #endif //ifndef MMNOMIDI + + #ifndef MMNOWAVE + + typedef MMDRV WAVEDRV, *PWAVEDRV; + + // + // Wave Mapper support + // + extern LPSOUNDDEVMSGPROC PASCAL wodMapper; + extern LPSOUNDDEVMSGPROC PASCAL widMapper; + + #endif //ifndef MMNOWAVE + + #ifndef MMNOAUX + + typedef MMDRV AUXDRV, *PAUXDRV; + + #endif //ifndef MMNOAUX + + #ifdef DEBUG_RETAIL + extern BYTE fIdReverse; + #endif //ifdef DEBUG_RETAIL + +#endif //ifdef MMDDKINC + +/**************************************************************************** + + prototypes + +****************************************************************************/ + +BOOL FAR PASCAL JoyInit(void); +BOOL NEAR PASCAL TimeInit(void); + +BOOL NEAR PASCAL MCIInit(void); +void NEAR PASCAL MCITerminate(void); + +BOOL FAR PASCAL StackInit(void); // in init.c + +#define IDS_TASKSTUB 2000 +#define STR_MCIUNKNOWN 2001 +//#define STR_WAVEINPUT 2004 +//#define STR_WAVEOUTPUT 2005 +//#define STR_MIDIINPUT 2006 +//#define STR_MIDIOUTPUT 2007 +#ifdef DEBUG +#define STR_MCISSERRTXT 2009 +#define STR_MCISCERRTXT 2010 +#endif + +#define MAXPATHLEN 157 // 144 chars + "\12345678.123" + +BOOL FAR PASCAL HugePageLock(LPVOID lpArea, DWORD dwLength); +void FAR PASCAL HugePageUnlock(LPVOID lpArea, DWORD dwLength); + +/**************************************************************************** + + MMSYSTEM global notify window + +****************************************************************************/ + +extern HWND hwndNotify; // in MMWND.C + +BOOL NEAR PASCAL WndInit(void); // in MMWND.C +void NEAR PASCAL WndTerminate(void); // in MMWND.C + +void FAR PASCAL MciNotify(WPARAM wParam, LPARAM lParam); // in MCI.C +void FAR PASCAL WaveOutNotify(WPARAM wParam, LPARAM lParam);// in PLAYWAV.C +BOOL FAR PASCAL sndPlaySoundI(LPCSTR lszSoundName, UINT wFlags);// in SOUND.C +BOOL FAR PASCAL sndMessage(LPSTR lszSoundName, UINT wFlags);// in SOUND.C + +/**************************************************************************** + + MCI allocation stuff + +****************************************************************************/ + +extern HGLOBAL FAR PASCAL HeapCreate(int cbSize); +extern void FAR PASCAL HeapDestroy(HGLOBAL hHeap); +extern LPVOID FAR PASCAL HeapAlloc(HGLOBAL hHeap, int cbSize); +extern LPVOID FAR PASCAL HeapReAlloc(LPVOID lp, int cbSize); +extern void FAR PASCAL HeapFree(LPVOID lp); + +extern HGLOBAL hMciHeap; // in MCISYS.C + +#define BMCIHEAP _based((_segment)hMciHeap) + +#define mciAlloc(cb) HeapAlloc(hMciHeap, cb) +#define mciReAlloc(lp, size) HeapReAlloc (lp, size) +#define mciFree(lp) HeapFree(lp) + +/**************************************************************************** + + strings + +****************************************************************************/ + +#define SZCODE char _based(_segname("_CODE")) + +/**************************************************************************** + + handle apis's + +****************************************************************************/ + +// +// all MMSYSTEM handles are tagged with the following structure. +// +// a MMSYSTEM handle is really a fixed local memory object. +// +// the functions NewHandle() and FreeHandle() create and release a MMSYSTEM +// handle. +// +// +//**************************************************************************; +// IF YOU CHANGE THIS STRUCTURE YOU MUST ALSO CHANGE THE ONE IN DEBUG.ASM +//**************************************************************************; +typedef struct tagHNDL { + struct tagHNDL *pNext; // link to next handle + WORD wType; // type of handle wave, midi, mmio, ... + HTASK hTask; // task that owns it +} HNDL, NEAR *PHNDL; +//**************************************************************************; + +#define HtoPH(h) ((PHNDL)(h)-1) +#define PHtoH(ph) ((ph) ? (HLOCAL)((PHNDL)(ph)+1) : 0) + +// +// all wave and midi handles will be linked into +// a global list, so we can enumerate them latter if needed. +// +// all handle structures start with a HNDL structure, that contain common fields +// +// pHandleList points to the first handle in the list +// +// the NewHandle() and FreeHandle() functions are used to add/remove +// a handle to/from the list +// +extern PHNDL pHandleList; + +extern HLOCAL FAR PASCAL NewHandle(WORD wType, WORD size); +extern HLOCAL FAR PASCAL FreeHandle(HLOCAL h); + +#define GetHandleType(h) (HtoPH(h)->wType) +#define GetHandleOwner(h) (HtoPH(h)->hTask) +#define GetHandleFirst() (PHtoH(pHandleList)) +#define GetHandleNext(h) (PHtoH(HtoPH(h)->pNext)) +#define SetHandleOwner(h,hOwn) (HtoPH(h)->hTask = (hOwn)) + +/**************************************************************************** + + debug support + +****************************************************************************/ + +#if 1 // was #ifdef DEBUG_RETAIL + +#define MM_GET_DEBUG DRV_USER +#define MM_GET_DEBUGOUT DRV_USER+1 +#define MM_SET_DEBUGOUT DRV_USER+2 +#define MM_GET_MCI_DEBUG DRV_USER+3 +#define MM_SET_MCI_DEBUG DRV_USER+4 +#define MM_GET_MM_DEBUG DRV_USER+5 +#define MM_SET_MM_DEBUG DRV_USER+6 + +#define MM_HINFO_NEXT DRV_USER+10 +#define MM_HINFO_TASK DRV_USER+11 +#define MM_HINFO_TYPE DRV_USER+12 +#define MM_HINFO_MCI DRV_USER+20 + +#define MM_DRV_RESTART DRV_USER+30 + +// +// these validation routines can be found in DEBUG.ASM +// +extern BOOL FAR PASCAL ValidateHandle(HANDLE h, WORD wType); +extern BOOL FAR PASCAL ValidateHeader(const void FAR* p, UINT wSize, WORD wType); +extern BOOL FAR PASCAL ValidateReadPointer(const void FAR* p, DWORD len); +extern BOOL FAR PASCAL ValidateWritePointer(const void FAR* p, DWORD len); +extern BOOL FAR PASCAL ValidateDriverCallback(DWORD dwCallback, UINT wFlags); +extern BOOL FAR PASCAL ValidateCallback(FARPROC lpfnCallback); +extern BOOL FAR PASCAL ValidateString(LPCSTR lsz, UINT max_len); + +#ifndef MMNOTIMER +extern BOOL FAR PASCAL ValidateTimerCallback(LPTIMECALLBACK lpfn); +#endif + +#define V_HANDLE(h, t, r) { if (!ValidateHandle(h, t)) return (r); } +#define V_HEADER(p, w, t, r) { if (!ValidateHeader((p), (w), (t))) return (r); } +#define V_RPOINTER(p, l, r) { if (!ValidateReadPointer((p), (l))) return (r); } +#define V_RPOINTER0(p, l, r) { if ((p) && !ValidateReadPointer((p), (l))) return (r); } +#define V_WPOINTER(p, l, r) { if (!ValidateWritePointer((p), (l))) return (r); } +#define V_WPOINTER0(p, l, r) { if ((p) && !ValidateWritePointer((p), (l))) return (r); } +#define V_DCALLBACK(d, w, r) { if (!ValidateDriverCallback((d), (w))) return (r); } +#define V_TCALLBACK(d, r) { if (!ValidateTimerCallback((d))) return (r); } +#define V_CALLBACK(f, r) { if (!ValidateCallback(f)) return (r); } +#define V_CALLBACK0(f, r) { if ((f) && !ValidateCallback(f)) return (r); } +#define V_STRING(s, l, r) { if (!ValidateString(s,l)) return (r); } +#define V_FLAGS(t, b, f, r) { if ((t) & ~(b)) {LogParamError(ERR_BAD_FLAGS, (FARPROC)(f), (LPVOID)(DWORD)(t)); return (r); }} + +#else //ifdef DEBUG_RETAIL + +#define V_HANDLE(h, t, r) { if (!(h)) return (r); } +#define V_HEADER(p, w, t, r) { if (!(p)) return (r); } +#define V_RPOINTER(p, l, r) { if (!(p)) return (r); } +#define V_RPOINTER0(p, l, r) 0 +#define V_WPOINTER(p, l, r) { if (!(p)) return (r); } +#define V_WPOINTER0(p, l, r) 0 +#define V_DCALLBACK(d, w, r) 0 +#define V_TCALLBACK(d, r) 0 +#define V_CALLBACK(f, r) { if (!(f)) return (r); } +#define V_CALLBACK0(f, r) 0 +#define V_STRING(s, l, r) { if (!(s)) return (r); } +#define V_FLAGS(t, b, f, r) 0 + +#endif //ifdef DEBUG_RETAIL + +//**************************************************************************; +// IF YOU CHANGE THESE TYPES YOU MUST ALSO CHANGE THE ONES IN DEBUG.ASM +//**************************************************************************; +#define TYPE_WAVEOUT 1 +#define TYPE_WAVEIN 2 +#define TYPE_MIDIOUT 3 +#define TYPE_MIDIIN 4 +#define TYPE_MMIO 5 +#define TYPE_IOPROC 6 +#define TYPE_MCI 7 +#define TYPE_DRVR 8 +#define TYPE_MIXER 9 +//**************************************************************************; + +/**************************************************************************** + + support for debug output + +****************************************************************************/ + +#ifdef DEBUG_RETAIL + + #define ROUT(sz) {static SZCODE ach[] = sz; DebugOutput(DBF_TRACE | DBF_MMSYSTEM, ach); } + #define ROUTS(sz) {DebugOutput(DBF_TRACE | DBF_MMSYSTEM, sz);} + #define DebugErr(flags, sz) {static SZCODE ach[] = "MMSYSTEM: "sz; DebugOutput((flags) | DBF_MMSYSTEM, ach); } + #define DebugErr1(flags, sz, a) {static SZCODE ach[] = "MMSYSTEM: "sz; DebugOutput((flags) | DBF_MMSYSTEM, ach,a); } + #define DebugErr2(flags, sz, a, b) {static SZCODE ach[] = "MMSYSTEM: "sz; DebugOutput((flags) | DBF_MMSYSTEM, ach,a,b); } + + #define RPRINTF1(sz,x) {static SZCODE ach[] = sz; DebugOutput(DBF_TRACE | DBF_MMSYSTEM, ach, x); } + #define RPRINTF2(sz,x,y) {static SZCODE ach[] = sz; DebugOutput(DBF_TRACE | DBF_MMSYSTEM, ach, x, y); } + +#else //ifdef DEBUG_RETAIL + + #define ROUT(sz) + #define ROUTS(sz) + #define DebugErr(flags, sz) + #define DebugErr1(flags, sz, a) + #define DebugErr2(flags, sz, a, b) + + #define RPRINTF1(sz,x) + #define RPRINTF2(sz,x,y) + +#endif //ifdef DEBUG_RETAIL + +#ifdef DEBUG + + extern void FAR cdecl dprintf(LPSTR, ...); // in COMM.ASM + extern void FAR PASCAL dout(LPSTR); // in COMM.ASM + + #define DOUT(sz) {static SZCODE buf[] = sz; dout(buf); } + #define DOUTS(sz) dout(sz); + #define DPRINTF(x) dprintf x + #define DPRINTF1(sz,a) {static SZCODE buf[] = sz; dprintf(buf, a); } + #define DPRINTF2(sz,a,b) {static SZCODE buf[] = sz; dprintf(buf, a, b); } + +#else //ifdef DEBUG + + #define DOUT(sz) 0 + #define DOUTS(sz) 0 + #define DPRINTF(x) 0 + #define DPRINTF1(sz,a) 0 + #define DPRINTF2(sz,a,b) 0 + +#endif //ifdef DEBUG + +#ifndef MMNOMCI +/**************************************************************************** + + Internal MCI stuff + +****************************************************************************/ + +#define MCI_VALID_DEVICE_ID(wID) ((wID) > 0 && (wID) < MCI_wNextDeviceID && MCI_lpDeviceList[wID]) + +#define MCI_MAX_PARAM_SLOTS 30 + +#define MCI_TOLOWER(c) ((char)((c) >= 'A' && (c) <= 'Z' ? (c) + 0x20 : (c))) + +typedef struct +{ + HGLOBAL hResource; + HINSTANCE hModule; // If not NULL then free module + // when device is free'd + UINT wType; + UINT FAR * lpwIndex; + LPSTR lpResource; +#ifdef DEBUG + WORD wLockCount; // Used for debugging +#endif //ifdef DEBUG +} command_table_type; + +#define MCINODE_ISCLOSING 0x00000001 // Lock out all cmd's during close +#define MCINODE_ISAUTOCLOSING 0x00010000 // Lock out all cmd's during close + // except internally generated close +#define MCINODE_ISAUTOOPENED 0x00020000 // Device was auto opened +#define MCINODE_16BIT_DRIVER 0x80000000 // Device is a 16-bit driver + +typedef struct { + LPSTR lpstrName; // The name used in subsequent calls to + // mciSendString to refer to the device + LPSTR lpstrInstallName;// The device name from system.ini + DWORD dwMCIOpenFlags; // Flags set on open may be: + DWORD lpDriverData; // DWORD of driver instance data + DWORD dwElementID; // The element ID set by MCI_OPEN_ELEMENT_ID + YIELDPROC fpYieldProc; // The current yield procedure if any + DWORD dwYieldData; // Data send to the current yield procedure + UINT wDeviceID; // The ID used in subsequent calls to + // mciSendCommand to refer to the device + UINT wDeviceType; // The type returned from the DRV_OPEN call + // MCI_OPEN_SHAREABLE + // MCI_OPEN_ELEMENT_ID + UINT wCommandTable; // The device type specific command table + UINT wCustomCommandTable; // The custom device command table if any + //(-1 if none) + HINSTANCE hDriver; // Module instance handle for the driver + HTASK hCreatorTask; // The task context the device is in + HTASK hOpeningTask; // The task context which send the open command + HDRVR hDrvDriver; // The installable driver handle + DWORD dwMCIFlags; // Internal MCI flags +} MCI_DEVICE_NODE; + +typedef MCI_DEVICE_NODE FAR *LPMCI_DEVICE_NODE; +typedef MCI_DEVICE_NODE BMCIHEAP *PMCI_DEVICE_NODE; + +typedef struct { + LPSTR lpstrParams; + LPSTR FAR * lpstrPointerList; + HTASK hCallingTask; + UINT wParsingError; +} MCI_INTERNAL_OPEN_INFO; +typedef MCI_INTERNAL_OPEN_INFO FAR *LPMCI_INTERNAL_OPEN_INFO; + +typedef struct { + LPSTR lpstrCommand; + LPSTR lpstrReturnString; + UINT wReturnLength; + HTASK hCallingTask; + LPSTR lpstrNewDirectory; // The current directory of the calling + // task + int nNewDrive; // The current drive of the calling task +} MCI_SYSTEM_MESSAGE; +typedef MCI_SYSTEM_MESSAGE FAR *LPMCI_SYSTEM_MESSAGE; + +#define MCI_INIT_DEVICE_LIST_SIZE 4 +#define MCI_DEVICE_LIST_GROW_SIZE 4 + +#define MAX_COMMAND_TABLES 20 + +extern BOOL MCI_bDeviceListInitialized; + +extern LPMCI_DEVICE_NODE FAR *MCI_lpDeviceList; +extern UINT MCI_wDeviceListSize; + +extern UINT MCI_wNextDeviceID; // the next device ID to use for a new device + +extern command_table_type command_tables[MAX_COMMAND_TABLES]; + +// In mciparse.c +extern void PASCAL NEAR mciToLower (LPSTR lpstrString); + +extern UINT NEAR PASCAL mciLoadTableType(UINT wType); + +extern LPSTR PASCAL NEAR FindCommandInTable (UINT wTable, LPCSTR lpstrCommand, + UINT FAR * lpwMessage); + +extern LPSTR PASCAL NEAR FindCommandItem (UINT wDeviceID, LPCSTR lpstrType, + LPCSTR lpstrCommand, UINT FAR * lpwMessage, + UINT FAR* lpwTable); + +extern UINT PASCAL NEAR mciEatToken (LPCSTR FAR *lplpstrInput, char cSeparater, + LPSTR FAR *lplpstrOutput, BOOL bMustFind); + +extern UINT PASCAL NEAR mciParseParams (LPCSTR lpstrParams, + LPCSTR lpCommandList, + LPDWORD lpdwFlags, + LPSTR lpOutputParams, + UINT wParamsSize, + LPSTR FAR * FAR * lpPointerList, + UINT FAR* lpwParsingError); + +extern void NEAR PASCAL mciParserFree (LPSTR FAR *lpstrPointerList); + +extern UINT NEAR PASCAL mciEatCommandEntry(LPCSTR lpEntry, LPDWORD lpValue, + UINT FAR* lpID); + +extern UINT NEAR PASCAL mciParseCommand (UINT wDeviceID, + LPSTR lpstrCommand, + LPCSTR lpstrDeviceName, + LPSTR FAR * lpCommandList, + UINT FAR* lpwTable); + +extern UINT PASCAL NEAR mciGetParamSize (DWORD dwValue, UINT wID); + +extern BOOL PASCAL NEAR mciUnlockCommandTable (UINT wCommandTable); + +// In mcisys.c +extern BOOL NEAR PASCAL mciInitDeviceList(void); + +extern UINT NEAR PASCAL mciOpenDevice(DWORD dwFlags, + LPMCI_OPEN_PARMS lpOpenParms, + LPMCI_INTERNAL_OPEN_INFO lpOpenInfo); + +extern UINT NEAR PASCAL mciCloseDevice(UINT wID, DWORD dwFlags, + LPMCI_GENERIC_PARMS lpGeneric, + BOOL bCloseDriver); + +extern UINT NEAR PASCAL mciExtractTypeFromID (LPMCI_OPEN_PARMS lpOpen); + +extern DWORD PASCAL NEAR mciSysinfo (UINT wDeviceID, DWORD dwFlags, + LPMCI_SYSINFO_PARMS lpSysinfo); + +extern UINT PASCAL NEAR mciLookUpType (LPCSTR lpstrTypeName); + +extern BOOL PASCAL NEAR mciExtractDeviceType (LPCSTR lpstrDeviceName, + LPSTR lpstrDeviceType, + UINT wBufLen); + +extern UINT NEAR PASCAL mciSetBreakKey (UINT wDeviceID, int nVirtKey, HWND hwndTrap); + +extern UINT NEAR PASCAL mciGetDeviceIDInternal (LPCSTR lpstrName, HTASK hTask); + +extern BOOL NEAR PASCAL Is16bitDrv(UINT wDeviceID); +extern BOOL NEAR PASCAL CouldBe16bitDrv(UINT wDeviceID); + +// In mci.c +extern DWORD FAR PASCAL mciRelaySystemString (LPMCI_SYSTEM_MESSAGE lpMessage); + +#endif //ifndef MMNOMCI |