/******************************Module*Header*******************************\ * Module Name: * * * * * Created: dd-mm-93 * Author: Stephen Estrop [StephenE] * * Copyright (c) 1993 Microsoft Corporation \**************************************************************************/ typedef struct _RECT16 { /* rc16 */ SHORT left; SHORT top; SHORT right; SHORT bottom; } RECT16; typedef RECT16 UNALIGNED *PRECT16; typedef struct _MCI_ANIM_OPEN_PARMS16 { DWORD dwCallback; WORD wDeviceID; WORD wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; // Keeps consistent, and is equivalent anyway WORD wReserved1; } MCI_ANIM_OPEN_PARMS16; typedef MCI_ANIM_OPEN_PARMS16 UNALIGNED *PMCI_ANIM_OPEN_PARMS16; typedef LPVOID LPMCI_ANIM_OPEN_PARMS16; typedef struct _MCI_ANIM_PLAY_PARMS16 { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; DWORD dwSpeed; } MCI_ANIM_PLAY_PARMS16; typedef MCI_ANIM_PLAY_PARMS16 UNALIGNED *PMCI_ANIM_PLAY_PARMS16; typedef LPVOID LPMCA_ANIM_PLAY_PARMS16; typedef struct _MCI_ANIM_RECT_PARMS16 { DWORD dwCallback; RECT16 rc; } MCI_ANIM_RECT_PARMS16; typedef MCI_ANIM_RECT_PARMS16 UNALIGNED *PMCI_ANIM_RECT_PARMS16; typedef LPVOID LPMCI_ANIM_RECT_PARMS16; typedef struct _MCI_ANIM_STEP_PARMS16 { DWORD dwCallback; DWORD dwFrames; } MCI_ANIM_STEP_PARMS16; typedef MCI_ANIM_STEP_PARMS16 UNALIGNED *PMCI_ANIM_STEP_PARMS16; typedef LPVOID LPMCI_ANIM_STEP_PARMS16; typedef struct _MCI_ANIM_UPDATE_PARMS16 { DWORD dwCalback; RECT16 rc; HDC16 hDC; } MCI_ANIM_UPDATE_PARMS16; typedef MCI_ANIM_UPDATE_PARMS16 UNALIGNED *PMCI_ANIM_UPDATE_PARMS16; typedef LPVOID LPMCI_ANIM_UPDATE_PARMS16; typedef struct _MCI_ANIM_WINDOW_PARMS16 { DWORD dwCallabck; HWND16 hWnd; WORD wReserved1; WORD nCmdShow; WORD wReserved2; LPCSTR lpstrText; } MCI_ANIM_WINDOW_PARMS16; typedef MCI_ANIM_WINDOW_PARMS16 UNALIGNED *PMCI_ANIM_WINDOW_PARMS16; typedef LPVOID LPMCI_ANIM_WINDOW_PARMS16; typedef struct _MCI_BREAK_PARMS16 { DWORD dwCallback; INT16 nVirtKey; WORD wReserved0; HWND16 hwndBreak; WORD wReserved1; } MCI_BREAK_PARMS16; typedef MCI_BREAK_PARMS16 UNALIGNED *PMCI_BREAK_PARMS16; typedef LPVOID LPMCI_BREAK_PARMS16; typedef struct _MCI_GENERIC_PARMS16 { DWORD dwCallback; } MCI_GENERIC_PARMS16; typedef MCI_GENERIC_PARMS16 UNALIGNED *PMCI_GENERIC_PARMS16; typedef LPVOID LPMCI_GENERIC_PARMS16; typedef struct _MCI_GETDEVCAPS_PARMS16 { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; } MCI_GETDEVCAPS_PARMS16; typedef MCI_GETDEVCAPS_PARMS16 UNALIGNED *PMCI_GETDEVCAPS_PARMS16; typedef LPVOID LPMCI_GETDEVCAPS_PARMS16; typedef struct _MCI_INFO_PARMS16 { DWORD dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; } MCI_INFO_PARMS16; typedef MCI_INFO_PARMS16 UNALIGNED *PMCI_INFO_PARMS16; typedef LPVOID LPMCI_INFO_PARMS16; typedef struct _MCI_LOAD_PARMS16 { DWORD dwCallback; LPCSTR lpfilename; } MCI_LOAD_PARMS16; typedef MCI_LOAD_PARMS16 UNALIGNED *PMCI_LOAD_PARMS16; typedef LPVOID LPMCI_LOAD_PARMS16; typedef struct _MCI_OPEN_PARMS16 { DWORD dwCallback; WORD wDeviceID; WORD wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; } MCI_OPEN_PARMS16; typedef MCI_OPEN_PARMS16 UNALIGNED *PMCI_OPEN_PARMS16; typedef LPVOID LPMCI_OPEN_PARMS16; typedef struct _MCI_OVLY_LOAD_PARMS16 { DWORD dwCallback; LPCSTR lpfilename; RECT16 rc; } MCI_OVLY_LOAD_PARMS16; typedef MCI_OVLY_LOAD_PARMS16 UNALIGNED *PMCI_OVLY_LOAD_PARMS16; typedef LPVOID LPMCI_OVLY_LOAD_PARMS16; typedef struct _MCI_OVLY_OPEN_PARMS16 { DWORD dwCallabck; WORD wDeviceID; WORD wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwStyle; HWND16 hWndParent; // The book is wrong WORD wReserved1; } MCI_OVLY_OPEN_PARMS16; typedef MCI_OVLY_OPEN_PARMS16 UNALIGNED *PMCI_OVLY_OPEN_PARMS16; typedef LPVOID LPMCI_OVLY_OPEN_PARMS16; typedef struct _MCI_OVLY_RECT_PARMS16 { DWORD dwCallback; RECT16 rc; } MCI_OVLY_RECT_PARMS16; typedef MCI_OVLY_RECT_PARMS16 UNALIGNED *PMCI_OVLY_RECT_PARMS16; typedef LPVOID LPMCI_OVLY_RECT_PARMS16; typedef struct _MCI_OVLY_SAVE_PARMS16 { DWORD dwCallback; LPCSTR lpfilename; RECT16 rc; } MCI_OVLY_SAVE_PARMS16; typedef MCI_OVLY_SAVE_PARMS16 UNALIGNED *PMCI_OVLY_SAVE_PARMS16; typedef LPVOID LPMCI_OVLY_SAVE_PARMS16; typedef struct _MCI_OVLY_WINDOW_PARMS16 { DWORD dwCallabck; HWND16 hWnd; WORD wReserved1; WORD nCmdShow; WORD wReserved2; LPCSTR lpstrText; } MCI_OVLY_WINDOW_PARMS16; typedef MCI_OVLY_WINDOW_PARMS16 UNALIGNED *PMCI_OVLY_WINDOW_PARMS16; typedef LPVOID LPMCI_OVLY_WINDOW_PARMS16; typedef struct _MCI_PLAY_PARMS16 { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_PLAY_PARMS16; typedef MCI_PLAY_PARMS16 UNALIGNED *PMCI_PLAY_PARMS16; typedef LPVOID LPMCI_PLAY_PARMS16; typedef struct _MCI_RECORD_PARMS16 { DWORD dwCallabck; DWORD dwFrom; DWORD dwTo; } MCI_RECORD_PARMS16; typedef MCI_RECORD_PARMS16 UNALIGNED *PMCI_RECORD_PARMS16; typedef LPVOID LPMCI_RECORD_PARMS16; typedef struct _MCI_SAVE_PARMS16 { DWORD dwCallback; LPCSTR lpfilename; // MMSYSTEM.H differs from the book } MCI_SAVE_PARMS16; typedef MCI_SAVE_PARMS16 UNALIGNED *PMCI_SAVE_PARMS16; typedef LPVOID LPMCI_SAVE_PARMS16; typedef struct _MCI_SEEK_PARMS16 { DWORD dwCallback; DWORD dwTo; } MCI_SEEK_PARMS16; typedef MCI_SEEK_PARMS16 UNALIGNED *PMCI_SEEK_PARMS16; typedef LPVOID LPMCI_SEEK_PARMS16; typedef struct _MCI_SEQ_SET_PARMS16 { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; DWORD dwTempo; DWORD dwPort; DWORD dwSlave; DWORD dwMaster; DWORD dwOffset; } MCI_SEQ_SET_PARMS16; typedef MCI_SEQ_SET_PARMS16 UNALIGNED *PMCI_SEQ_SET_PARMS16; typedef LPVOID LPMCI_SEQ_SET_PARMS16; typedef struct _MCI_SET_PARMS16 { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; } MCI_SET_PARMS16; typedef MCI_SET_PARMS16 UNALIGNED *PMCI_SET_PARMS16; typedef LPVOID LPMCI_SET_PARMS16; typedef struct _MCI_SOUND_PARMS16 { DWORD dwCallback; LPCSTR lpstrSoundName; } MCI_SOUND_PARMS16; typedef MCI_SOUND_PARMS16 UNALIGNED *PMCI_SOUND_PARMS16; typedef LPVOID LPMCI_SOUND_PARMS16; typedef struct _MCI_STATUS_PARMS16 { DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; } MCI_STATUS_PARMS16; typedef MCI_STATUS_PARMS16 UNALIGNED *PMCI_STATUS_PARMS16; typedef LPVOID LPMCI_STATUS_PARMS16; typedef struct _MCI_SYSINFO_PARMS16 { DWORD dwCallback; LPSTR lpstrReturn; DWORD dwRetSize; DWORD dwNumber; WORD wDeviceType; WORD wReserved0; } MCI_SYSINFO_PARMS16; typedef MCI_SYSINFO_PARMS16 UNALIGNED *PMCI_SYSINFO_PARMS16; typedef LPVOID LPMCI_SYSINFO_PARMS16; typedef struct _MCI_VD_ESCAPE_PARMS16 { DWORD dwCallback; LPCSTR lpstrCommand; } MCI_VD_ESCAPE_PARMS16; typedef MCI_VD_ESCAPE_PARMS16 UNALIGNED *PMCI_VD_ESCAPE_PARMS16; typedef LPVOID LPMCI_VD_ESCAPE_PARMS16; typedef struct _MCI_VD_PLAY_PARMS16 { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; DWORD dwSpeed; } MCI_VD_PLAY_PARMS16; typedef MCI_VD_PLAY_PARMS16 UNALIGNED *PMCI_VD_PLAY_PARMS16; typedef LPVOID LPMCI_VD_PLAY_PARMS16; typedef struct _MCI_VD_STEP_PARMS16 { DWORD dwCallback; DWORD dwFrames; } MCI_VD_STEP_PARMS16; typedef MCI_VD_STEP_PARMS16 UNALIGNED *PMCI_VD_STEP_PARMS16; typedef LPVOID LPMCI_VD_STEP_PARMS16; typedef struct _MCI_VD_DELETE_PARMS16 { DWORD dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_VD_DELETE_PARMS16; typedef MCI_VD_DELETE_PARMS16 UNALIGNED *PMCI_VD_DELETE_PARMS16; typedef LPVOID LPMCI_VD_DELETE_PARMS16; typedef struct _MCI_WAVE_OPEN_PARMS16 { DWORD dwCallback; WORD wDeviceID; WORD wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; DWORD dwBufferSeconds; } MCI_WAVE_OPEN_PARMS16; typedef MCI_WAVE_OPEN_PARMS16 UNALIGNED *PMCI_WAVE_OPEN_PARMS16; typedef LPVOID LPMCI_WAVE_OPEN_PARMS16; typedef struct _MCI_WAVE_SET_PARMS16 { DWORD dwCallback; DWORD dwTimeFormat; DWORD dwAudio; WORD wInput; WORD wReserved0; WORD wOutput; WORD wReserved1; WORD wFormatTag; WORD wReserved2; WORD nChannels; WORD wReserved3; DWORD nSamplesPerSecond; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wReserved4; WORD wBitsPerSample; WORD wReserved5; } MCI_WAVE_SET_PARMS16; typedef MCI_WAVE_SET_PARMS16 UNALIGNED *PMCI_WAVE_SET_PARMS16; typedef LPVOID LPMCI_WAVE_SET_PARMS16; typedef struct { DWORD dwCallback; DWORD dwItem; DWORD dwValue; DWORD dwOver; LPSTR lpstrAlgorithm; LPSTR lpstrQuality; DWORD dwSourceNumber; } MCI_DGV_SETVIDEO_PARMS16; typedef MCI_DGV_SETVIDEO_PARMS16 UNALIGNED *PMCI_DGV_SETVIDEO_PARMS16; #ifdef i386 #define GETWORD(pb) (*((PWORD)pb)++) #define GETDWORD(pb) (*((PDWORD)pb)++) #define FETCHWORD(s) ((WORD)(s)) #define FETCHDWORD(s) ((DWORD)(s)) #define STOREWORD(d,s) (WORD)d=(WORD)s #define STOREDWORD(d,s) (DWORD)d=(DWORD)s #else #define GETWORD(pb) (*((UNALIGNED WORD *)pb)++) #define GETDWORD(pb) (*((UNALIGNED DWORD *)pb)++) #define FETCHWORD(s) (*(UNALIGNED WORD *)&(s)) #define FETCHDWORD(s) (*(UNALIGNED DWORD *)&(s)) #define STOREWORD(d,s) *(UNALIGNED WORD *)&(d)=(WORD)s #define STOREDWORD(d,s) *(UNALIGNED DWORD *)&(d)=(DWORD)s #endif #define FETCHSHORT(s) ((SHORT)(FETCHWORD(s))) #define FETCHLONG(s) ((LONG)(FETCHDWORD(s))) #define STORESHORT(d,s) STOREWORD(d,s) #define STORELONG(d,s) STOREDWORD(d,s) #define CHAR32(b) ((CHAR)(b)) #define BYTE32(b) ((BYTE)(b)) #define INT32(i) ((INT)(INT16)(i)) #define UINT32(i) ((unsigned int)(i)) #define BOOL32(f) ((BOOL)(f)) #define WORD32(w) ((WORD)(w)) #define LONG32(l) FETCHLONG(l) #define DWORD32(dw) FETCHDWORD(dw) #define MMGETOPTPTR(vp,cb,p) {p=NULL; if (HIWORD(FETCHDWORD(vp))) p = GETVDMPTR(vp);} DWORD ThunkMciCommand16( MCIDEVICEID DeviceID, UINT OrigCommand, DWORD OrigFlags, PMCI_GENERIC_PARMS16 lp16OrigParms, PDWORD pNewParms, LPWSTR *lplpCommand, PUINT puTable ); VOID ThunkGenericParms( PDWORD pOrigFlags, PMCI_GENERIC_PARMS16 lp16GenParmsOrig, PMCI_GENERIC_PARMS lp32GenParmsOrig ); DWORD ThunkOpenCmd( PDWORD pOrigFlags, PMCI_OPEN_PARMS16 lp16OpenParms, PMCI_OPEN_PARMS p32OpenParms ); DWORD ThunkSetCmd( MCIDEVICEID DeviceID, PDWORD pOrigFlags, PMCI_SET_PARMS16 lpSetParms16, PMCI_SET_PARMS lpSetParms32 ); DWORD ThunkSetVideoCmd( PDWORD pOrigFlags, PMCI_DGV_SETVIDEO_PARMS16 lpSetParms16, LPMCI_DGV_SETVIDEO_PARMS lpSetParms32 ); DWORD ThunkSysInfoCmd( PMCI_SYSINFO_PARMS16 lpSysInfo16, PMCI_SYSINFO_PARMS lpSysInfo32 ); DWORD ThunkBreakCmd( PDWORD pOrigFlags, PMCI_BREAK_PARMS16 lpBreak16, PMCI_BREAK_PARMS lpBreak32 ); DWORD ThunkWindowCmd( MCIDEVICEID DeviceID, PDWORD pOrigFlags, PMCI_ANIM_WINDOW_PARMS16 lpAniParms16, PMCI_ANIM_WINDOW_PARMS lpAniParms32 ); int ThunkCommandViaTable( LPWSTR lpCommand, DWORD dwFlags, DWORD UNALIGNED *pdwOrig16, LPBYTE pNewParms ); int UnThunkMciCommand16( MCIDEVICEID devID, UINT OrigCommand, DWORD OrigFlags, PMCI_GENERIC_PARMS16 lp16GenericParms, PDWORD NewParms, LPWSTR lpCommand, UINT uTable ); VOID UnThunkOpenCmd( PMCI_OPEN_PARMS16 lpOpeParms16, PMCI_OPEN_PARMS lpOpenParms32 ); #if DBG VOID UnThunkSysInfoCmd( DWORD OrigFlags, PMCI_SYSINFO_PARMS NewParms ); #endif VOID UnThunkStatusCmd( MCIDEVICEID devID, DWORD OrigFlags, DWORD UNALIGNED *pdwOrig16, DWORD NewParms ); int UnThunkCommandViaTable( LPWSTR lpCommand, DWORD UNALIGNED *pdwOrig16, DWORD pNewParms, BOOL fReturnValNotThunked ); /* ------------------------------------------------------------------------- ** Compatability functions. ** ------------------------------------------------------------------------- */ BOOL APIENTRY mciExecute( LPCSTR lpstrCommand ); /* ----------------------------------------------------------------------- * * MCI Command Thunks Debugging Functions and Macros * * ----------------------------------------------------------------------- */ typedef struct { UINT uMsg; LPSTR lpstMsgName; } MCI_MESSAGE_NAMES;