|
|
/*++ BUILD Version: 0001
* * WOW v1.0 * * Copyright (c) 1991, Microsoft Corporation * * WMMEDIA.H * WOW32 16-bit MultiMedia API support * * History: * Created 21-Jan-1992 by Mike Tricker (MikeTri), after jeffpar * Changed 30-Apr-1992 by Mike Tricker (MikeTri) Added callback prototypes and structs * 30-Jul-1992 by Stephen Estrop (StephenE) Added MCCICommand Thunk stuff --*/
#define MMGETOPTPTR(vp,cb,p) {p=NULL; if (HIWORD(FETCHDWORD(vp))) GETVDMPTR(vp,cb,p);}
/*++
Enumeration handler data for the six callback types: --*/
typedef struct _TIMEDATA { /* timedata */ VPPROC vpfnTimeFunc; // 16 bit enumeration function
DWORD dwUserParam; // user param, if required
DWORD dwFlags; // flags, ieTIME_ONESHOT or TIME_PERIODIC
} TIMEDATA, *PTIMEDATA;
/*
* A couple of handy structures that probably ought to be elsewhere. */
typedef struct _INSTANCEDATA { DWORD dwCallback; //Callback function or window handle
DWORD dwCallbackInstance; //Instance data for callback function (only)
DWORD dwFlags; //Flags
} INSTANCEDATA, *PINSTANCEDATA;
typedef struct _WAVEHDR32 { PWAVEHDR16 pWavehdr32; //32 bit address to 16 bit WAVEHDR
PWAVEHDR16 pWavehdr16; //16 bit address to 16 bit WAVEHDR
WAVEHDR Wavehdr; //32 bit address to 32 bit WAVEHDR
} WAVEHDR32, *PWAVEHDR32;
typedef struct _MIDIHDR32 { PMIDIHDR16 pMidihdr32; //32 bit address to 16 bit MIDIHDR
PMIDIHDR16 pMidihdr16; //16 bit address to 16 bit MIDIHDR
MIDIHDR Midihdr; //32 bit address to 32 bit MIDIHDR
} MIDIHDR32, *PMIDIHDR32;
/*++
Function Prototypes: --*/
ULONG FASTCALL WMM32CallProc32( PVDMFRAME pFrame ); ULONG FASTCALL WMM32sndPlaySound(PVDMFRAME pFrame); ULONG FASTCALL WMM32mmsystemGetVersion(PVDMFRAME pFrame);
ULONG FASTCALL WMM32OutputDebugStr(PVDMFRAME pFrame); ULONG FASTCALL WMM32DriverCallback(PVDMFRAME pFrame);
ULONG FASTCALL WMM32joyGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32joyGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32joyGetPos(PVDMFRAME pFrame); ULONG FASTCALL WMM32joyGetThreshold(PVDMFRAME pFrame); ULONG FASTCALL WMM32joyReleaseCapture(PVDMFRAME pFrame); ULONG FASTCALL WMM32joySetCapture(PVDMFRAME pFrame); ULONG FASTCALL WMM32joySetThreshold(PVDMFRAME pFrame); ULONG FASTCALL WMM32joySetCalibration(PVDMFRAME pFrame);
ULONG FASTCALL WMM32midiOutGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutGetErrorText(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutOpen(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutClose(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutPrepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutUnprepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutShortMsg(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutLongMsg(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutReset(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutGetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutSetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutCachePatches(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutCacheDrumPatches(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutGetID(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiOutMessage(PVDMFRAME pFrame);
ULONG FASTCALL WMM32midiInGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInGetErrorText(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInOpen(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInClose(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInPrepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInUnprepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInAddBuffer(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInStart(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInStop(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInReset(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInGetID(PVDMFRAME pFrame); ULONG FASTCALL WMM32midiInMessage(PVDMFRAME pFrame);
ULONG FASTCALL WMM32auxGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32auxGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32auxGetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32auxSetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32auxOutMessage(PVDMFRAME pFrame);
ULONG FASTCALL WMM32waveOutGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetErrorText(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutOpen(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutClose(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutPrepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutUnprepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutWrite(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutPause(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutRestart(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutReset(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetPosition(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetPitch(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutSetPitch(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutSetVolume(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetPlaybackRate(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutSetPlaybackRate(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutBreakLoop(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutGetID(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveOutMessage(PVDMFRAME pFrame);
ULONG FASTCALL WMM32waveInGetNumDevs(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInGetErrorText(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInOpen(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInClose(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInPrepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInUnprepareHeader(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInAddBuffer(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInStart(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInStop(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInReset(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInGetPosition(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInGetID(PVDMFRAME pFrame); ULONG FASTCALL WMM32waveInMessage(PVDMFRAME pFrame);
ULONG FASTCALL WMM32timeGetSystemTime(PVDMFRAME pFrame); ULONG FASTCALL WMM32timeGetTime(PVDMFRAME pFrame);
VOID W32TimeFunc(UINT wID, UINT wMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
ULONG FASTCALL WMM32timeSetEvent(PVDMFRAME pFrame); ULONG FASTCALL WMM32timeKillEvent(PVDMFRAME pFrame); ULONG FASTCALL WMM32timeGetDevCaps(PVDMFRAME pFrame); ULONG FASTCALL WMM32timeBeginPeriod(PVDMFRAME pFrame); ULONG FASTCALL WMM32timeEndPeriod(PVDMFRAME pFrame);
ULONG FASTCALL WMM32mciSendCommand(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciSendString(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciGetDeviceID(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciGetErrorString(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciExecute(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciGetDeviceIDFromElementID(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciGetCreatorTask(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciSetYieldProc(PVDMFRAME pFrame); ULONG FASTCALL WMM32mciGetYieldProc(PVDMFRAME pFrame);
BOOL APIENTRY WOW32DriverCallback( DWORD dwCallback, DWORD dwFlags, WORD wID, WORD wMsg, DWORD dwUser, DWORD dw1, DWORD dw2 );
UINT WMM32mciYieldProc( MCIDEVICEID wDeviceID, DWORD dwYieldData );
VOID W32CommonDeviceOpen( HANDLE handle, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);
ULONG FASTCALL WMM32NotifyCallbackData(PVDMFRAME pFrame);
FARPROC Get_MultiMedia_ProcAddress( LPSTR lpstrProcName );
#define GET_MULTIMEDIA_API( name, proc, error ) \
if ( (proc) == NULL ) { \ (proc) = Get_MultiMedia_ProcAddress( (name) ); \ if ( (proc) == NULL ) { \ RETURN( (error) ); \ } \ }
#define MIN_WOW_TIME_PERIOD 0x10
/* -----------------------------------------------------------------------
* * MCI Command Thunks * * ----------------------------------------------------------------------- */
/**************************************************************************\
* * MCI Command Thunks function prototypes. * \**************************************************************************/ INT ThunkMciCommand16( MCIDEVICEID OrigDevice, UINT OrigCommand, DWORD OrigFlags, DWORD OrigParms, PDWORD pNewParms, LPWSTR *lplpCommand, PUINT puTable ); INT UnThunkMciCommand16( MCIDEVICEID devID, UINT OrigCommand, DWORD OrigFlags, DWORD OrigParms, DWORD NewParms, LPWSTR lpCommand, UINT uTable ); DWORD AllocMciParmBlock( PDWORD pOrigFlags, DWORD OrigParms ); UINT GetSizeOfParameter( LPWSTR lpCommand );
/*************************************************************************\
* Thunk Command Parms IN \*************************************************************************/ INT ThunkCommandViaTable( LPWSTR lpCommand, DWORD OrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkBreakCmd ( PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkSysInfoCmd( PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkOpenCmd ( PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkSetCmd ( MCIDEVICEID DeviceID, PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkWindowCmd ( MCIDEVICEID DeviceID, PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms ); DWORD ThunkSetVideoCmd( MCIDEVICEID DeviceID, PDWORD pOrigFlags, DWORD OrigParms, DWORD pNewParms );
/*************************************************************************\
* Thunk Command Parms OUT \*************************************************************************/ INT UnThunkCommandViaTable( LPWSTR lpCommand, DWORD OrigFlags, DWORD OrigParms, DWORD pNewParms, BOOL fReturnValNotThunked ); VOID UnThunkSysInfoCmd( DWORD OrigFlags, DWORD OrigParms, DWORD NewParms ); VOID UnThunkOpenCmd( DWORD OrigFlags, DWORD OrigParms, DWORD NewParms ); VOID UnThunkStatusCmd( MCIDEVICEID devID, DWORD OrigFlags, DWORD OrigParms, DWORD NewParms );
#if DBG
/* -----------------------------------------------------------------------
* * MCI Command Thunks Debugging Functions and Macros * * ----------------------------------------------------------------------- */ typedef struct { UINT uMsg; LPSTR lpstMsgName; } MCI_MESSAGE_NAMES;
extern int mmDebugLevel; extern int mmTraceWave; extern int mmTraceMidi; extern MCI_MESSAGE_NAMES mciMessageNames[32];
extern VOID wow32MciSetDebugLevel( VOID ); extern VOID wow32MciDebugOutput( LPSTR lpstrFormatStr, ... );
#define dprintf( _x_ ) wow32MciDebugOutput _x_
#define dprintf1( _x_ ) if (mmDebugLevel >= 1) {wow32MciDebugOutput _x_ ;} else
#define dprintf2( _x_ ) if (mmDebugLevel >= 2) {wow32MciDebugOutput _x_ ;} else
#define dprintf3( _x_ ) if (mmDebugLevel >= 3) {wow32MciDebugOutput _x_ ;} else
#define dprintf4( _x_ ) if (mmDebugLevel >= 4) {wow32MciDebugOutput _x_ ;} else
#define dprintf5( _x_ ) if (mmDebugLevel >= 5) {wow32MciDebugOutput _x_ ;} else
#define trace_wave( _x_ ) if (mmTraceWave) {wow32MciDebugOutput _x_ ;} else
#define trace_midi( _x_ ) if (mmTraceMidi) {wow32MciDebugOutput _x_ ;} else
#define trace_aux( _x_ ) if (mmTraceAux) {wow32MciDebugOutput _x_ ;} else
#define trace_joy( _x_ ) if (mmTraceJoy) {wow32MciDebugOutput _x_ ;} else
#else
#define dprintf( _x_ )
#define dprintf1( _x_ )
#define dprintf2( _x_ )
#define dprintf3( _x_ )
#define dprintf4( _x_ )
#define dprintf5( _x_ )
#define trace_wave( _x_ )
#define trace_midi( _x_ )
#define trace_aux( _x_ )
#define trace_joy( _x_ )
#endif
/* Stuff needed for MCI thunking. Defined in MEDIA\WINMM\MCI.H but here
* until a common place can be found */
extern BOOL WINAPI mciExecute (LPCSTR lpstrCommand);
extern LPWSTR FindCommandItem (MCIDEVICEID wDeviceID, LPCWSTR lpstrType, LPCWSTR lpstrCommand, PUINT lpwMessage, PUINT lpwTable);
extern UINT mciEatCommandEntry(LPCWSTR lpEntry, LPDWORD lpValue, PUINT lpID);
extern UINT mciGetParamSize (DWORD dwValue, UINT wID);
extern BOOL mciUnlockCommandTable (UINT wCommandTable);
#define MCI_MAX_PARAM_SLOTS 20
//
// This typedef is used to remove a compiler warning caused by implementing
// the dynamic linking of Multi-Media from WOW.
//
typedef LPWSTR (*FINDCMDITEM)(MCIDEVICEID wDeviceID, LPCWSTR lpstrType, LPCWSTR lpstrCommand, PUINT lpwMessage, PUINT lpwTable);
|