From 416dcc5ff1bd2b35375504a7a47de39912b71ba3 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 15 Sep 2008 01:32:28 +0000 Subject: [PATCH] remove dependency on directx sdk --- desmume/src/windows/ConfigKeys.cpp | 2 +- desmume/src/windows/ConfigKeys.h | 2 +- desmume/src/windows/DeSmuME_2005.vcproj | 8 +- desmume/src/windows/DeSmuME_2008.vcproj | 6 +- desmume/src/windows/directx/DxErr8.lib | Bin 0 -> 1210572 bytes desmume/src/windows/directx/ddraw.h | 5792 +++++++++++++++++++++++ desmume/src/windows/directx/ddraw.lib | Bin 0 -> 4540 bytes desmume/src/windows/directx/dinput.h | 4417 +++++++++++++++++ desmume/src/windows/directx/dinput8.lib | Bin 0 -> 173542 bytes desmume/src/windows/directx/dsound.h | 2358 +++++++++ desmume/src/windows/directx/dsound.lib | Bin 0 -> 4042 bytes desmume/src/windows/directx/dxerr8.h | 99 + desmume/src/windows/directx/dxguid.lib | Bin 0 -> 565850 bytes desmume/src/windows/main.cpp | 2 +- desmume/src/windows/snddx.cpp | 16 +- 15 files changed, 12684 insertions(+), 18 deletions(-) create mode 100644 desmume/src/windows/directx/DxErr8.lib create mode 100644 desmume/src/windows/directx/ddraw.h create mode 100644 desmume/src/windows/directx/ddraw.lib create mode 100644 desmume/src/windows/directx/dinput.h create mode 100644 desmume/src/windows/directx/dinput8.lib create mode 100644 desmume/src/windows/directx/dsound.h create mode 100644 desmume/src/windows/directx/dsound.lib create mode 100644 desmume/src/windows/directx/dxerr8.h create mode 100644 desmume/src/windows/directx/dxguid.lib diff --git a/desmume/src/windows/ConfigKeys.cpp b/desmume/src/windows/ConfigKeys.cpp index 645f47ef7..cfdf02b72 100644 --- a/desmume/src/windows/ConfigKeys.cpp +++ b/desmume/src/windows/ConfigKeys.cpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include "directx/dinput.h" #include "CWindow.h" #include "ConfigKeys.h" diff --git a/desmume/src/windows/ConfigKeys.h b/desmume/src/windows/ConfigKeys.h index 6b73af7a5..864b9083f 100644 --- a/desmume/src/windows/ConfigKeys.h +++ b/desmume/src/windows/ConfigKeys.h @@ -22,7 +22,7 @@ #define CONFIGKEYS_H #define DIRECTINPUT_VERSION 0x0800 -#include +#include "directx/dinput.h" extern const DWORD tabkey[48]; extern DWORD ds_up; diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj index a880647c8..5a8415f6d 100644 --- a/desmume/src/windows/DeSmuME_2005.vcproj +++ b/desmume/src/windows/DeSmuME_2005.vcproj @@ -54,7 +54,7 @@ EnableFiberSafeOptimizations="false" WholeProgramOptimization="false" AdditionalIncludeDirectories="..;.\zlib123;.\zziplib" - PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;VERSION=\"0.8.0b2 DEBUG\";WIN32;BETA_VERSION;SPU_INTERPOLATE;HAVE_LIBZ" + PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;VERSION=\"0.8.0b2 DEBUG\";WIN32;BETA_VERSION;SPU_INTERPOLATE;HAVE_LIBZ;GDB_STUB" ExceptionHandling="0" BufferSecurityCheck="false" EnableEnhancedInstructionSet="0" @@ -73,7 +73,7 @@ /> m3w7XZU+k`^$P|9K@qn}fESC@>d!hK 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 z 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

s^!;C@ej-B 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 +#include + +#ifndef DIRECTSOUND_VERSION +#define DIRECTSOUND_VERSION 0x0900 /* Version 9.0 */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#ifndef __DSOUND_INCLUDED__ +#define __DSOUND_INCLUDED__ + +/* Type definitions shared with Direct3D */ + +#ifndef DX_SHARED_DEFINES + +typedef float D3DVALUE, *LPD3DVALUE; + +#ifndef D3DCOLOR_DEFINED +typedef DWORD D3DCOLOR; +#define D3DCOLOR_DEFINED +#endif + +#ifndef LPD3DCOLOR_DEFINED +typedef DWORD *LPD3DCOLOR; +#define LPD3DCOLOR_DEFINED +#endif + +#ifndef D3DVECTOR_DEFINED +typedef struct _D3DVECTOR { + float x; + float y; + float z; +} D3DVECTOR; +#define D3DVECTOR_DEFINED +#endif + +#ifndef LPD3DVECTOR_DEFINED +typedef D3DVECTOR *LPD3DVECTOR; +#define LPD3DVECTOR_DEFINED +#endif + +#define DX_SHARED_DEFINES +#endif // DX_SHARED_DEFINES + +#define _FACDS 0x878 /* DirectSound's facility code */ +#define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) + +// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000} +DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); + +// DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B} +DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); + +// DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16} +DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); + +// DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1} +DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); + +// DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D} +DEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); + + +// DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03} +DEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); + +// DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03} +DEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); + +// DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03} +DEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); + +// DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03} +DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); + + +// +// Forward declarations for interfaces. +// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined +// + +#ifdef __cplusplus +struct IDirectSound; +struct IDirectSoundBuffer; +struct IDirectSound3DListener; +struct IDirectSound3DBuffer; +struct IDirectSoundCapture; +struct IDirectSoundCaptureBuffer; +struct IDirectSoundNotify; +#endif // __cplusplus + + +// +// DirectSound 8.0 interfaces. +// + +#if DIRECTSOUND_VERSION >= 0x0800 + +#ifdef __cplusplus +struct IDirectSound8; +struct IDirectSoundBuffer8; +struct IDirectSoundCaptureBuffer8; +struct IDirectSoundFXGargle; +struct IDirectSoundFXChorus; +struct IDirectSoundFXFlanger; +struct IDirectSoundFXEcho; +struct IDirectSoundFXDistortion; +struct IDirectSoundFXCompressor; +struct IDirectSoundFXParamEq; +struct IDirectSoundFXWavesReverb; +struct IDirectSoundFXI3DL2Reverb; +struct IDirectSoundCaptureFXAec; +struct IDirectSoundCaptureFXNoiseSuppress; +struct IDirectSoundFullDuplex; +#endif // __cplusplus + +// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the +// only DirectSound 7.0 interfaces with changed functionality in version 8.0. +// The other level 8 interfaces as equivalent to their level 7 counterparts: + +#define IDirectSoundCapture8 IDirectSoundCapture +#define IDirectSound3DListener8 IDirectSound3DListener +#define IDirectSound3DBuffer8 IDirectSound3DBuffer +#define IDirectSoundNotify8 IDirectSoundNotify +#define IDirectSoundFXGargle8 IDirectSoundFXGargle +#define IDirectSoundFXChorus8 IDirectSoundFXChorus +#define IDirectSoundFXFlanger8 IDirectSoundFXFlanger +#define IDirectSoundFXEcho8 IDirectSoundFXEcho +#define IDirectSoundFXDistortion8 IDirectSoundFXDistortion +#define IDirectSoundFXCompressor8 IDirectSoundFXCompressor +#define IDirectSoundFXParamEq8 IDirectSoundFXParamEq +#define IDirectSoundFXWavesReverb8 IDirectSoundFXWavesReverb +#define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb +#define IDirectSoundCaptureFXAec8 IDirectSoundCaptureFXAec +#define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress +#define IDirectSoundFullDuplex8 IDirectSoundFullDuplex + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +typedef struct IDirectSound *LPDIRECTSOUND; +typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; +typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER; +typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER; +typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE; +typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER; +typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY; + + +#if DIRECTSOUND_VERSION >= 0x0800 + +typedef struct IDirectSoundFXGargle *LPDIRECTSOUNDFXGARGLE; +typedef struct IDirectSoundFXChorus *LPDIRECTSOUNDFXCHORUS; +typedef struct IDirectSoundFXFlanger *LPDIRECTSOUNDFXFLANGER; +typedef struct IDirectSoundFXEcho *LPDIRECTSOUNDFXECHO; +typedef struct IDirectSoundFXDistortion *LPDIRECTSOUNDFXDISTORTION; +typedef struct IDirectSoundFXCompressor *LPDIRECTSOUNDFXCOMPRESSOR; +typedef struct IDirectSoundFXParamEq *LPDIRECTSOUNDFXPARAMEQ; +typedef struct IDirectSoundFXWavesReverb *LPDIRECTSOUNDFXWAVESREVERB; +typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB; +typedef struct IDirectSoundCaptureFXAec *LPDIRECTSOUNDCAPTUREFXAEC; +typedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS; +typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; + +typedef struct IDirectSound8 *LPDIRECTSOUND8; +typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8; +typedef struct IDirectSound3DListener8 *LPDIRECTSOUND3DLISTENER8; +typedef struct IDirectSound3DBuffer8 *LPDIRECTSOUND3DBUFFER8; +typedef struct IDirectSoundCapture8 *LPDIRECTSOUNDCAPTURE8; +typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8; +typedef struct IDirectSoundNotify8 *LPDIRECTSOUNDNOTIFY8; +typedef struct IDirectSoundFXGargle8 *LPDIRECTSOUNDFXGARGLE8; +typedef struct IDirectSoundFXChorus8 *LPDIRECTSOUNDFXCHORUS8; +typedef struct IDirectSoundFXFlanger8 *LPDIRECTSOUNDFXFLANGER8; +typedef struct IDirectSoundFXEcho8 *LPDIRECTSOUNDFXECHO8; +typedef struct IDirectSoundFXDistortion8 *LPDIRECTSOUNDFXDISTORTION8; +typedef struct IDirectSoundFXCompressor8 *LPDIRECTSOUNDFXCOMPRESSOR8; +typedef struct IDirectSoundFXParamEq8 *LPDIRECTSOUNDFXPARAMEQ8; +typedef struct IDirectSoundFXWavesReverb8 *LPDIRECTSOUNDFXWAVESREVERB8; +typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8; +typedef struct IDirectSoundCaptureFXAec8 *LPDIRECTSOUNDCAPTUREFXAEC8; +typedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8; +typedef struct IDirectSoundFullDuplex8 *LPDIRECTSOUNDFULLDUPLEX8; + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// IID definitions for the unchanged DirectSound 8.0 interfaces +// + +#if DIRECTSOUND_VERSION >= 0x0800 + +#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture +#define IID_IDirectSound3DListener8 IID_IDirectSound3DListener +#define IID_IDirectSound3DBuffer8 IID_IDirectSound3DBuffer +#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify +#define IID_IDirectSoundFXGargle8 IID_IDirectSoundFXGargle +#define IID_IDirectSoundFXChorus8 IID_IDirectSoundFXChorus +#define IID_IDirectSoundFXFlanger8 IID_IDirectSoundFXFlanger +#define IID_IDirectSoundFXEcho8 IID_IDirectSoundFXEcho +#define IID_IDirectSoundFXDistortion8 IID_IDirectSoundFXDistortion +#define IID_IDirectSoundFXCompressor8 IID_IDirectSoundFXCompressor +#define IID_IDirectSoundFXParamEq8 IID_IDirectSoundFXParamEq +#define IID_IDirectSoundFXWavesReverb8 IID_IDirectSoundFXWavesReverb +#define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb +#define IID_IDirectSoundCaptureFXAec8 IID_IDirectSoundCaptureFXAec +#define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress +#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// Compatibility typedefs +// + +#ifndef _LPCWAVEFORMATEX_DEFINED +#define _LPCWAVEFORMATEX_DEFINED +typedef const WAVEFORMATEX *LPCWAVEFORMATEX; +#endif // _LPCWAVEFORMATEX_DEFINED + +#ifndef __LPCGUID_DEFINED__ +#define __LPCGUID_DEFINED__ +typedef const GUID *LPCGUID; +#endif // __LPCGUID_DEFINED__ + +typedef LPDIRECTSOUND *LPLPDIRECTSOUND; +typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER; +typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER; +typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER; +typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE; +typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER; +typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY; + +#if DIRECTSOUND_VERSION >= 0x0800 +typedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8; +typedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8; +typedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8; +typedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8; +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// Structures +// + +typedef struct _DSCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwMinSecondarySampleRate; + DWORD dwMaxSecondarySampleRate; + DWORD dwPrimaryBuffers; + DWORD dwMaxHwMixingAllBuffers; + DWORD dwMaxHwMixingStaticBuffers; + DWORD dwMaxHwMixingStreamingBuffers; + DWORD dwFreeHwMixingAllBuffers; + DWORD dwFreeHwMixingStaticBuffers; + DWORD dwFreeHwMixingStreamingBuffers; + DWORD dwMaxHw3DAllBuffers; + DWORD dwMaxHw3DStaticBuffers; + DWORD dwMaxHw3DStreamingBuffers; + DWORD dwFreeHw3DAllBuffers; + DWORD dwFreeHw3DStaticBuffers; + DWORD dwFreeHw3DStreamingBuffers; + DWORD dwTotalHwMemBytes; + DWORD dwFreeHwMemBytes; + DWORD dwMaxContigFreeHwMemBytes; + DWORD dwUnlockTransferRateHwBuffers; + DWORD dwPlayCpuOverheadSwBuffers; + DWORD dwReserved1; + DWORD dwReserved2; +} DSCAPS, *LPDSCAPS; + +typedef const DSCAPS *LPCDSCAPS; + +typedef struct _DSBCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwUnlockTransferRate; + DWORD dwPlayCpuOverhead; +} DSBCAPS, *LPDSBCAPS; + +typedef const DSBCAPS *LPCDSBCAPS; + +#if DIRECTSOUND_VERSION >= 0x0800 + + typedef struct _DSEFFECTDESC + { + DWORD dwSize; + DWORD dwFlags; + GUID guidDSFXClass; + DWORD_PTR dwReserved1; + DWORD_PTR dwReserved2; + } DSEFFECTDESC, *LPDSEFFECTDESC; + typedef const DSEFFECTDESC *LPCDSEFFECTDESC; + + #define DSFX_LOCHARDWARE 0x00000001 + #define DSFX_LOCSOFTWARE 0x00000002 + + enum + { + DSFXR_PRESENT, // 0 + DSFXR_LOCHARDWARE, // 1 + DSFXR_LOCSOFTWARE, // 2 + DSFXR_UNALLOCATED, // 3 + DSFXR_FAILED, // 4 + DSFXR_UNKNOWN, // 5 + DSFXR_SENDLOOP // 6 + }; + + typedef struct _DSCEFFECTDESC + { + DWORD dwSize; + DWORD dwFlags; + GUID guidDSCFXClass; + GUID guidDSCFXInstance; + DWORD dwReserved1; + DWORD dwReserved2; + } DSCEFFECTDESC, *LPDSCEFFECTDESC; + typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; + + #define DSCFX_LOCHARDWARE 0x00000001 + #define DSCFX_LOCSOFTWARE 0x00000002 + + #define DSCFXR_LOCHARDWARE 0x00000010 + #define DSCFXR_LOCSOFTWARE 0x00000020 + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +typedef struct _DSBUFFERDESC +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; +#if DIRECTSOUND_VERSION >= 0x0700 + GUID guid3DAlgorithm; +#endif +} DSBUFFERDESC, *LPDSBUFFERDESC; + +typedef const DSBUFFERDESC *LPCDSBUFFERDESC; + +// Older version of this structure: + +typedef struct _DSBUFFERDESC1 +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; +} DSBUFFERDESC1, *LPDSBUFFERDESC1; + +typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; + +typedef struct _DS3DBUFFER +{ + DWORD dwSize; + D3DVECTOR vPosition; + D3DVECTOR vVelocity; + DWORD dwInsideConeAngle; + DWORD dwOutsideConeAngle; + D3DVECTOR vConeOrientation; + LONG lConeOutsideVolume; + D3DVALUE flMinDistance; + D3DVALUE flMaxDistance; + DWORD dwMode; +} DS3DBUFFER, *LPDS3DBUFFER; + +typedef const DS3DBUFFER *LPCDS3DBUFFER; + +typedef struct _DS3DLISTENER +{ + DWORD dwSize; + D3DVECTOR vPosition; + D3DVECTOR vVelocity; + D3DVECTOR vOrientFront; + D3DVECTOR vOrientTop; + D3DVALUE flDistanceFactor; + D3DVALUE flRolloffFactor; + D3DVALUE flDopplerFactor; +} DS3DLISTENER, *LPDS3DLISTENER; + +typedef const DS3DLISTENER *LPCDS3DLISTENER; + +typedef struct _DSCCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwFormats; + DWORD dwChannels; +} DSCCAPS, *LPDSCCAPS; + +typedef const DSCCAPS *LPCDSCCAPS; + +typedef struct _DSCBUFFERDESC1 +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; +} DSCBUFFERDESC1, *LPDSCBUFFERDESC1; + +typedef struct _DSCBUFFERDESC +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; +#if DIRECTSOUND_VERSION >= 0x0800 + DWORD dwFXCount; + LPDSCEFFECTDESC lpDSCFXDesc; +#endif +} DSCBUFFERDESC, *LPDSCBUFFERDESC; + +typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; + +typedef struct _DSCBCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; +} DSCBCAPS, *LPDSCBCAPS; + +typedef const DSCBCAPS *LPCDSCBCAPS; + +typedef struct _DSBPOSITIONNOTIFY +{ + DWORD dwOffset; + HANDLE hEventNotify; +} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY; + +typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; + +// +// DirectSound API +// + +typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID); +typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID); + +extern HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); +extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); + +extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext); +extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext); + +#if DIRECTSOUND_VERSION >= 0x0800 +extern HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice, + LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd, + DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX* ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, + LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter); +#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate + +extern HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest); +#endif // DIRECTSOUND_VERSION >= 0x0800 + +#ifdef UNICODE +#define LPDSENUMCALLBACK LPDSENUMCALLBACKW +#define DirectSoundEnumerate DirectSoundEnumerateW +#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW +#else // UNICODE +#define LPDSENUMCALLBACK LPDSENUMCALLBACKA +#define DirectSoundEnumerate DirectSoundEnumerateA +#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA +#endif // UNICODE + +// +// IUnknown +// + +#if !defined(__cplusplus) || defined(CINTERFACE) +#ifndef IUnknown_QueryInterface +#define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#endif // IUnknown_QueryInterface +#ifndef IUnknown_AddRef +#define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p) +#endif // IUnknown_AddRef +#ifndef IUnknown_Release +#define IUnknown_Release(p) (p)->lpVtbl->Release(p) +#endif // IUnknown_Release +#else // !defined(__cplusplus) || defined(CINTERFACE) +#ifndef IUnknown_QueryInterface +#define IUnknown_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#endif // IUnknown_QueryInterface +#ifndef IUnknown_AddRef +#define IUnknown_AddRef(p) (p)->AddRef() +#endif // IUnknown_AddRef +#ifndef IUnknown_Release +#define IUnknown_Release(p) (p)->Release() +#endif // IUnknown_Release +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#ifndef __IReferenceClock_INTERFACE_DEFINED__ +#define __IReferenceClock_INTERFACE_DEFINED__ + +typedef LONGLONG REFERENCE_TIME; +typedef REFERENCE_TIME *LPREFERENCE_TIME; + +DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); + +#undef INTERFACE +#define INTERFACE IReferenceClock + +DECLARE_INTERFACE_(IReferenceClock, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IReferenceClock methods + STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE; + STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, + HANDLE hEvent, LPDWORD pdwAdviseCookie) PURE; + STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, + HANDLE hSemaphore, LPDWORD pdwAdviseCookie) PURE; + STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE; +}; + +#endif // __IReferenceClock_INTERFACE_DEFINED__ + +#ifndef IReferenceClock_QueryInterface + +#define IReferenceClock_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IReferenceClock_AddRef(p) IUnknown_AddRef(p) +#define IReferenceClock_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a) +#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d) +#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d) +#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IReferenceClock_GetTime(p,a) (p)->GetTime(a) +#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->AdviseTime(a,b,c,d) +#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->AdvisePeriodic(a,b,c,d) +#define IReferenceClock_Unadvise(p,a) (p)->Unadvise(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // IReferenceClock_QueryInterface + +// +// IDirectSound +// + +DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); + +#undef INTERFACE +#define INTERFACE IDirectSound + +DECLARE_INTERFACE_(IDirectSound, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSound methods + STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; + STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; + STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; + STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; + STDMETHOD(Compact) (THIS) PURE; + STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; + STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; + STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; +}; + +#define IDirectSound_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSound_AddRef(p) IUnknown_AddRef(p) +#define IDirectSound_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) +#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) +#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) +#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) +#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) +#define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) +#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) +#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) +#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) +#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectSound_Compact(p) (p)->Compact() +#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) +#define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b) +#define IDirectSound_Initialize(p,a) (p)->Initialize(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#if DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSound8 +// + +DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66); + +#undef INTERFACE +#define INTERFACE IDirectSound8 + +DECLARE_INTERFACE_(IDirectSound8, IDirectSound) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSound methods + STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE; + STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE; + STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; + STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; + STDMETHOD(Compact) (THIS) PURE; + STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE; + STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; + STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; + + // IDirectSound8 methods + STDMETHOD(VerifyCertification) (THIS_ LPDWORD pdwCertified) PURE; +}; + +#define IDirectSound8_QueryInterface(p,a,b) IDirectSound_QueryInterface(p,a,b) +#define IDirectSound8_AddRef(p) IDirectSound_AddRef(p) +#define IDirectSound8_Release(p) IDirectSound_Release(p) +#define IDirectSound8_CreateSoundBuffer(p,a,b,c) IDirectSound_CreateSoundBuffer(p,a,b,c) +#define IDirectSound8_GetCaps(p,a) IDirectSound_GetCaps(p,a) +#define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b) +#define IDirectSound8_SetCooperativeLevel(p,a,b) IDirectSound_SetCooperativeLevel(p,a,b) +#define IDirectSound8_Compact(p) IDirectSound_Compact(p) +#define IDirectSound8_GetSpeakerConfig(p,a) IDirectSound_GetSpeakerConfig(p,a) +#define IDirectSound8_SetSpeakerConfig(p,a) IDirectSound_SetSpeakerConfig(p,a) +#define IDirectSound8_Initialize(p,a) IDirectSound_Initialize(p,a) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSoundBuffer +// + +DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); + +#undef INTERFACE +#define INTERFACE IDirectSoundBuffer + +DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundBuffer methods + STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; + STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; + STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; + STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; + STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; + STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; + STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; + STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; + STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, + LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; + STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; + STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; + STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; + STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; + STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; + STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; + STDMETHOD(Stop) (THIS) PURE; + STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; + STDMETHOD(Restore) (THIS) PURE; +}; + +#define IDirectSoundBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundBuffer_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundBuffer_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) +#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) +#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) +#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) +#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) +#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) +#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) +#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) +#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) +#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) +#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) +#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) +#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) +#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) +#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) +#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) +#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) +#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) +#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) +#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) +#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) +#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) +#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) +#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) +#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) +#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) +#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) +#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) +#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) +#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) +#define IDirectSoundBuffer_Stop(p) (p)->Stop() +#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) +#define IDirectSoundBuffer_Restore(p) (p)->Restore() +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#if DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSoundBuffer8 +// + +DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e); + +#undef INTERFACE +#define INTERFACE IDirectSoundBuffer8 + +DECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundBuffer methods + STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE; + STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE; + STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; + STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE; + STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE; + STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE; + STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; + STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE; + STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, + LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; + STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; + STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; + STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE; + STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; + STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; + STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; + STDMETHOD(Stop) (THIS) PURE; + STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; + STDMETHOD(Restore) (THIS) PURE; + + // IDirectSoundBuffer8 methods + STDMETHOD(SetFX) (THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE; + STDMETHOD(AcquireResources) (THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE; + STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; +}; + +// Special GUID meaning "select all objects" for use in GetObjectInPath() +DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5); + +#define IDirectSoundBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundBuffer8_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundBuffer8_Release(p) IUnknown_Release(p) + +#define IDirectSoundBuffer8_GetCaps(p,a) IDirectSoundBuffer_GetCaps(p,a) +#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) IDirectSoundBuffer_GetCurrentPosition(p,a,b) +#define IDirectSoundBuffer8_GetFormat(p,a,b,c) IDirectSoundBuffer_GetFormat(p,a,b,c) +#define IDirectSoundBuffer8_GetVolume(p,a) IDirectSoundBuffer_GetVolume(p,a) +#define IDirectSoundBuffer8_GetPan(p,a) IDirectSoundBuffer_GetPan(p,a) +#define IDirectSoundBuffer8_GetFrequency(p,a) IDirectSoundBuffer_GetFrequency(p,a) +#define IDirectSoundBuffer8_GetStatus(p,a) IDirectSoundBuffer_GetStatus(p,a) +#define IDirectSoundBuffer8_Initialize(p,a,b) IDirectSoundBuffer_Initialize(p,a,b) +#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) +#define IDirectSoundBuffer8_Play(p,a,b,c) IDirectSoundBuffer_Play(p,a,b,c) +#define IDirectSoundBuffer8_SetCurrentPosition(p,a) IDirectSoundBuffer_SetCurrentPosition(p,a) +#define IDirectSoundBuffer8_SetFormat(p,a) IDirectSoundBuffer_SetFormat(p,a) +#define IDirectSoundBuffer8_SetVolume(p,a) IDirectSoundBuffer_SetVolume(p,a) +#define IDirectSoundBuffer8_SetPan(p,a) IDirectSoundBuffer_SetPan(p,a) +#define IDirectSoundBuffer8_SetFrequency(p,a) IDirectSoundBuffer_SetFrequency(p,a) +#define IDirectSoundBuffer8_Stop(p) IDirectSoundBuffer_Stop(p) +#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) IDirectSoundBuffer_Unlock(p,a,b,c,d) +#define IDirectSoundBuffer8_Restore(p) IDirectSoundBuffer_Restore(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) +#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) +#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) +#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) +#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSound3DListener +// + +DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); + +#undef INTERFACE +#define INTERFACE IDirectSound3DListener + +DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSound3DListener methods + STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER pListener) PURE; + STDMETHOD(GetDistanceFactor) (THIS_ D3DVALUE* pflDistanceFactor) PURE; + STDMETHOD(GetDopplerFactor) (THIS_ D3DVALUE* pflDopplerFactor) PURE; + STDMETHOD(GetOrientation) (THIS_ D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop) PURE; + STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; + STDMETHOD(GetRolloffFactor) (THIS_ D3DVALUE* pflRolloffFactor) PURE; + STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; + STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER pcListener, DWORD dwApply) PURE; + STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; + STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; + STDMETHOD(SetOrientation) (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, + D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; + STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; + STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; + STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; + STDMETHOD(CommitDeferredSettings) (THIS) PURE; +}; + +#define IDirectSound3DListener_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSound3DListener_AddRef(p) IUnknown_AddRef(p) +#define IDirectSound3DListener_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) +#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) +#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) +#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) +#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) +#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) +#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) +#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) +#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) +#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) +#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) +#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) +#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) +#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) +#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) +#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) +#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) +#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) +#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) +#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) +#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) +#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) +#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) +#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) +#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) +#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) +#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) +#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSound3DBuffer +// + +DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); + +#undef INTERFACE +#define INTERFACE IDirectSound3DBuffer + +DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSound3DBuffer methods + STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER pDs3dBuffer) PURE; + STDMETHOD(GetConeAngles) (THIS_ LPDWORD pdwInsideConeAngle, LPDWORD pdwOutsideConeAngle) PURE; + STDMETHOD(GetConeOrientation) (THIS_ D3DVECTOR* pvOrientation) PURE; + STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG plConeOutsideVolume) PURE; + STDMETHOD(GetMaxDistance) (THIS_ D3DVALUE* pflMaxDistance) PURE; + STDMETHOD(GetMinDistance) (THIS_ D3DVALUE* pflMinDistance) PURE; + STDMETHOD(GetMode) (THIS_ LPDWORD pdwMode) PURE; + STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE; + STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE; + STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE; + STDMETHOD(SetConeAngles) (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; + STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; + STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; + STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; + STDMETHOD(SetMinDistance) (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; + STDMETHOD(SetMode) (THIS_ DWORD dwMode, DWORD dwApply) PURE; + STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; + STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; +}; + +#define IDirectSound3DBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSound3DBuffer_AddRef(p) IUnknown_AddRef(p) +#define IDirectSound3DBuffer_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) +#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) +#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) +#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) +#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) +#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) +#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) +#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) +#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) +#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) +#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) +#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) +#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) +#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) +#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) +#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) +#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) +#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) +#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) +#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) +#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) +#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) +#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) +#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) +#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) +#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) +#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) +#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) +#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) +#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) +#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) +#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) +#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) +#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundCapture +// + +DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); + +#undef INTERFACE +#define INTERFACE IDirectSoundCapture + +DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundCapture methods + STDMETHOD(CreateCaptureBuffer) (THIS_ LPCDSCBUFFERDESC pcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, LPUNKNOWN pUnkOuter) PURE; + STDMETHOD(GetCaps) (THIS_ LPDSCCAPS pDSCCaps) PURE; + STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE; +}; + +#define IDirectSoundCapture_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundCapture_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundCapture_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) +#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) +#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) +#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) +#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundCaptureBuffer +// + +DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); + +#undef INTERFACE +#define INTERFACE IDirectSoundCaptureBuffer + +DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundCaptureBuffer methods + STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; + STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; + STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; + STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; + STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; + STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, + LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; + STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; + STDMETHOD(Stop) (THIS) PURE; + STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; +}; + +#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundCaptureBuffer_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundCaptureBuffer_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) +#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) +#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) +#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) +#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) +#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) +#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) +#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) +#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) +#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) +#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) +#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) +#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) +#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() +#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + + +#if DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSoundCaptureBuffer8 +// + +DEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6); + +#undef INTERFACE +#define INTERFACE IDirectSoundCaptureBuffer8 + +DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundCaptureBuffer methods + STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE; + STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE; + STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE; + STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE; + STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; + STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, + LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; + STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; + STDMETHOD(Stop) (THIS) PURE; + STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; + + // IDirectSoundCaptureBuffer8 methods + STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE; + STDMETHOD(GetFXStatus) (DWORD dwFXCount, LPDWORD pdwFXStatus) PURE; +}; + +#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundCaptureBuffer8_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundCaptureBuffer8_Release(p) IUnknown_Release(p) + +#define IDirectSoundCaptureBuffer8_GetCaps(p,a) IDirectSoundCaptureBuffer_GetCaps(p,a) +#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) +#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) +#define IDirectSoundCaptureBuffer8_GetStatus(p,a) IDirectSoundCaptureBuffer_GetStatus(p,a) +#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) IDirectSoundCaptureBuffer_Initialize(p,a,b) +#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) +#define IDirectSoundCaptureBuffer8_Start(p,a) IDirectSoundCaptureBuffer_Start(p,a) +#define IDirectSoundCaptureBuffer8_Stop(p) IDirectSoundCaptureBuffer_Stop(p)) +#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) +#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) +#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSoundNotify +// + +DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); + +#undef INTERFACE +#define INTERFACE IDirectSoundNotify + +DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundNotify methods + STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE; +}; + +#define IDirectSoundNotify_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundNotify_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundNotify_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IKsPropertySet +// + +#ifndef _IKsPropertySet_ +#define _IKsPropertySet_ + +#ifdef __cplusplus +// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined +struct IKsPropertySet; +#endif // __cplusplus + +typedef struct IKsPropertySet *LPKSPROPERTYSET; + +#define KSPROPERTY_SUPPORT_GET 0x00000001 +#define KSPROPERTY_SUPPORT_SET 0x00000002 + +DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); + +#undef INTERFACE +#define INTERFACE IKsPropertySet + +DECLARE_INTERFACE_(IKsPropertySet, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IKsPropertySet methods + STDMETHOD(Get) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, + LPVOID pPropertyData, ULONG ulDataLength, PULONG pulBytesReturned) PURE; + STDMETHOD(Set) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength, + LPVOID pPropertyData, ULONG ulDataLength) PURE; + STDMETHOD(QuerySupport) (THIS_ REFGUID rguidPropSet, ULONG ulId, PULONG pulTypeSupport) PURE; +}; + +#define IKsPropertySet_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IKsPropertySet_AddRef(p) IUnknown_AddRef(p) +#define IKsPropertySet_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) +#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) +#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) +#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) +#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // _IKsPropertySet_ + +#if DIRECTSOUND_VERSION >= 0x0800 + +// +// IDirectSoundFXGargle +// + +DEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3); + +typedef struct _DSFXGargle +{ + DWORD dwRateHz; // Rate of modulation in hz + DWORD dwWaveShape; // DSFXGARGLE_WAVE_xxx +} DSFXGargle, *LPDSFXGargle; + +#define DSFXGARGLE_WAVE_TRIANGLE 0 +#define DSFXGARGLE_WAVE_SQUARE 1 + +typedef const DSFXGargle *LPCDSFXGargle; + +#define DSFXGARGLE_RATEHZ_MIN 1 +#define DSFXGARGLE_RATEHZ_MAX 1000 + +#undef INTERFACE +#define INTERFACE IDirectSoundFXGargle + +DECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXGargle methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXGargle pcDsFxGargle) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXGargle pDsFxGargle) PURE; +}; + +#define IDirectSoundFXGargle_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXGargle_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXGargle_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXChorus +// + +DEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47); + +typedef struct _DSFXChorus +{ + FLOAT fWetDryMix; + FLOAT fDepth; + FLOAT fFeedback; + FLOAT fFrequency; + LONG lWaveform; // LFO shape; DSFXCHORUS_WAVE_xxx + FLOAT fDelay; + LONG lPhase; +} DSFXChorus, *LPDSFXChorus; + +typedef const DSFXChorus *LPCDSFXChorus; + +#define DSFXCHORUS_WAVE_TRIANGLE 0 +#define DSFXCHORUS_WAVE_SIN 1 + +#define DSFXCHORUS_WETDRYMIX_MIN 0.0f +#define DSFXCHORUS_WETDRYMIX_MAX 100.0f +#define DSFXCHORUS_DEPTH_MIN 0.0f +#define DSFXCHORUS_DEPTH_MAX 100.0f +#define DSFXCHORUS_FEEDBACK_MIN -99.0f +#define DSFXCHORUS_FEEDBACK_MAX 99.0f +#define DSFXCHORUS_FREQUENCY_MIN 0.0f +#define DSFXCHORUS_FREQUENCY_MAX 10.0f +#define DSFXCHORUS_DELAY_MIN 0.0f +#define DSFXCHORUS_DELAY_MAX 20.0f +#define DSFXCHORUS_PHASE_MIN 0 +#define DSFXCHORUS_PHASE_MAX 4 + +#define DSFXCHORUS_PHASE_NEG_180 0 +#define DSFXCHORUS_PHASE_NEG_90 1 +#define DSFXCHORUS_PHASE_ZERO 2 +#define DSFXCHORUS_PHASE_90 3 +#define DSFXCHORUS_PHASE_180 4 + +#undef INTERFACE +#define INTERFACE IDirectSoundFXChorus + +DECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXChorus methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXChorus pcDsFxChorus) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXChorus pDsFxChorus) PURE; +}; + +#define IDirectSoundFXChorus_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXChorus_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXChorus_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXFlanger +// + +DEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83); + +typedef struct _DSFXFlanger +{ + FLOAT fWetDryMix; + FLOAT fDepth; + FLOAT fFeedback; + FLOAT fFrequency; + LONG lWaveform; + FLOAT fDelay; + LONG lPhase; +} DSFXFlanger, *LPDSFXFlanger; + +typedef const DSFXFlanger *LPCDSFXFlanger; + +#define DSFXFLANGER_WAVE_TRIANGLE 0 +#define DSFXFLANGER_WAVE_SIN 1 + +#define DSFXFLANGER_WETDRYMIX_MIN 0.0f +#define DSFXFLANGER_WETDRYMIX_MAX 100.0f +#define DSFXFLANGER_FREQUENCY_MIN 0.0f +#define DSFXFLANGER_FREQUENCY_MAX 10.0f +#define DSFXFLANGER_DEPTH_MIN 0.0f +#define DSFXFLANGER_DEPTH_MAX 100.0f +#define DSFXFLANGER_PHASE_MIN 0 +#define DSFXFLANGER_PHASE_MAX 4 +#define DSFXFLANGER_FEEDBACK_MIN -99.0f +#define DSFXFLANGER_FEEDBACK_MAX 99.0f +#define DSFXFLANGER_DELAY_MIN 0.0f +#define DSFXFLANGER_DELAY_MAX 4.0f + +#define DSFXFLANGER_PHASE_NEG_180 0 +#define DSFXFLANGER_PHASE_NEG_90 1 +#define DSFXFLANGER_PHASE_ZERO 2 +#define DSFXFLANGER_PHASE_90 3 +#define DSFXFLANGER_PHASE_180 4 + +#undef INTERFACE +#define INTERFACE IDirectSoundFXFlanger + +DECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXFlanger methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXFlanger pcDsFxFlanger) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXFlanger pDsFxFlanger) PURE; +}; + +#define IDirectSoundFXFlanger_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXFlanger_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXFlanger_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXEcho +// + +DEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42); + +typedef struct _DSFXEcho +{ + FLOAT fWetDryMix; + FLOAT fFeedback; + FLOAT fLeftDelay; + FLOAT fRightDelay; + LONG lPanDelay; +} DSFXEcho, *LPDSFXEcho; + +typedef const DSFXEcho *LPCDSFXEcho; + +#define DSFXECHO_WETDRYMIX_MIN 0.0f +#define DSFXECHO_WETDRYMIX_MAX 100.0f +#define DSFXECHO_FEEDBACK_MIN 0.0f +#define DSFXECHO_FEEDBACK_MAX 100.0f +#define DSFXECHO_LEFTDELAY_MIN 1.0f +#define DSFXECHO_LEFTDELAY_MAX 2000.0f +#define DSFXECHO_RIGHTDELAY_MIN 1.0f +#define DSFXECHO_RIGHTDELAY_MAX 2000.0f +#define DSFXECHO_PANDELAY_MIN 0 +#define DSFXECHO_PANDELAY_MAX 1 + +#undef INTERFACE +#define INTERFACE IDirectSoundFXEcho + +DECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXEcho methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXEcho pcDsFxEcho) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXEcho pDsFxEcho) PURE; +}; + +#define IDirectSoundFXEcho_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXEcho_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXEcho_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXDistortion +// + +DEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b); + +typedef struct _DSFXDistortion +{ + FLOAT fGain; + FLOAT fEdge; + FLOAT fPostEQCenterFrequency; + FLOAT fPostEQBandwidth; + FLOAT fPreLowpassCutoff; +} DSFXDistortion, *LPDSFXDistortion; + +typedef const DSFXDistortion *LPCDSFXDistortion; + +#define DSFXDISTORTION_GAIN_MIN -60.0f +#define DSFXDISTORTION_GAIN_MAX 0.0f +#define DSFXDISTORTION_EDGE_MIN 0.0f +#define DSFXDISTORTION_EDGE_MAX 100.0f +#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN 100.0f +#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX 8000.0f +#define DSFXDISTORTION_POSTEQBANDWIDTH_MIN 100.0f +#define DSFXDISTORTION_POSTEQBANDWIDTH_MAX 8000.0f +#define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN 100.0f +#define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX 8000.0f + +#undef INTERFACE +#define INTERFACE IDirectSoundFXDistortion + +DECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXDistortion methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXDistortion pcDsFxDistortion) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXDistortion pDsFxDistortion) PURE; +}; + +#define IDirectSoundFXDistortion_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXDistortion_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXDistortion_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXCompressor +// + +DEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0); + +typedef struct _DSFXCompressor +{ + FLOAT fGain; + FLOAT fAttack; + FLOAT fRelease; + FLOAT fThreshold; + FLOAT fRatio; + FLOAT fPredelay; +} DSFXCompressor, *LPDSFXCompressor; + +typedef const DSFXCompressor *LPCDSFXCompressor; + +#define DSFXCOMPRESSOR_GAIN_MIN -60.0f +#define DSFXCOMPRESSOR_GAIN_MAX 60.0f +#define DSFXCOMPRESSOR_ATTACK_MIN 0.01f +#define DSFXCOMPRESSOR_ATTACK_MAX 500.0f +#define DSFXCOMPRESSOR_RELEASE_MIN 50.0f +#define DSFXCOMPRESSOR_RELEASE_MAX 3000.0f +#define DSFXCOMPRESSOR_THRESHOLD_MIN -60.0f +#define DSFXCOMPRESSOR_THRESHOLD_MAX 0.0f +#define DSFXCOMPRESSOR_RATIO_MIN 1.0f +#define DSFXCOMPRESSOR_RATIO_MAX 100.0f +#define DSFXCOMPRESSOR_PREDELAY_MIN 0.0f +#define DSFXCOMPRESSOR_PREDELAY_MAX 4.0f + +#undef INTERFACE +#define INTERFACE IDirectSoundFXCompressor + +DECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXCompressor methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXCompressor pcDsFxCompressor) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXCompressor pDsFxCompressor) PURE; +}; + +#define IDirectSoundFXCompressor_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXCompressor_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXCompressor_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXParamEq +// + +DEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda); + +typedef struct _DSFXParamEq +{ + FLOAT fCenter; + FLOAT fBandwidth; + FLOAT fGain; +} DSFXParamEq, *LPDSFXParamEq; + +typedef const DSFXParamEq *LPCDSFXParamEq; + +#define DSFXPARAMEQ_CENTER_MIN 80.0f +#define DSFXPARAMEQ_CENTER_MAX 16000.0f +#define DSFXPARAMEQ_BANDWIDTH_MIN 1.0f +#define DSFXPARAMEQ_BANDWIDTH_MAX 36.0f +#define DSFXPARAMEQ_GAIN_MIN -15.0f +#define DSFXPARAMEQ_GAIN_MAX 15.0f + +#undef INTERFACE +#define INTERFACE IDirectSoundFXParamEq + +DECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXParamEq methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXParamEq pcDsFxParamEq) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXParamEq pDsFxParamEq) PURE; +}; + +#define IDirectSoundFXParamEq_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXParamEq_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXParamEq_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXI3DL2Reverb +// + +DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4); + +typedef struct _DSFXI3DL2Reverb +{ + LONG lRoom; // [-10000, 0] default: -1000 mB + LONG lRoomHF; // [-10000, 0] default: 0 mB + FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 + FLOAT flDecayTime; // [0.1, 20.0] default: 1.49s + FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.83 + LONG lReflections; // [-10000, 1000] default: -2602 mB + FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.007 s + LONG lReverb; // [-10000, 2000] default: 200 mB + FLOAT flReverbDelay; // [0.0, 0.1] default: 0.011 s + FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 % + FLOAT flDensity; // [0.0, 100.0] default: 100.0 % + FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz +} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb; + +typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb; + +#define DSFX_I3DL2REVERB_ROOM_MIN (-10000) +#define DSFX_I3DL2REVERB_ROOM_MAX 0 +#define DSFX_I3DL2REVERB_ROOM_DEFAULT (-1000) + +#define DSFX_I3DL2REVERB_ROOMHF_MIN (-10000) +#define DSFX_I3DL2REVERB_ROOMHF_MAX 0 +#define DSFX_I3DL2REVERB_ROOMHF_DEFAULT (-100) + +#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN 0.0f +#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX 10.0f +#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT 0.0f + +#define DSFX_I3DL2REVERB_DECAYTIME_MIN 0.1f +#define DSFX_I3DL2REVERB_DECAYTIME_MAX 20.0f +#define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT 1.49f + +#define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN 0.1f +#define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX 2.0f +#define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT 0.83f + +#define DSFX_I3DL2REVERB_REFLECTIONS_MIN (-10000) +#define DSFX_I3DL2REVERB_REFLECTIONS_MAX 1000 +#define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT (-2602) + +#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN 0.0f +#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX 0.3f +#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT 0.007f + +#define DSFX_I3DL2REVERB_REVERB_MIN (-10000) +#define DSFX_I3DL2REVERB_REVERB_MAX 2000 +#define DSFX_I3DL2REVERB_REVERB_DEFAULT (200) + +#define DSFX_I3DL2REVERB_REVERBDELAY_MIN 0.0f +#define DSFX_I3DL2REVERB_REVERBDELAY_MAX 0.1f +#define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT 0.011f + +#define DSFX_I3DL2REVERB_DIFFUSION_MIN 0.0f +#define DSFX_I3DL2REVERB_DIFFUSION_MAX 100.0f +#define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT 100.0f + +#define DSFX_I3DL2REVERB_DENSITY_MIN 0.0f +#define DSFX_I3DL2REVERB_DENSITY_MAX 100.0f +#define DSFX_I3DL2REVERB_DENSITY_DEFAULT 100.0f + +#define DSFX_I3DL2REVERB_HFREFERENCE_MIN 20.0f +#define DSFX_I3DL2REVERB_HFREFERENCE_MAX 20000.0f +#define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT 5000.0f + +#define DSFX_I3DL2REVERB_QUALITY_MIN 0 +#define DSFX_I3DL2REVERB_QUALITY_MAX 3 +#define DSFX_I3DL2REVERB_QUALITY_DEFAULT 2 + +#undef INTERFACE +#define INTERFACE IDirectSoundFXI3DL2Reverb + +DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXI3DL2Reverb methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE; + STDMETHOD(SetPreset) (THIS_ DWORD dwPreset) PURE; + STDMETHOD(GetPreset) (THIS_ LPDWORD pdwPreset) PURE; + STDMETHOD(SetQuality) (THIS_ LONG lQuality) PURE; + STDMETHOD(GetQuality) (THIS_ LONG *plQuality) PURE; +}; + +#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXI3DL2Reverb_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXI3DL2Reverb_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a) +#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a) +#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a) +#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundFXWavesReverb +// + +DEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25); + +typedef struct _DSFXWavesReverb +{ + FLOAT fInGain; // [-96.0,0.0] default: 0.0 dB + FLOAT fReverbMix; // [-96.0,0.0] default: 0.0 db + FLOAT fReverbTime; // [0.001,3000.0] default: 1000.0 ms + FLOAT fHighFreqRTRatio; // [0.001,0.999] default: 0.001 +} DSFXWavesReverb, *LPDSFXWavesReverb; + +typedef const DSFXWavesReverb *LPCDSFXWavesReverb; + +#define DSFX_WAVESREVERB_INGAIN_MIN -96.0f +#define DSFX_WAVESREVERB_INGAIN_MAX 0.0f +#define DSFX_WAVESREVERB_INGAIN_DEFAULT 0.0f +#define DSFX_WAVESREVERB_REVERBMIX_MIN -96.0f +#define DSFX_WAVESREVERB_REVERBMIX_MAX 0.0f +#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT 0.0f +#define DSFX_WAVESREVERB_REVERBTIME_MIN 0.001f +#define DSFX_WAVESREVERB_REVERBTIME_MAX 3000.0f +#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT 1000.0f +#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN 0.001f +#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX 0.999f +#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT 0.001f + +#undef INTERFACE +#define INTERFACE IDirectSoundFXWavesReverb + +DECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFXWavesReverb methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSFXWavesReverb pcDsFxWavesReverb) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSFXWavesReverb pDsFxWavesReverb) PURE; +}; + +#define IDirectSoundFXWavesReverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFXWavesReverb_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFXWavesReverb_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +// +// IDirectSoundCaptureFXAec +// + +DEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65); + +typedef struct _DSCFXAec +{ + BOOL fEnable; + BOOL fNoiseFill; + DWORD dwMode; +} DSCFXAec, *LPDSCFXAec; + +typedef const DSCFXAec *LPCDSCFXAec; + +// These match the AEC_MODE_* constants in the DDK's ksmedia.h file +#define DSCFX_AEC_MODE_PASS_THROUGH 0x0 +#define DSCFX_AEC_MODE_HALF_DUPLEX 0x1 +#define DSCFX_AEC_MODE_FULL_DUPLEX 0x2 + +// These match the AEC_STATUS_* constants in ksmedia.h +#define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED 0x0 +#define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1 +#define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED 0x2 +#define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED 0x8 + +#undef INTERFACE +#define INTERFACE IDirectSoundCaptureFXAec + +DECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundCaptureFXAec methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXAec pDscFxAec) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSCFXAec pDscFxAec) PURE; + STDMETHOD(GetStatus) (THIS_ PDWORD pdwStatus) PURE; + STDMETHOD(Reset) (THIS) PURE; +}; + +#define IDirectSoundCaptureFXAec_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundCaptureFXAec_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundCaptureFXAec_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + + +// +// IDirectSoundCaptureFXNoiseSuppress +// + +DEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca); + +typedef struct _DSCFXNoiseSuppress +{ + BOOL fEnable; +} DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress; + +typedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress; + +#undef INTERFACE +#define INTERFACE IDirectSoundCaptureFXNoiseSuppress + +DECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundCaptureFXNoiseSuppress methods + STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE; + STDMETHOD(GetAllParameters) (THIS_ LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE; + STDMETHOD(Reset) (THIS) PURE; +}; + +#define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundCaptureFXNoiseSuppress_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundCaptureFXNoiseSuppress_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) +#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->SetAllParameters(a) +#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->GetAllParameters(a) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + + +// +// IDirectSoundFullDuplex +// + +#ifndef _IDirectSoundFullDuplex_ +#define _IDirectSoundFullDuplex_ + +#ifdef __cplusplus +// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined +struct IDirectSoundFullDuplex; +#endif // __cplusplus + +typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; + +DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d); + +#undef INTERFACE +#define INTERFACE IDirectSoundFullDuplex + +DECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown) +{ + // IUnknown methods + STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + // IDirectSoundFullDuplex methods + STDMETHOD(Initialize) (THIS_ LPCGUID pCaptureGuid, LPCGUID pRenderGuid, LPCDSCBUFFERDESC lpDscBufferDesc, LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; +}; + +#define IDirectSoundFullDuplex_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) +#define IDirectSoundFullDuplex_AddRef(p) IUnknown_AddRef(p) +#define IDirectSoundFullDuplex_Release(p) IUnknown_Release(p) + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) +#else // !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) +#endif // !defined(__cplusplus) || defined(CINTERFACE) + +#endif // _IDirectSoundFullDuplex_ + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +// +// Return Codes +// + +// The function completed successfully +#define DS_OK S_OK + +// The call succeeded, but we had to substitute the 3D algorithm +#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) + +// The call failed because resources (such as a priority level) +// were already being used by another caller +#define DSERR_ALLOCATED MAKE_DSHRESULT(10) + +// The control (vol, pan, etc.) requested by the caller is not available +#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) + +// An invalid parameter was passed to the returning function +#define DSERR_INVALIDPARAM E_INVALIDARG + +// This call is not valid for the current state of this object +#define DSERR_INVALIDCALL MAKE_DSHRESULT(50) + +// An undetermined error occurred inside the DirectSound subsystem +#define DSERR_GENERIC E_FAIL + +// The caller does not have the priority level required for the function to +// succeed +#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) + +// Not enough free memory is available to complete the operation +#define DSERR_OUTOFMEMORY E_OUTOFMEMORY + +// The specified WAVE format is not supported +#define DSERR_BADFORMAT MAKE_DSHRESULT(100) + +// The function called is not supported at this time +#define DSERR_UNSUPPORTED E_NOTIMPL + +// No sound driver is available for use +#define DSERR_NODRIVER MAKE_DSHRESULT(120) + +// This object is already initialized +#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) + +// This object does not support aggregation +#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION + +// The buffer memory has been lost, and must be restored +#define DSERR_BUFFERLOST MAKE_DSHRESULT(150) + +// Another app has a higher priority level, preventing this call from +// succeeding +#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) + +// This object has not been initialized +#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) + +// The requested COM interface is not available +#define DSERR_NOINTERFACE E_NOINTERFACE + +// Access is denied +#define DSERR_ACCESSDENIED E_ACCESSDENIED + +// Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds +#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) + +// Attempt to use DirectSound 8 functionality on an older DirectSound object +#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) + +// A circular loop of send effects was detected +#define DSERR_SENDLOOP MAKE_DSHRESULT(200) + +// The GUID specified in an audiopath file does not match a valid MIXIN buffer +#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) + +// The object requested was not found (numerically equal to DMUS_E_NOT_FOUND) +#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) + +// The effects requested could not be found on the system, or they were found +// but in the wrong order, or in the wrong hardware/software locations. +#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) + +// +// Flags +// + +#define DSCAPS_PRIMARYMONO 0x00000001 +#define DSCAPS_PRIMARYSTEREO 0x00000002 +#define DSCAPS_PRIMARY8BIT 0x00000004 +#define DSCAPS_PRIMARY16BIT 0x00000008 +#define DSCAPS_CONTINUOUSRATE 0x00000010 +#define DSCAPS_EMULDRIVER 0x00000020 +#define DSCAPS_CERTIFIED 0x00000040 +#define DSCAPS_SECONDARYMONO 0x00000100 +#define DSCAPS_SECONDARYSTEREO 0x00000200 +#define DSCAPS_SECONDARY8BIT 0x00000400 +#define DSCAPS_SECONDARY16BIT 0x00000800 + +#define DSSCL_NORMAL 0x00000001 +#define DSSCL_PRIORITY 0x00000002 +#define DSSCL_EXCLUSIVE 0x00000003 +#define DSSCL_WRITEPRIMARY 0x00000004 + +#define DSSPEAKER_DIRECTOUT 0x00000000 +#define DSSPEAKER_HEADPHONE 0x00000001 +#define DSSPEAKER_MONO 0x00000002 +#define DSSPEAKER_QUAD 0x00000003 +#define DSSPEAKER_STEREO 0x00000004 +#define DSSPEAKER_SURROUND 0x00000005 +#define DSSPEAKER_5POINT1 0x00000006 +#define DSSPEAKER_7POINT1 0x00000007 + +#define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees +#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees +#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees +#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees + +#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) +#define DSSPEAKER_CONFIG(a) ((BYTE)(a)) +#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) + +#define DSBCAPS_PRIMARYBUFFER 0x00000001 +#define DSBCAPS_STATIC 0x00000002 +#define DSBCAPS_LOCHARDWARE 0x00000004 +#define DSBCAPS_LOCSOFTWARE 0x00000008 +#define DSBCAPS_CTRL3D 0x00000010 +#define DSBCAPS_CTRLFREQUENCY 0x00000020 +#define DSBCAPS_CTRLPAN 0x00000040 +#define DSBCAPS_CTRLVOLUME 0x00000080 +#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 +#define DSBCAPS_CTRLFX 0x00000200 +#define DSBCAPS_STICKYFOCUS 0x00004000 +#define DSBCAPS_GLOBALFOCUS 0x00008000 +#define DSBCAPS_GETCURRENTPOSITION2 0x00010000 +#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 +#define DSBCAPS_LOCDEFER 0x00040000 + +#define DSBPLAY_LOOPING 0x00000001 +#define DSBPLAY_LOCHARDWARE 0x00000002 +#define DSBPLAY_LOCSOFTWARE 0x00000004 +#define DSBPLAY_TERMINATEBY_TIME 0x00000008 +#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 +#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 + +#define DSBSTATUS_PLAYING 0x00000001 +#define DSBSTATUS_BUFFERLOST 0x00000002 +#define DSBSTATUS_LOOPING 0x00000004 +#define DSBSTATUS_LOCHARDWARE 0x00000008 +#define DSBSTATUS_LOCSOFTWARE 0x00000010 +#define DSBSTATUS_TERMINATED 0x00000020 + +#define DSBLOCK_FROMWRITECURSOR 0x00000001 +#define DSBLOCK_ENTIREBUFFER 0x00000002 + +#define DSBFREQUENCY_ORIGINAL 0 +#define DSBFREQUENCY_MIN 100 +#if DIRECTSOUND_VERSION >= 0x0900 +#define DSBFREQUENCY_MAX 200000 +#else +#define DSBFREQUENCY_MAX 100000 +#endif + +#define DSBPAN_LEFT -10000 +#define DSBPAN_CENTER 0 +#define DSBPAN_RIGHT 10000 + +#define DSBVOLUME_MIN -10000 +#define DSBVOLUME_MAX 0 + +#define DSBSIZE_MIN 4 +#define DSBSIZE_MAX 0x0FFFFFFF +#define DSBSIZE_FX_MIN 150 // NOTE: Milliseconds, not bytes + +#define DS3DMODE_NORMAL 0x00000000 +#define DS3DMODE_HEADRELATIVE 0x00000001 +#define DS3DMODE_DISABLE 0x00000002 + +#define DS3D_IMMEDIATE 0x00000000 +#define DS3D_DEFERRED 0x00000001 + +#define DS3D_MINDISTANCEFACTOR FLT_MIN +#define DS3D_MAXDISTANCEFACTOR FLT_MAX +#define DS3D_DEFAULTDISTANCEFACTOR 1.0f + +#define DS3D_MINROLLOFFFACTOR 0.0f +#define DS3D_MAXROLLOFFFACTOR 10.0f +#define DS3D_DEFAULTROLLOFFFACTOR 1.0f + +#define DS3D_MINDOPPLERFACTOR 0.0f +#define DS3D_MAXDOPPLERFACTOR 10.0f +#define DS3D_DEFAULTDOPPLERFACTOR 1.0f + +#define DS3D_DEFAULTMINDISTANCE 1.0f +#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f + +#define DS3D_MINCONEANGLE 0 +#define DS3D_MAXCONEANGLE 360 +#define DS3D_DEFAULTCONEANGLE 360 + +#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX + +// IDirectSoundCapture attributes + +#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER +#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED +#define DSCCAPS_MULTIPLECAPTURE 0x00000001 + +// IDirectSoundCaptureBuffer attributes + +#define DSCBCAPS_WAVEMAPPED 0x80000000 + +#if DIRECTSOUND_VERSION >= 0x0800 +#define DSCBCAPS_CTRLFX 0x00000200 +#endif + + +#define DSCBLOCK_ENTIREBUFFER 0x00000001 + +#define DSCBSTATUS_CAPTURING 0x00000001 +#define DSCBSTATUS_LOOPING 0x00000002 + +#define DSCBSTART_LOOPING 0x00000001 + +#define DSBPN_OFFSETSTOP 0xFFFFFFFF + +#define DS_CERTIFIED 0x00000000 +#define DS_UNCERTIFIED 0x00000001 + + +// +// Flags for the I3DL2 effects +// + +// +// I3DL2 Material Presets +// + +enum +{ + DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW, + DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW, + DSFX_I3DL2_MATERIAL_PRESET_THINDOOR, + DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR, + DSFX_I3DL2_MATERIAL_PRESET_WOODWALL, + DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL, + DSFX_I3DL2_MATERIAL_PRESET_STONEWALL, + DSFX_I3DL2_MATERIAL_PRESET_CURTAIN +}; + +#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f +#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f +#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f +#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f +#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f +#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f +#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f +#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f + +enum +{ + DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT, + DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC, + DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL, + DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM, + DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL, + DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE, + DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA, + DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR, + DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY, + DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY, + DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR, + DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY, + DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST, + DSFX_I3DL2_ENVIRONMENT_PRESET_CITY, + DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS, + DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY, + DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN, + DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT, + DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE, + DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER, + DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM, + DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL, + DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL, + DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE +}; + +// +// I3DL2 Reverberation Presets Values +// + +#define I3DL2_ENVIRONMENT_PRESET_DEFAULT -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_GENERIC -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f, 207, 0.002f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_ROOM -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f, 53, 0.003f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_BATHROOM -1000,-1200, 0.0f, 1.49f, 0.54f, -370, 0.007f, 1030, 0.011f, 100.0f, 60.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_STONEROOM -1000, -300, 0.0f, 2.31f, 0.64f, -711, 0.012f, 83, 0.017f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM -1000, -476, 0.0f, 4.32f, 0.59f, -789, 0.020f, -289, 0.030f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f, -2, 0.029f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_CAVE -1000, 0, 0.0f, 2.91f, 1.30f, -602, 0.015f, -302, 0.022f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_ARENA -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f, 16, 0.030f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_HANGAR -1000,-1000, 0.0f,10.05f, 0.23f, -602, 0.020f, 198, 0.030f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_HALLWAY -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f, 441, 0.011f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f, 395, 0.020f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_ALLEY -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f, -4, 0.011f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_FOREST -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f, -613, 0.088f, 79.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_CITY -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f, 50.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f, 27.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_QUARRY -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f, 500, 0.025f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_PLAIN -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f, 21.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT -1000, 0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER -1000,-4000, 0.0f, 1.49f, 0.10f, -449, 0.007f, 1700, 0.011f, 100.0f, 100.0f, 5000.0f + +// +// Examples simulating 'musical' reverb presets +// +// Name Decay time Description +// Small Room 1.1s A small size room with a length of 5m or so. +// Medium Room 1.3s A medium size room with a length of 10m or so. +// Large Room 1.5s A large size room suitable for live performances. +// Medium Hall 1.8s A medium size concert hall. +// Large Hall 1.8s A large size concert hall suitable for a full orchestra. +// Plate 1.3s A plate reverb simulation. +// + +#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM -1000, -600, 0.0f, 1.10f, 0.83f, -400, 0.005f, 500, 0.010f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f, -200, 0.020f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f, -800, 0.030f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f +#define I3DL2_ENVIRONMENT_PRESET_PLATE -1000, -200, 0.0f, 1.30f, 0.90f, 0, 0.002f, 0, 0.010f, 100.0f, 75.0f, 5000.0f + +// +// DirectSound3D Algorithms +// + +// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000} +#define DS3DALG_DEFAULT GUID_NULL + +// No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA} +DEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); + +// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA} +DEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); + +// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA} +DEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); + + +#if DIRECTSOUND_VERSION >= 0x0800 + +// +// DirectSound Internal Effect Algorithms +// + + +// Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF} +DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf); + +// Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6} +DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6); + +// Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98} +DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98); + +// Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D} +DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d); + +// Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21} +DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21); + +// Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57} +DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57); + +// Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231} +DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31); + +// I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4} +DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4); + +// Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C} +DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c); + +// +// DirectSound Capture Effect Algorithms +// + + +// Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1} +// Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h +DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1); + +// Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40} +DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40); + +// System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810} +DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10); + +// Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5} +// Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h +DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5); + +// Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D} +DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d); + +// System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0} +DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0); + +#endif // DIRECTSOUND_VERSION >= 0x0800 + +#endif // __DSOUND_INCLUDED__ + + + +#ifdef __cplusplus +}; +#endif // __cplusplus + + diff --git a/desmume/src/windows/directx/dsound.lib b/desmume/src/windows/directx/dsound.lib new file mode 100644 index 0000000000000000000000000000000000000000..37bf188bc4409f2b75e7063389efd9d5cf2aeb02 GIT binary patch literal 4042 zcmcIn&2JJx6n}vIf>NqBu`wE{>7k7Y0_96%3|Oj?QrZBGC$k`|mV_39(0Ho%#y_D~ zoBj*ln)K|!gSTEx`e!t$@9pfzEIYeh{FvnJ?7olr&3p6S%wP&Ji{mh@-L7OK<1E(p2D@?(jdIzHz{o5X*}ZYLQ^cIz zYQ5VZ^km10T2!p|=6P9tWkZ;?97Yj4q0UtwMbUaC_w(|8t05QihUY^}4(a8f-OdlX zZTXYxav~}Svrvm0h1q7D7M2Nl8$OJ7rWT!%t0rw!O%TiGU>x9h65xCa;1C&?NZlEL zlK?q&AL%syO9XC20ln`QpF|_*)Y04;w?p3 zRn`jTLTe)wPvRPMT`VqnVaOT2Iq-J7G25gg&32nr(sid!;z>+Db&4JzJe}Lm20VD~ zU`=52M4Ixu!H2~P`vl10%NOlK?XxiZBGPKs`}M`RCYr;S??}H?h7bEJL{C+{l*-0> z1Gqxc^oXB@@TnL3n^=$3{DxCYaC>$FSu`BA2`tmI(5;PDqu2S^dEXB&m6yZCLTR0e zhn@sRmNWujq0`$eKF5?d0|lqh=5lNF6idGb~JPrnHOt5b_eD;-$kLna&9g*m!k`yQ2Lsm_2@kn6!}zJk}2xIspy5Kk(TBn@$KP zY&zin20NJ$`~47c@zQ3-Hco2}(s*?j>7$l07siG5r|G}_(1v2nP&*6lPzjqOr?iZ5zV#PuI25isC1^@s6 literal 0 HcmV?d00001 diff --git a/desmume/src/windows/directx/dxerr8.h b/desmume/src/windows/directx/dxerr8.h new file mode 100644 index 000000000..c2744306e --- /dev/null +++ b/desmume/src/windows/directx/dxerr8.h @@ -0,0 +1,99 @@ +/*==========================================================================; + * + * + * File: dxerr8.h + * Content: DirectX Error Library Include File + * + ****************************************************************************/ + +#ifndef _DXERR8_H_ +#define _DXERR8_H_ + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +// +// DXGetErrorString8 +// +// Desc: Converts a DirectX HRESULT to a string +// +// Args: HRESULT hr Can be any error code from +// D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW +// +// Return: Converted string +// +const char* WINAPI DXGetErrorString8A(HRESULT hr); +const WCHAR* WINAPI DXGetErrorString8W(HRESULT hr); + +#ifdef UNICODE +#define DXGetErrorString8 DXGetErrorString8W +#else +#define DXGetErrorString8 DXGetErrorString8A +#endif + + +// +// DXGetErrorDescription8 +// +// Desc: Returns a string description of a DirectX HRESULT +// +// Args: HRESULT hr Can be any error code from +// D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW +// +// Return: String description +// +const char* WINAPI DXGetErrorDescription8A(HRESULT hr); +const WCHAR* WINAPI DXGetErrorDescription8W(HRESULT hr); + +#ifdef UNICODE + #define DXGetErrorDescription8 DXGetErrorDescription8W +#else + #define DXGetErrorDescription8 DXGetErrorDescription8A +#endif + + +// +// DXTrace +// +// Desc: Outputs a formatted error message to the debug stream +// +// Args: CHAR* strFile The current file, typically passed in using the +// __FILE__ macro. +// DWORD dwLine The current line number, typically passed in using the +// __LINE__ macro. +// HRESULT hr An HRESULT that will be traced to the debug stream. +// CHAR* strMsg A string that will be traced to the debug stream (may be NULL) +// BOOL bPopMsgBox If TRUE, then a message box will popup also containing the passed info. +// +// Return: The hr that was passed in. +// +HRESULT WINAPI DXTraceA( const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox ); +HRESULT WINAPI DXTraceW( const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox ); + +#ifdef UNICODE +#define DXTrace DXTraceW +#else +#define DXTrace DXTraceA +#endif + + +// +// Helper macros +// +#if defined(DEBUG) | defined(_DEBUG) +#define DXTRACE_MSG(str) DXTrace( __FILE__, (DWORD)__LINE__, 0, str, FALSE ) +#define DXTRACE_ERR(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, TRUE ) +#define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, FALSE ) +#else +#define DXTRACE_MSG(str) (0L) +#define DXTRACE_ERR(str,hr) (hr) +#define DXTRACE_ERR_NOMSGBOX(str,hr) (hr) +#endif + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif // _DXERR8_H_ diff --git a/desmume/src/windows/directx/dxguid.lib b/desmume/src/windows/directx/dxguid.lib new file mode 100644 index 0000000000000000000000000000000000000000..66119132708c7704ecb4bf712eaaa262727a0fac GIT binary patch literal 565850 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 Wx<$-kJGDt&y296x~o0+@OZ-nWgtU^HtcILnyjA zgrXZm*iI1XWK)AA8w!LUP2UKrX`7&$dIi-`o7d5*sI1T$d)d5|V#vU?#7d9jy_LT5 zA}bv(Cw4k?!mNNfdvo6AjG@Kq?-KsCcCreiFv&E^W4hV=$kQOuX!CiP{{3%!d{uG* zJdXv7=&-}T4mv*GPWe|3enAI*?RfLs;(Z6bvIblCmiL?qt|a|ILiGrp6aG6Y*z0yvcP;b{FM`R*Flt9-%PDR|?U?O`y5_4wp77C~i31YPj~xWV$_r zuod}XAigiYl*ZAdeldBeN%O(4q`a{Ty0hnE{BmmMV~+;AJR0W@XxgyKLNMIc)KPQ9 z?#>B5Z_?PoN6H}`guGZ1jRs-QX=6-`E5$F?@_WER3FV(!GFe_t%81%!0pHb1-6}Bo z=MNaN`oI+A7s8g%lcHkKh;q@V`x{3Y*I4;wFhJ^pW*Qs5br!uj6qM_!P-A9LN5FmZ z4&#X}G|G*LAtDv7**mdbLeuP}88Lm7(EwO%`zX{AattCs2c@G?ZFJtEo^B}s1DHPg F@_%!USjGSV literal 0 HcmV?d00001 diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 6ab3c3389..be6dd057f 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -59,7 +59,7 @@ #include "snddx.h" -#include +#include "directx/ddraw.h" #define GPU3D_NULL 0 #define GPU3D_OPENGL 1 diff --git a/desmume/src/windows/snddx.cpp b/desmume/src/windows/snddx.cpp index 7af3663df..b5636131a 100755 --- a/desmume/src/windows/snddx.cpp +++ b/desmume/src/windows/snddx.cpp @@ -18,7 +18,7 @@ */ #include -#include +#include "directx/dsound.h" #ifdef __MINGW32__ // I have to do this because for some reason because the dxerr8.h header is fubared const char* __stdcall DXGetErrorString8A(HRESULT hr); @@ -26,7 +26,7 @@ const char* __stdcall DXGetErrorString8A(HRESULT hr); const char* __stdcall DXGetErrorDescription8A(HRESULT hr); #define DXGetErrorDescription8 DXGetErrorDescription8A #else -#include +#include "directx/dxerr8.h" #endif #include "SPU.h" #include "snddx.h" @@ -72,14 +72,14 @@ int SNDDXInit(int buffersize) if ((ret = DirectSoundCreate8(NULL, &lpDS8, NULL)) != DS_OK) { - sprintf(tempstr, "DirectSound8Create error: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "DirectSound8Create error: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; } if ((ret = IDirectSound8_SetCooperativeLevel(lpDS8, hwnd, DSSCL_PRIORITY)) != DS_OK) { - sprintf(tempstr, "IDirectSound8_SetCooperativeLevel error: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "IDirectSound8_SetCooperativeLevel error: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; } @@ -92,7 +92,7 @@ int SNDDXInit(int buffersize) if ((ret = IDirectSound8_CreateSoundBuffer(lpDS8, &dsbdesc, &lpDSB, NULL)) != DS_OK) { - sprintf(tempstr, "Error when creating primary sound buffer: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "Error when creating primary sound buffer: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; } @@ -109,7 +109,7 @@ int SNDDXInit(int buffersize) if ((ret = IDirectSoundBuffer8_SetFormat(lpDSB, &wfx)) != DS_OK) { - sprintf(tempstr, "IDirectSoundBuffer8_SetFormat error: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "IDirectSoundBuffer8_SetFormat error: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; } @@ -136,14 +136,14 @@ int SNDDXInit(int buffersize) if ((ret = IDirectSound8_CreateSoundBuffer(lpDS8, &dsbdesc, &lpDSB2, NULL)) != DS_OK) { - sprintf(tempstr, "Error when creating secondary sound buffer: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "Error when creating secondary sound buffer: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; } } else { - sprintf(tempstr, "Error when creating secondary sound buffer: %s - %s", DXGetErrorString(ret), DXGetErrorDescription(ret)); + sprintf(tempstr, "Error when creating secondary sound buffer: %s - %s", DXGetErrorString8(ret), DXGetErrorDescription8(ret)); MessageBox (NULL, tempstr, "Error", MB_OK | MB_ICONINFORMATION); return -1; }

na%~So*@gdTgw_+qLWVwMRNTQLNU4 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%0DLPhX39UR_Ea$dE^`->W!1 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 z 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 eEhYC!aRP&jJNVOQ +#else +#define IUnknown void +#if !defined( NT_BUILD_ENVIRONMENT ) && !defined(WINNT) + #define CO_E_NOTINITIALIZED 0x800401F0L +#endif +#endif + +#define _FACDD 0x876 +#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) + +#ifdef __cplusplus +extern "C" { +#endif + +// +// For compilers that don't support nameless unions, do a +// +// #define NONAMELESSUNION +// +// before #include +// +#ifndef DUMMYUNIONNAMEN +#if defined(__cplusplus) || !defined(NONAMELESSUNION) +#define DUMMYUNIONNAMEN(n) +#else +#define DUMMYUNIONNAMEN(n) u##n +#endif +#endif + +#ifndef MAKEFOURCC + #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ + ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) +#endif //defined(MAKEFOURCC) + +/* + * FOURCC codes for DX compressed-texture pixel formats + */ +#define FOURCC_DXT1 (MAKEFOURCC('D','X','T','1')) +#define FOURCC_DXT2 (MAKEFOURCC('D','X','T','2')) +#define FOURCC_DXT3 (MAKEFOURCC('D','X','T','3')) +#define FOURCC_DXT4 (MAKEFOURCC('D','X','T','4')) +#define FOURCC_DXT5 (MAKEFOURCC('D','X','T','5')) + +/* + * GUIDS used by DirectDraw objects + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) + +DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); +DEFINE_GUID( CLSID_DirectDraw7, 0x3c305196,0x50db,0x11d3,0x9c,0xfe,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); +DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); +DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); +DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); +DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); +DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); +DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); +DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 ); +DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); +DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B ); +DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); +DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); +DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); +DEFINE_GUID( IID_IDirectDrawColorControl, 0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 ); +DEFINE_GUID( IID_IDirectDrawGammaControl, 0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); + +#endif + +/*============================================================================ + * + * DirectDraw Structures + * + * Various structures used to invoke DirectDraw. + * + *==========================================================================*/ + +struct IDirectDraw; +struct IDirectDrawSurface; +struct IDirectDrawPalette; +struct IDirectDrawClipper; + +typedef struct IDirectDraw FAR *LPDIRECTDRAW; +typedef struct IDirectDraw2 FAR *LPDIRECTDRAW2; +typedef struct IDirectDraw4 FAR *LPDIRECTDRAW4; +typedef struct IDirectDraw7 FAR *LPDIRECTDRAW7; +typedef struct IDirectDrawSurface FAR *LPDIRECTDRAWSURFACE; +typedef struct IDirectDrawSurface2 FAR *LPDIRECTDRAWSURFACE2; +typedef struct IDirectDrawSurface3 FAR *LPDIRECTDRAWSURFACE3; +typedef struct IDirectDrawSurface4 FAR *LPDIRECTDRAWSURFACE4; +typedef struct IDirectDrawSurface7 FAR *LPDIRECTDRAWSURFACE7; +typedef struct IDirectDrawPalette FAR *LPDIRECTDRAWPALETTE; +typedef struct IDirectDrawClipper FAR *LPDIRECTDRAWCLIPPER; +typedef struct IDirectDrawColorControl FAR *LPDIRECTDRAWCOLORCONTROL; +typedef struct IDirectDrawGammaControl FAR *LPDIRECTDRAWGAMMACONTROL; + +typedef struct _DDFXROP FAR *LPDDFXROP; +typedef struct _DDSURFACEDESC FAR *LPDDSURFACEDESC; +typedef struct _DDSURFACEDESC2 FAR *LPDDSURFACEDESC2; +typedef struct _DDCOLORCONTROL FAR *LPDDCOLORCONTROL; + +/* + * API's + */ +#if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM ) +//#if defined( _WIN32 ) && !defined( _NO_ENUM ) + typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID); + typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID); + extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); + extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext ); + /* + * Protect against old SDKs + */ + #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) + #define HMONITOR_DECLARED + DECLARE_HANDLE(HMONITOR); + #endif + typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR); + typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID, HMONITOR); + extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); + extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); + typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); + typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); + + #ifdef UNICODE + typedef LPDDENUMCALLBACKW LPDDENUMCALLBACK; + #define DirectDrawEnumerate DirectDrawEnumerateW + typedef LPDDENUMCALLBACKEXW LPDDENUMCALLBACKEX; + typedef LPDIRECTDRAWENUMERATEEXW LPDIRECTDRAWENUMERATEEX; + #define DirectDrawEnumerateEx DirectDrawEnumerateExW + #else + typedef LPDDENUMCALLBACKA LPDDENUMCALLBACK; + #define DirectDrawEnumerate DirectDrawEnumerateA + typedef LPDDENUMCALLBACKEXA LPDDENUMCALLBACKEX; + typedef LPDIRECTDRAWENUMERATEEXA LPDIRECTDRAWENUMERATEEX; + #define DirectDrawEnumerateEx DirectDrawEnumerateExA + #endif + extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); + extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter ); + extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter ); +#endif +/* + * Flags for DirectDrawEnumerateEx + * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to + * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx. + * By default, only the primary display device is enumerated. + * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES) + */ + +/* + * This flag causes enumeration of any GDI display devices which are part of + * the Windows Desktop + */ +#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001L + +/* + * This flag causes enumeration of any GDI display devices which are not + * part of the Windows Desktop + */ +#define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002L + +/* + * This flag causes enumeration of non-display devices + */ +#define DDENUM_NONDISPLAYDEVICES 0x00000004L + + +#define REGSTR_KEY_DDHW_DESCRIPTION "Description" +#define REGSTR_KEY_DDHW_DRIVERNAME "DriverName" +#define REGSTR_PATH_DDHW "Hardware\\DirectDrawDrivers" + +#define DDCREATE_HARDWAREONLY 0x00000001l +#define DDCREATE_EMULATIONONLY 0x00000002l + +#if defined(WINNT) || !defined(WIN32) +typedef long HRESULT; +#endif + +//#ifndef WINNT +typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID); +typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID); +typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID); +typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID); +typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID); +//#endif + +/* + * Generic pixel format with 8-bit RGB and alpha components + */ +typedef struct _DDARGB +{ + BYTE blue; + BYTE green; + BYTE red; + BYTE alpha; +} DDARGB; + +typedef DDARGB FAR *LPDDARGB; + +/* + * This version of the structure remains for backwards source compatibility. + * The DDARGB structure is the one that should be used for all DirectDraw APIs. + */ +typedef struct _DDRGBA +{ + BYTE red; + BYTE green; + BYTE blue; + BYTE alpha; +} DDRGBA; + +typedef DDRGBA FAR *LPDDRGBA; + + +/* + * DDCOLORKEY + */ +typedef struct _DDCOLORKEY +{ + DWORD dwColorSpaceLowValue; // low boundary of color space that is to + // be treated as Color Key, inclusive + DWORD dwColorSpaceHighValue; // high boundary of color space that is + // to be treated as Color Key, inclusive +} DDCOLORKEY; + +typedef DDCOLORKEY FAR* LPDDCOLORKEY; + +/* + * DDBLTFX + * Used to pass override information to the DIRECTDRAWSURFACE callback Blt. + */ +typedef struct _DDBLTFX +{ + DWORD dwSize; // size of structure + DWORD dwDDFX; // FX operations + DWORD dwROP; // Win32 raster operations + DWORD dwDDROP; // Raster operations new for DirectDraw + DWORD dwRotationAngle; // Rotation angle for blt + DWORD dwZBufferOpCode; // ZBuffer compares + DWORD dwZBufferLow; // Low limit of Z buffer + DWORD dwZBufferHigh; // High limit of Z buffer + DWORD dwZBufferBaseDest; // Destination base value + DWORD dwZDestConstBitDepth; // Bit depth used to specify Z constant for destination + union + { + DWORD dwZDestConst; // Constant to use as Z buffer for dest + LPDIRECTDRAWSURFACE lpDDSZBufferDest; // Surface to use as Z buffer for dest + } DUMMYUNIONNAMEN(1); + DWORD dwZSrcConstBitDepth; // Bit depth used to specify Z constant for source + union + { + DWORD dwZSrcConst; // Constant to use as Z buffer for src + LPDIRECTDRAWSURFACE lpDDSZBufferSrc; // Surface to use as Z buffer for src + } DUMMYUNIONNAMEN(2); + DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend + DWORD dwAlphaEdgeBlend; // Alpha for edge blending + DWORD dwReserved; + DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination + union + { + DWORD dwAlphaDestConst; // Constant to use as Alpha Channel + LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as Alpha Channel + } DUMMYUNIONNAMEN(3); + DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source + union + { + DWORD dwAlphaSrcConst; // Constant to use as Alpha Channel + LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as Alpha Channel + } DUMMYUNIONNAMEN(4); + union + { + DWORD dwFillColor; // color in RGB or Palettized + DWORD dwFillDepth; // depth value for z-buffer + DWORD dwFillPixel; // pixel value for RGBA or RGBZ + LPDIRECTDRAWSURFACE lpDDSPattern; // Surface to use as pattern + } DUMMYUNIONNAMEN(5); + DDCOLORKEY ddckDestColorkey; // DestColorkey override + DDCOLORKEY ddckSrcColorkey; // SrcColorkey override +} DDBLTFX; + +typedef DDBLTFX FAR* LPDDBLTFX; + + + +/* + * DDSCAPS + */ +typedef struct _DDSCAPS +{ + DWORD dwCaps; // capabilities of surface wanted +} DDSCAPS; + +typedef DDSCAPS FAR* LPDDSCAPS; + + +/* + * DDOSCAPS + */ +typedef struct _DDOSCAPS +{ + DWORD dwCaps; // capabilities of surface wanted +} DDOSCAPS; + +typedef DDOSCAPS FAR* LPDDOSCAPS; + +/* + * This structure is used internally by DirectDraw. + */ +typedef struct _DDSCAPSEX +{ + DWORD dwCaps2; + DWORD dwCaps3; + union + { + DWORD dwCaps4; + DWORD dwVolumeDepth; + } DUMMYUNIONNAMEN(1); +} DDSCAPSEX, FAR * LPDDSCAPSEX; + +/* + * DDSCAPS2 + */ +typedef struct _DDSCAPS2 +{ + DWORD dwCaps; // capabilities of surface wanted + DWORD dwCaps2; + DWORD dwCaps3; + union + { + DWORD dwCaps4; + DWORD dwVolumeDepth; + } DUMMYUNIONNAMEN(1); +} DDSCAPS2; + +typedef DDSCAPS2 FAR* LPDDSCAPS2; + +/* + * DDCAPS + */ +#define DD_ROP_SPACE (256/32) // space required to store ROP array +/* + * NOTE: Our choosen structure number scheme is to append a single digit to + * the end of the structure giving the version that structure is associated + * with. + */ + +/* + * This structure represents the DDCAPS structure released in DirectDraw 1.0. It is used internally + * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0. + * New applications should use the DDCAPS structure defined below. + */ +typedef struct _DDCAPS_DX1 +{ + DWORD dwSize; // size of the DDDRIVERCAPS structure + DWORD dwCaps; // driver specific capabilities + DWORD dwCaps2; // more driver specific capabilites + DWORD dwCKeyCaps; // color key capabilities of the surface + DWORD dwFXCaps; // driver specific stretching and effects capabilites + DWORD dwFXAlphaCaps; // alpha driver specific capabilities + DWORD dwPalCaps; // palette capabilities + DWORD dwSVCaps; // stereo vision capabilities + DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 + DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 + DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 + DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 + DWORD dwVidMemTotal; // total amount of video memory + DWORD dwVidMemFree; // amount of free video memory + DWORD dwMaxVisibleOverlays; // maximum number of visible overlays + DWORD dwCurrVisibleOverlays; // current number of visible overlays + DWORD dwNumFourCCCodes; // number of four cc codes + DWORD dwAlignBoundarySrc; // source rectangle alignment + DWORD dwAlignSizeSrc; // source rectangle byte size + DWORD dwAlignBoundaryDest; // dest rectangle alignment + DWORD dwAlignSizeDest; // dest rectangle byte size + DWORD dwAlignStrideAlign; // stride alignment + DWORD dwRops[DD_ROP_SPACE]; // ROPS supported + DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities + DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMinLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only + DWORD dwMaxLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only + DWORD dwMinHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only + DWORD dwMaxHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only + DWORD dwReserved1; // reserved + DWORD dwReserved2; // reserved + DWORD dwReserved3; // reserved +} DDCAPS_DX1; + +typedef DDCAPS_DX1 FAR* LPDDCAPS_DX1; + +/* + * This structure is the DDCAPS structure as it was in version 2 and 3 of Direct X. + * It is present for back compatability. + */ +typedef struct _DDCAPS_DX3 +{ + DWORD dwSize; // size of the DDDRIVERCAPS structure + DWORD dwCaps; // driver specific capabilities + DWORD dwCaps2; // more driver specific capabilites + DWORD dwCKeyCaps; // color key capabilities of the surface + DWORD dwFXCaps; // driver specific stretching and effects capabilites + DWORD dwFXAlphaCaps; // alpha driver specific capabilities + DWORD dwPalCaps; // palette capabilities + DWORD dwSVCaps; // stereo vision capabilities + DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 + DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 + DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 + DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 + DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 + DWORD dwVidMemTotal; // total amount of video memory + DWORD dwVidMemFree; // amount of free video memory + DWORD dwMaxVisibleOverlays; // maximum number of visible overlays + DWORD dwCurrVisibleOverlays; // current number of visible overlays + DWORD dwNumFourCCCodes; // number of four cc codes + DWORD dwAlignBoundarySrc; // source rectangle alignment + DWORD dwAlignSizeSrc; // source rectangle byte size + DWORD dwAlignBoundaryDest; // dest rectangle alignment + DWORD dwAlignSizeDest; // dest rectangle byte size + DWORD dwAlignStrideAlign; // stride alignment + DWORD dwRops[DD_ROP_SPACE]; // ROPS supported + DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities + DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 + DWORD dwReserved1; // reserved + DWORD dwReserved2; // reserved + DWORD dwReserved3; // reserved + DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts + DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts + DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts + DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts + DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts + DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts + DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts + DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts + DWORD dwSSBCaps; // driver specific capabilities for System->System blts + DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts + DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts + DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts + DWORD dwReserved4; // reserved + DWORD dwReserved5; // reserved + DWORD dwReserved6; // reserved +} DDCAPS_DX3; +typedef DDCAPS_DX3 FAR* LPDDCAPS_DX3; + +/* + * This structure is the DDCAPS structure as it was in version 5 of Direct X. + * It is present for back compatability. + */ +typedef struct _DDCAPS_DX5 +{ +/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure +/* 4*/ DWORD dwCaps; // driver specific capabilities +/* 8*/ DWORD dwCaps2; // more driver specific capabilites +/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface +/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites +/* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities +/* 18*/ DWORD dwPalCaps; // palette capabilities +/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities +/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 +/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 +/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 +/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 +/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 +/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 +/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 +/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory +/* 40*/ DWORD dwVidMemFree; // amount of free video memory +/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays +/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays +/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes +/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment +/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size +/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment +/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size +/* 60*/ DWORD dwAlignStrideAlign; // stride alignment +/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported +/* 84*/ DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities +/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* a0*/ DWORD dwReserved1; // reserved +/* a4*/ DWORD dwReserved2; // reserved +/* a8*/ DWORD dwReserved3; // reserved +/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts +/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts +/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts +/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts +/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts +/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts +/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts +/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts +/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts +/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts +/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts +/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts +// Members added for DX5: +/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports +/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used +/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts +/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts +/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts +/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts +/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts +/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts +} DDCAPS_DX5; +typedef DDCAPS_DX5 FAR* LPDDCAPS_DX5; + +typedef struct _DDCAPS_DX6 +{ +/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure +/* 4*/ DWORD dwCaps; // driver specific capabilities +/* 8*/ DWORD dwCaps2; // more driver specific capabilites +/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface +/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites +/* 14*/ DWORD dwFXAlphaCaps; // alpha caps +/* 18*/ DWORD dwPalCaps; // palette capabilities +/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities +/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 +/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 +/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 +/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 +/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 +/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 +/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 +/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory +/* 40*/ DWORD dwVidMemFree; // amount of free video memory +/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays +/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays +/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes +/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment +/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size +/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment +/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size +/* 60*/ DWORD dwAlignStrideAlign; // stride alignment +/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported +/* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 +/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* a0*/ DWORD dwReserved1; // reserved +/* a4*/ DWORD dwReserved2; // reserved +/* a8*/ DWORD dwReserved3; // reserved +/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts +/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts +/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts +/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts +/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts +/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts +/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts +/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts +/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts +/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts +/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts +/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts +/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports +/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used +/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts +/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts +/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts +/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts +/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts +/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts +// Members added for DX6 release +/*16c*/ DDSCAPS2 ddsCaps; // Surface Caps +} DDCAPS_DX6; +typedef DDCAPS_DX6 FAR* LPDDCAPS_DX6; + +typedef struct _DDCAPS_DX7 +{ +/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure +/* 4*/ DWORD dwCaps; // driver specific capabilities +/* 8*/ DWORD dwCaps2; // more driver specific capabilites +/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface +/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites +/* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities +/* 18*/ DWORD dwPalCaps; // palette capabilities +/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities +/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 +/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 +/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 +/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 +/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 +/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 +/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 +/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory +/* 40*/ DWORD dwVidMemFree; // amount of free video memory +/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays +/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays +/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes +/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment +/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size +/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment +/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size +/* 60*/ DWORD dwAlignStrideAlign; // stride alignment +/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported +/* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 +/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 +/* a0*/ DWORD dwReserved1; // reserved +/* a4*/ DWORD dwReserved2; // reserved +/* a8*/ DWORD dwReserved3; // reserved +/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts +/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts +/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts +/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts +/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts +/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts +/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts +/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts +/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts +/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts +/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts +/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts +/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports +/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used +/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts +/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts +/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts +/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts +/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts +/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts +// Members added for DX6 release +/*16c*/ DDSCAPS2 ddsCaps; // Surface Caps +} DDCAPS_DX7; +typedef DDCAPS_DX7 FAR* LPDDCAPS_DX7; + + +#if DIRECTDRAW_VERSION <= 0x300 + typedef DDCAPS_DX3 DDCAPS; +#elif DIRECTDRAW_VERSION <= 0x500 + typedef DDCAPS_DX5 DDCAPS; +#elif DIRECTDRAW_VERSION <= 0x600 + typedef DDCAPS_DX6 DDCAPS; +#else + typedef DDCAPS_DX7 DDCAPS; +#endif + +typedef DDCAPS FAR* LPDDCAPS; + + + +/* + * DDPIXELFORMAT + */ +typedef struct _DDPIXELFORMAT +{ + DWORD dwSize; // size of structure + DWORD dwFlags; // pixel format flags + DWORD dwFourCC; // (FOURCC code) + union + { + DWORD dwRGBBitCount; // how many bits per pixel + DWORD dwYUVBitCount; // how many bits per pixel + DWORD dwZBufferBitDepth; // how many total bits/pixel in z buffer (including any stencil bits) + DWORD dwAlphaBitDepth; // how many bits for alpha channels + DWORD dwLuminanceBitCount; // how many bits per pixel + DWORD dwBumpBitCount; // how many bits per "buxel", total + DWORD dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture + // format list and if DDPF_D3DFORMAT is set + } DUMMYUNIONNAMEN(1); + union + { + DWORD dwRBitMask; // mask for red bit + DWORD dwYBitMask; // mask for Y bits + DWORD dwStencilBitDepth; // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits) + DWORD dwLuminanceBitMask; // mask for luminance bits + DWORD dwBumpDuBitMask; // mask for bump map U delta bits + DWORD dwOperations; // DDPF_D3DFORMAT Operations + } DUMMYUNIONNAMEN(2); + union + { + DWORD dwGBitMask; // mask for green bits + DWORD dwUBitMask; // mask for U bits + DWORD dwZBitMask; // mask for Z bits + DWORD dwBumpDvBitMask; // mask for bump map V delta bits + struct + { + WORD wFlipMSTypes; // Multisample methods supported via flip for this D3DFORMAT + WORD wBltMSTypes; // Multisample methods supported via blt for this D3DFORMAT + } MultiSampleCaps; + + } DUMMYUNIONNAMEN(3); + union + { + DWORD dwBBitMask; // mask for blue bits + DWORD dwVBitMask; // mask for V bits + DWORD dwStencilBitMask; // mask for stencil bits + DWORD dwBumpLuminanceBitMask; // mask for luminance in bump map + } DUMMYUNIONNAMEN(4); + union + { + DWORD dwRGBAlphaBitMask; // mask for alpha channel + DWORD dwYUVAlphaBitMask; // mask for alpha channel + DWORD dwLuminanceAlphaBitMask;// mask for alpha channel + DWORD dwRGBZBitMask; // mask for Z channel + DWORD dwYUVZBitMask; // mask for Z channel + } DUMMYUNIONNAMEN(5); +} DDPIXELFORMAT; + +typedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT; + +/* + * DDOVERLAYFX + */ +typedef struct _DDOVERLAYFX +{ + DWORD dwSize; // size of structure + DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend + DWORD dwAlphaEdgeBlend; // Constant to use as alpha for edge blend + DWORD dwReserved; + DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination + union + { + DWORD dwAlphaDestConst; // Constant to use as alpha channel for dest + LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as alpha channel for dest + } DUMMYUNIONNAMEN(1); + DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source + union + { + DWORD dwAlphaSrcConst; // Constant to use as alpha channel for src + LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as alpha channel for src + } DUMMYUNIONNAMEN(2); + DDCOLORKEY dckDestColorkey; // DestColorkey override + DDCOLORKEY dckSrcColorkey; // DestColorkey override + DWORD dwDDFX; // Overlay FX + DWORD dwFlags; // flags +} DDOVERLAYFX; + +typedef DDOVERLAYFX FAR *LPDDOVERLAYFX; + + +/* + * DDBLTBATCH: BltBatch entry structure + */ +typedef struct _DDBLTBATCH +{ + LPRECT lprDest; + LPDIRECTDRAWSURFACE lpDDSSrc; + LPRECT lprSrc; + DWORD dwFlags; + LPDDBLTFX lpDDBltFx; +} DDBLTBATCH; + +typedef DDBLTBATCH FAR * LPDDBLTBATCH; + + +/* + * DDGAMMARAMP + */ +typedef struct _DDGAMMARAMP +{ + WORD red[256]; + WORD green[256]; + WORD blue[256]; +} DDGAMMARAMP; +typedef DDGAMMARAMP FAR * LPDDGAMMARAMP; + +/* + * This is the structure within which DirectDraw returns data about the current graphics driver and chipset + */ + +#define MAX_DDDEVICEID_STRING 512 + +typedef struct tagDDDEVICEIDENTIFIER +{ + /* + * These elements are for presentation to the user only. They should not be used to identify particular + * drivers, since this is unreliable and many different strings may be associated with the same + * device, and the same driver from different vendors. + */ + char szDriver[MAX_DDDEVICEID_STRING]; + char szDescription[MAX_DDDEVICEID_STRING]; + + /* + * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons + * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic + * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. + * + * This version has the form: + * wProduct = HIWORD(liDriverVersion.HighPart) + * wVersion = LOWORD(liDriverVersion.HighPart) + * wSubVersion = HIWORD(liDriverVersion.LowPart) + * wBuild = LOWORD(liDriverVersion.LowPart) + */ +#ifdef _WIN32 + LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ +#else + DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ + DWORD dwDriverVersionHighPart; +#endif + + + /* + * These elements can be used to identify particular chipsets. Use with extreme caution. + * dwVendorId Identifies the manufacturer. May be zero if unknown. + * dwDeviceId Identifies the type of chipset. May be zero if unknown. + * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. + * dwRevision Identifies the revision level of the chipset. May be zero if unknown. + */ + DWORD dwVendorId; + DWORD dwDeviceId; + DWORD dwSubSysId; + DWORD dwRevision; + + /* + * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the + * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to + * reprofile the graphics subsystem. + * This element can also be used to identify particular problematic drivers. + */ + GUID guidDeviceIdentifier; +} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; + +typedef struct tagDDDEVICEIDENTIFIER2 +{ + /* + * These elements are for presentation to the user only. They should not be used to identify particular + * drivers, since this is unreliable and many different strings may be associated with the same + * device, and the same driver from different vendors. + */ + char szDriver[MAX_DDDEVICEID_STRING]; + char szDescription[MAX_DDDEVICEID_STRING]; + + /* + * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons + * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic + * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. + * + * This version has the form: + * wProduct = HIWORD(liDriverVersion.HighPart) + * wVersion = LOWORD(liDriverVersion.HighPart) + * wSubVersion = HIWORD(liDriverVersion.LowPart) + * wBuild = LOWORD(liDriverVersion.LowPart) + */ +#ifdef _WIN32 + LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ +#else + DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ + DWORD dwDriverVersionHighPart; +#endif + + + /* + * These elements can be used to identify particular chipsets. Use with extreme caution. + * dwVendorId Identifies the manufacturer. May be zero if unknown. + * dwDeviceId Identifies the type of chipset. May be zero if unknown. + * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. + * dwRevision Identifies the revision level of the chipset. May be zero if unknown. + */ + DWORD dwVendorId; + DWORD dwDeviceId; + DWORD dwSubSysId; + DWORD dwRevision; + + /* + * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the + * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to + * reprofile the graphics subsystem. + * This element can also be used to identify particular problematic drivers. + */ + GUID guidDeviceIdentifier; + + /* + * This element is used to determine the Windows Hardware Quality Lab (WHQL) + * certification level for this driver/device pair. + */ + DWORD dwWHQLLevel; + +} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; + +/* + * Flags for the IDirectDraw4::GetDeviceIdentifier method + */ + +/* + * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped + * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the + * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is + * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities + * of the DirectDraw object involved. + */ +#define DDGDI_GETHOSTIDENTIFIER 0x00000001L + +/* + * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel + */ +#define GET_WHQL_YEAR( dwWHQLLevel ) \ + ( (dwWHQLLevel) / 0x10000 ) +#define GET_WHQL_MONTH( dwWHQLLevel ) \ + ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff ) +#define GET_WHQL_DAY( dwWHQLLevel ) \ + ( (dwWHQLLevel) & 0xff ) + + +/* + * callbacks + */ +typedef DWORD (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext ); +#ifdef STREAMING +typedef DWORD (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD); +#endif + + +/* + * INTERACES FOLLOW: + * IDirectDraw + * IDirectDrawClipper + * IDirectDrawPalette + * IDirectDrawSurface + */ + +/* + * IDirectDraw + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDraw +DECLARE_INTERFACE_( IDirectDraw, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDraw methods ***/ + STDMETHOD(Compact)(THIS) PURE; + STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; + STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; + STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; + STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; + STDMETHOD(FlipToGDISurface)(THIS) PURE; + STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; + STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; + STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; + STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; + STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; + STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; + STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; + STDMETHOD(RestoreDisplayMode)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE; + STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDraw_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDraw_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p) +#define IDirectDraw_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) +#define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) +#define IDirectDraw_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) +#define IDirectDraw_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) +#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) +#define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) +#define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) +#define IDirectDraw_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) +#define IDirectDraw_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) +#define IDirectDraw_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) +#define IDirectDraw_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) +#define IDirectDraw_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) +#define IDirectDraw_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) +#define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) +#define IDirectDraw_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) +#define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) +#define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) +#define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->lpVtbl->SetDisplayMode(p, a, b, c) +#define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) +#else +#define IDirectDraw_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDraw_AddRef(p) (p)->AddRef() +#define IDirectDraw_Release(p) (p)->Release() +#define IDirectDraw_Compact(p) (p)->Compact() +#define IDirectDraw_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) +#define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) +#define IDirectDraw_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) +#define IDirectDraw_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) +#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) +#define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) +#define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface() +#define IDirectDraw_GetCaps(p, a, b) (p)->GetCaps(a, b) +#define IDirectDraw_GetDisplayMode(p, a) (p)->GetDisplayMode(a) +#define IDirectDraw_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) +#define IDirectDraw_GetGDISurface(p, a) (p)->GetGDISurface(a) +#define IDirectDraw_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) +#define IDirectDraw_GetScanLine(p, a) (p)->GetScanLine(a) +#define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) +#define IDirectDraw_Initialize(p, a) (p)->Initialize(a) +#define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode() +#define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) +#define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->SetDisplayMode(a, b, c) +#define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) +#endif + +#endif + +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDraw2 +DECLARE_INTERFACE_( IDirectDraw2, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDraw methods ***/ + STDMETHOD(Compact)(THIS) PURE; + STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; + STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; + STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; + STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; + STDMETHOD(FlipToGDISurface)(THIS) PURE; + STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; + STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; + STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; + STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; + STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; + STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; + STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; + STDMETHOD(RestoreDisplayMode)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; + STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; +}; +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDraw2_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p) +#define IDirectDraw2_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) +#define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) +#define IDirectDraw2_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) +#define IDirectDraw2_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) +#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) +#define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) +#define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) +#define IDirectDraw2_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) +#define IDirectDraw2_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) +#define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) +#define IDirectDraw2_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) +#define IDirectDraw2_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) +#define IDirectDraw2_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) +#define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) +#define IDirectDraw2_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) +#define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) +#define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) +#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) +#define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) +#define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) +#else +#define IDirectDraw2_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDraw2_AddRef(p) (p)->AddRef() +#define IDirectDraw2_Release(p) (p)->Release() +#define IDirectDraw2_Compact(p) (p)->Compact() +#define IDirectDraw2_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) +#define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) +#define IDirectDraw2_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) +#define IDirectDraw2_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) +#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) +#define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) +#define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface() +#define IDirectDraw2_GetCaps(p, a, b) (p)->GetCaps(a, b) +#define IDirectDraw2_GetDisplayMode(p, a) (p)->GetDisplayMode(a) +#define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) +#define IDirectDraw2_GetGDISurface(p, a) (p)->GetGDISurface(a) +#define IDirectDraw2_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) +#define IDirectDraw2_GetScanLine(p, a) (p)->GetScanLine(a) +#define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) +#define IDirectDraw2_Initialize(p, a) (p)->Initialize(a) +#define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode() +#define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) +#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) +#define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) +#define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) +#endif + +#endif + +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDraw4 +DECLARE_INTERFACE_( IDirectDraw4, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDraw methods ***/ + STDMETHOD(Compact)(THIS) PURE; + STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 FAR *, IUnknown FAR *) PURE; + STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR * ) PURE; + STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; + STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE; + STDMETHOD(FlipToGDISurface)(THIS) PURE; + STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; + STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; + STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; + STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 FAR *) PURE; + STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; + STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; + STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; + STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; + STDMETHOD(RestoreDisplayMode)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; + STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; + /*** Added in the V4 Interface ***/ + STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE; + STDMETHOD(RestoreAllSurfaces)(THIS) PURE; + STDMETHOD(TestCooperativeLevel)(THIS) PURE; + STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE; +}; +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDraw4_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p) +#define IDirectDraw4_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) +#define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) +#define IDirectDraw4_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) +#define IDirectDraw4_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) +#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) +#define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) +#define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) +#define IDirectDraw4_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) +#define IDirectDraw4_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) +#define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) +#define IDirectDraw4_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) +#define IDirectDraw4_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) +#define IDirectDraw4_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) +#define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) +#define IDirectDraw4_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) +#define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) +#define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) +#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) +#define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) +#define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) +#define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) +#define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) +#define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) +#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) +#else +#define IDirectDraw4_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDraw4_AddRef(p) (p)->AddRef() +#define IDirectDraw4_Release(p) (p)->Release() +#define IDirectDraw4_Compact(p) (p)->Compact() +#define IDirectDraw4_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) +#define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) +#define IDirectDraw4_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) +#define IDirectDraw4_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) +#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) +#define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) +#define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface() +#define IDirectDraw4_GetCaps(p, a, b) (p)->GetCaps(a, b) +#define IDirectDraw4_GetDisplayMode(p, a) (p)->GetDisplayMode(a) +#define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) +#define IDirectDraw4_GetGDISurface(p, a) (p)->GetGDISurface(a) +#define IDirectDraw4_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) +#define IDirectDraw4_GetScanLine(p, a) (p)->GetScanLine(a) +#define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) +#define IDirectDraw4_Initialize(p, a) (p)->Initialize(a) +#define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode() +#define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) +#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) +#define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) +#define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) +#define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) +#define IDirectDraw4_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() +#define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel() +#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) +#endif + +#endif + +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDraw7 +DECLARE_INTERFACE_( IDirectDraw7, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDraw methods ***/ + STDMETHOD(Compact)(THIS) PURE; + STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; + STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE; + STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE; + STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; + STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE; + STDMETHOD(FlipToGDISurface)(THIS) PURE; + STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; + STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; + STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; + STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE; + STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; + STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; + STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; + STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; + STDMETHOD(RestoreDisplayMode)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; + STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; + /*** Added in the V4 Interface ***/ + STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE; + STDMETHOD(RestoreAllSurfaces)(THIS) PURE; + STDMETHOD(TestCooperativeLevel)(THIS) PURE; + STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE; + STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE; + STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE; +}; +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDraw7_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p) +#define IDirectDraw7_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) +#define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) +#define IDirectDraw7_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) +#define IDirectDraw7_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) +#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) +#define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) +#define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) +#define IDirectDraw7_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) +#define IDirectDraw7_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) +#define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) +#define IDirectDraw7_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) +#define IDirectDraw7_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) +#define IDirectDraw7_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) +#define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) +#define IDirectDraw7_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) +#define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) +#define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) +#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) +#define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) +#define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) +#define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) +#define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) +#define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) +#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) +#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c) +#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b) +#else +#define IDirectDraw7_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDraw7_AddRef(p) (p)->AddRef() +#define IDirectDraw7_Release(p) (p)->Release() +#define IDirectDraw7_Compact(p) (p)->Compact() +#define IDirectDraw7_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) +#define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) +#define IDirectDraw7_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) +#define IDirectDraw7_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) +#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) +#define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) +#define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface() +#define IDirectDraw7_GetCaps(p, a, b) (p)->GetCaps(a, b) +#define IDirectDraw7_GetDisplayMode(p, a) (p)->GetDisplayMode(a) +#define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) +#define IDirectDraw7_GetGDISurface(p, a) (p)->GetGDISurface(a) +#define IDirectDraw7_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) +#define IDirectDraw7_GetScanLine(p, a) (p)->GetScanLine(a) +#define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) +#define IDirectDraw7_Initialize(p, a) (p)->Initialize(a) +#define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode() +#define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) +#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) +#define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) +#define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) +#define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) +#define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() +#define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel() +#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) +#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(a,b,c) +#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(a,b) +#endif + +#endif + + +/* + * IDirectDrawPalette + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDrawPalette +DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawPalette methods ***/ + STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE; + STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; + STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawPalette_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawPalette_GetCaps(p, a) (p)->lpVtbl->GetCaps(p, a) +#define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->lpVtbl->GetEntries(p, a, b, c, d) +#define IDirectDrawPalette_Initialize(p, a, b, c) (p)->lpVtbl->Initialize(p, a, b, c) +#define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->lpVtbl->SetEntries(p, a, b, c, d) +#else +#define IDirectDrawPalette_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDrawPalette_AddRef(p) (p)->AddRef() +#define IDirectDrawPalette_Release(p) (p)->Release() +#define IDirectDrawPalette_GetCaps(p, a) (p)->GetCaps(a) +#define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->GetEntries(a, b, c, d) +#define IDirectDrawPalette_Initialize(p, a, b, c) (p)->Initialize(a, b, c) +#define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->SetEntries(a, b, c, d) +#endif + +#endif + + +/* + * IDirectDrawClipper + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDrawClipper +DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawClipper methods ***/ + STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE; + STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE; + STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE; + STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE; + STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawClipper_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->lpVtbl->GetClipList(p, a, b, c) +#define IDirectDrawClipper_GetHWnd(p, a) (p)->lpVtbl->GetHWnd(p, a) +#define IDirectDrawClipper_Initialize(p, a, b) (p)->lpVtbl->Initialize(p, a, b) +#define IDirectDrawClipper_IsClipListChanged(p, a) (p)->lpVtbl->IsClipListChanged(p, a) +#define IDirectDrawClipper_SetClipList(p, a, b) (p)->lpVtbl->SetClipList(p, a, b) +#define IDirectDrawClipper_SetHWnd(p, a, b) (p)->lpVtbl->SetHWnd(p, a, b) +#else +#define IDirectDrawClipper_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDrawClipper_AddRef(p) (p)->AddRef() +#define IDirectDrawClipper_Release(p) (p)->Release() +#define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->GetClipList(a, b, c) +#define IDirectDrawClipper_GetHWnd(p, a) (p)->GetHWnd(a) +#define IDirectDrawClipper_Initialize(p, a, b) (p)->Initialize(a, b) +#define IDirectDrawClipper_IsClipListChanged(p, a) (p)->IsClipListChanged(a) +#define IDirectDrawClipper_SetClipList(p, a, b) (p)->SetClipList(a, b) +#define IDirectDrawClipper_SetHWnd(p, a, b) (p)->SetHWnd(a, b) +#endif + +#endif + +/* + * IDirectDrawSurface and related interfaces + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDrawSurface +DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawSurface methods ***/ + STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE; + STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; + STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE; + STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; + STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE; + STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE; + STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; + STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE; + STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; + STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; + STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; + STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; + STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; + STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; + STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; + STDMETHOD(IsLost)(THIS) PURE; + STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; + STDMETHOD(Restore)(THIS) PURE; + STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; + STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; + STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; + STDMETHOD(Unlock)(THIS_ LPVOID) PURE; + STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE; + STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; + STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) +#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) +#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) +#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) +#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) +#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) +#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) +#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) +#define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) +#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) +#define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) +#define IDirectDrawSurface_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) +#define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) +#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) +#define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) +#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) +#define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) +#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) +#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) +#define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p) +#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p) +#define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) +#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) +#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) +#define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) +#define IDirectDrawSurface_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) +#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) +#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) +#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) +#else +#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectDrawSurface_AddRef(p) (p)->AddRef() +#define IDirectDrawSurface_Release(p) (p)->Release() +#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) +#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) +#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) +#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) +#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) +#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) +#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) +#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) +#define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b) +#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) +#define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a) +#define IDirectDrawSurface_GetCaps(p,b) (p)->GetCaps(b) +#define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a) +#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b) +#define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a) +#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a) +#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) +#define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a) +#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a) +#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) +#define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectDrawSurface_IsLost(p) (p)->IsLost() +#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a) +#define IDirectDrawSurface_Restore(p) (p)->Restore() +#define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a) +#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b) +#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) +#define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a) +#define IDirectDrawSurface_Unlock(p,b) (p)->Unlock(b) +#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) +#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) +#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) +#endif + +/* + * IDirectDrawSurface2 and related interfaces + */ +#undef INTERFACE +#define INTERFACE IDirectDrawSurface2 +DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawSurface methods ***/ + STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE; + STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; + STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE; + STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; + STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE; + STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE; + STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE; + STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE; + STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; + STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; + STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; + STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; + STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; + STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; + STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; + STDMETHOD(IsLost)(THIS) PURE; + STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; + STDMETHOD(Restore)(THIS) PURE; + STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; + STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; + STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; + STDMETHOD(Unlock)(THIS_ LPVOID) PURE; + STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE; + STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; + STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; + STDMETHOD(PageLock)(THIS_ DWORD) PURE; + STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) +#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) +#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) +#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) +#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) +#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) +#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) +#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) +#define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) +#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) +#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) +#define IDirectDrawSurface2_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) +#define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) +#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) +#define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) +#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) +#define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) +#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) +#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) +#define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p) +#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p) +#define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) +#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) +#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) +#define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) +#define IDirectDrawSurface2_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) +#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) +#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) +#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) +#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) +#define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) +#define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) +#else +#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectDrawSurface2_AddRef(p) (p)->AddRef() +#define IDirectDrawSurface2_Release(p) (p)->Release() +#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) +#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) +#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) +#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) +#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) +#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) +#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) +#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) +#define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b) +#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) +#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a) +#define IDirectDrawSurface2_GetCaps(p,b) (p)->GetCaps(b) +#define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a) +#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b) +#define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a) +#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a) +#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) +#define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a) +#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a) +#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) +#define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectDrawSurface2_IsLost(p) (p)->IsLost() +#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a) +#define IDirectDrawSurface2_Restore(p) (p)->Restore() +#define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a) +#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b) +#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) +#define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a) +#define IDirectDrawSurface2_Unlock(p,b) (p)->Unlock(b) +#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) +#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) +#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) +#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a) +#define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a) +#define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a) +#endif + +/* + * IDirectDrawSurface3 and related interfaces + */ +#undef INTERFACE +#define INTERFACE IDirectDrawSurface3 +DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawSurface methods ***/ + STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE; + STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; + STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE; + STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; + STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE; + STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE; + STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; + STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE; + STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE; + STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; + STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; + STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; + STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; + STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; + STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; + STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; + STDMETHOD(IsLost)(THIS) PURE; + STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; + STDMETHOD(Restore)(THIS) PURE; + STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; + STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; + STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; + STDMETHOD(Unlock)(THIS_ LPVOID) PURE; + STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE; + STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; + STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; + STDMETHOD(PageLock)(THIS_ DWORD) PURE; + STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; + /*** Added in the V3 interface ***/ + STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) +#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) +#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) +#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) +#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) +#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) +#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) +#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) +#define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) +#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) +#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) +#define IDirectDrawSurface3_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) +#define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) +#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) +#define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) +#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) +#define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) +#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) +#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) +#define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p) +#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p) +#define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) +#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) +#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) +#define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) +#define IDirectDrawSurface3_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) +#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) +#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) +#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) +#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) +#define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) +#define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) +#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) +#else +#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectDrawSurface3_AddRef(p) (p)->AddRef() +#define IDirectDrawSurface3_Release(p) (p)->Release() +#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) +#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) +#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) +#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) +#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) +#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) +#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) +#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) +#define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b) +#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) +#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a) +#define IDirectDrawSurface3_GetCaps(p,b) (p)->GetCaps(b) +#define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a) +#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b) +#define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a) +#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a) +#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) +#define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a) +#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a) +#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) +#define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectDrawSurface3_IsLost(p) (p)->IsLost() +#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a) +#define IDirectDrawSurface3_Restore(p) (p)->Restore() +#define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a) +#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b) +#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) +#define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a) +#define IDirectDrawSurface3_Unlock(p,b) (p)->Unlock(b) +#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) +#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) +#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) +#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a) +#define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a) +#define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a) +#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) +#endif + +/* + * IDirectDrawSurface4 and related interfaces + */ +#undef INTERFACE +#define INTERFACE IDirectDrawSurface4 +DECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawSurface methods ***/ + STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE; + STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; + STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE; + STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; + STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE; + STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE; + STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; + STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; + STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE; + STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *) PURE; + STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; + STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; + STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; + STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; + STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; + STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; + STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; + STDMETHOD(IsLost)(THIS) PURE; + STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; + STDMETHOD(Restore)(THIS) PURE; + STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; + STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; + STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; + STDMETHOD(Unlock)(THIS_ LPRECT) PURE; + STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE; + STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; + STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; + STDMETHOD(PageLock)(THIS_ DWORD) PURE; + STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; + /*** Added in the v3 interface ***/ + STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; + /*** Added in the v4 interface ***/ + STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; + STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; + STDMETHOD(ChangeUniquenessValue)(THIS) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) +#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) +#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) +#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) +#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) +#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) +#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) +#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) +#define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) +#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) +#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) +#define IDirectDrawSurface4_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) +#define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) +#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) +#define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) +#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) +#define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) +#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) +#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) +#define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p) +#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p) +#define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) +#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) +#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) +#define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) +#define IDirectDrawSurface4_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) +#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) +#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) +#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) +#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) +#define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) +#define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) +#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) +#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) +#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) +#else +#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectDrawSurface4_AddRef(p) (p)->AddRef() +#define IDirectDrawSurface4_Release(p) (p)->Release() +#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) +#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) +#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) +#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) +#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) +#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) +#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) +#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) +#define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b) +#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) +#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a) +#define IDirectDrawSurface4_GetCaps(p,b) (p)->GetCaps(b) +#define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a) +#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b) +#define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a) +#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a) +#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) +#define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a) +#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a) +#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) +#define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectDrawSurface4_IsLost(p) (p)->IsLost() +#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a) +#define IDirectDrawSurface4_Restore(p) (p)->Restore() +#define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a) +#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b) +#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) +#define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a) +#define IDirectDrawSurface4_Unlock(p,b) (p)->Unlock(b) +#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) +#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) +#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) +#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a) +#define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a) +#define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a) +#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) +#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) +#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() +#endif + +/* + * IDirectDrawSurface7 and related interfaces + */ +#undef INTERFACE +#define INTERFACE IDirectDrawSurface7 +DECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawSurface methods ***/ + STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE; + STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; + STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE; + STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; + STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE; + STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE; + STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; + STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; + STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE; + STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 FAR *) PURE; + STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; + STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; + STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; + STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; + STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; + STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; + STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; + STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; + STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; + STDMETHOD(IsLost)(THIS) PURE; + STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; + STDMETHOD(Restore)(THIS) PURE; + STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; + STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; + STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; + STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; + STDMETHOD(Unlock)(THIS_ LPRECT) PURE; + STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE; + STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; + STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE; + /*** Added in the v2 interface ***/ + STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; + STDMETHOD(PageLock)(THIS_ DWORD) PURE; + STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; + /*** Added in the v3 interface ***/ + STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; + /*** Added in the v4 interface ***/ + STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; + STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; + STDMETHOD(ChangeUniquenessValue)(THIS) PURE; + /*** Moved Texture7 methods here ***/ + STDMETHOD(SetPriority)(THIS_ DWORD) PURE; + STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE; + STDMETHOD(SetLOD)(THIS_ DWORD) PURE; + STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) +#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) +#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) +#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) +#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) +#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) +#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) +#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) +#define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) +#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) +#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) +#define IDirectDrawSurface7_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) +#define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) +#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) +#define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) +#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) +#define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) +#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) +#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) +#define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p) +#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p) +#define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) +#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) +#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) +#define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) +#define IDirectDrawSurface7_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) +#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) +#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) +#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) +#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) +#define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) +#define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) +#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) +#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) +#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) +#define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a) +#define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) +#define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a) +#else +#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectDrawSurface7_AddRef(p) (p)->AddRef() +#define IDirectDrawSurface7_Release(p) (p)->Release() +#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) +#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) +#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) +#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) +#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) +#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) +#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) +#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) +#define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b) +#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) +#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a) +#define IDirectDrawSurface7_GetCaps(p,b) (p)->GetCaps(b) +#define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a) +#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b) +#define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a) +#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a) +#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) +#define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a) +#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a) +#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) +#define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectDrawSurface7_IsLost(p) (p)->IsLost() +#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a) +#define IDirectDrawSurface7_Restore(p) (p)->Restore() +#define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a) +#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b) +#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) +#define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a) +#define IDirectDrawSurface7_Unlock(p,b) (p)->Unlock(b) +#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) +#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) +#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) +#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a) +#define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a) +#define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a) +#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) +#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) +#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() +#define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a) +#define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a) +#define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a) +#define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a) +#endif + + +/* + * IDirectDrawColorControl + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDrawColorControl +DECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawColorControl methods ***/ + STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; + STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawColorControl_GetColorControls(p, a) (p)->lpVtbl->GetColorControls(p, a) +#define IDirectDrawColorControl_SetColorControls(p, a) (p)->lpVtbl->SetColorControls(p, a) +#else +#define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDrawColorControl_AddRef(p) (p)->AddRef() +#define IDirectDrawColorControl_Release(p) (p)->Release() +#define IDirectDrawColorControl_GetColorControls(p, a) (p)->GetColorControls(a) +#define IDirectDrawColorControl_SetColorControls(p, a) (p)->SetColorControls(a) +#endif + +#endif + + +/* + * IDirectDrawGammaControl + */ +#if defined( _WIN32 ) && !defined( _NO_COM ) +#undef INTERFACE +#define INTERFACE IDirectDrawGammaControl +DECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown ) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + /*** IDirectDrawGammaControl methods ***/ + STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; + STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; +}; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) +#define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p) +#define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->lpVtbl->GetGammaRamp(p, a, b) +#define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->lpVtbl->SetGammaRamp(p, a, b) +#else +#define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) +#define IDirectDrawGammaControl_AddRef(p) (p)->AddRef() +#define IDirectDrawGammaControl_Release(p) (p)->Release() +#define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->GetGammaRamp(a, b) +#define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->SetGammaRamp(a, b) +#endif + +#endif + + + +#endif + + +/* + * DDSURFACEDESC + */ +typedef struct _DDSURFACEDESC +{ + DWORD dwSize; // size of the DDSURFACEDESC structure + DWORD dwFlags; // determines what fields are valid + DWORD dwHeight; // height of surface to be created + DWORD dwWidth; // width of input surface + union + { + LONG lPitch; // distance to start of next line (return value only) + DWORD dwLinearSize; // Formless late-allocated optimized surface size + } DUMMYUNIONNAMEN(1); + DWORD dwBackBufferCount; // number of back buffers requested + union + { + DWORD dwMipMapCount; // number of mip-map levels requested + DWORD dwZBufferBitDepth; // depth of Z buffer requested + DWORD dwRefreshRate; // refresh rate (used when display mode is described) + } DUMMYUNIONNAMEN(2); + DWORD dwAlphaBitDepth; // depth of alpha buffer requested + DWORD dwReserved; // reserved + LPVOID lpSurface; // pointer to the associated surface memory + DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use + DDCOLORKEY ddckCKDestBlt; // color key for destination blt use + DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use + DDCOLORKEY ddckCKSrcBlt; // color key for source blt use + DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface + DDSCAPS ddsCaps; // direct draw surface capabilities +} DDSURFACEDESC; + +/* + * DDSURFACEDESC2 + */ +typedef struct _DDSURFACEDESC2 +{ + DWORD dwSize; // size of the DDSURFACEDESC structure + DWORD dwFlags; // determines what fields are valid + DWORD dwHeight; // height of surface to be created + DWORD dwWidth; // width of input surface + union + { + LONG lPitch; // distance to start of next line (return value only) + DWORD dwLinearSize; // Formless late-allocated optimized surface size + } DUMMYUNIONNAMEN(1); + union + { + DWORD dwBackBufferCount; // number of back buffers requested + DWORD dwDepth; // the depth if this is a volume texture + } DUMMYUNIONNAMEN(5); + union + { + DWORD dwMipMapCount; // number of mip-map levels requestde + // dwZBufferBitDepth removed, use ddpfPixelFormat one instead + DWORD dwRefreshRate; // refresh rate (used when display mode is described) + DWORD dwSrcVBHandle; // The source used in VB::Optimize + } DUMMYUNIONNAMEN(2); + DWORD dwAlphaBitDepth; // depth of alpha buffer requested + DWORD dwReserved; // reserved + LPVOID lpSurface; // pointer to the associated surface memory + union + { + DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use + DWORD dwEmptyFaceColor; // Physical color for empty cubemap faces + } DUMMYUNIONNAMEN(3); + DDCOLORKEY ddckCKDestBlt; // color key for destination blt use + DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use + DDCOLORKEY ddckCKSrcBlt; // color key for source blt use + union + { + DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface + DWORD dwFVF; // vertex format description of vertex buffers + } DUMMYUNIONNAMEN(4); + DDSCAPS2 ddsCaps; // direct draw surface capabilities + DWORD dwTextureStage; // stage in multitexture cascade +} DDSURFACEDESC2; + +/* + * ddsCaps field is valid. + */ +#define DDSD_CAPS 0x00000001l // default + +/* + * dwHeight field is valid. + */ +#define DDSD_HEIGHT 0x00000002l + +/* + * dwWidth field is valid. + */ +#define DDSD_WIDTH 0x00000004l + +/* + * lPitch is valid. + */ +#define DDSD_PITCH 0x00000008l + +/* + * dwBackBufferCount is valid. + */ +#define DDSD_BACKBUFFERCOUNT 0x00000020l + +/* + * dwZBufferBitDepth is valid. (shouldnt be used in DDSURFACEDESC2) + */ +#define DDSD_ZBUFFERBITDEPTH 0x00000040l + +/* + * dwAlphaBitDepth is valid. + */ +#define DDSD_ALPHABITDEPTH 0x00000080l + + +/* + * lpSurface is valid. + */ +#define DDSD_LPSURFACE 0x00000800l + +/* + * ddpfPixelFormat is valid. + */ +#define DDSD_PIXELFORMAT 0x00001000l + +/* + * ddckCKDestOverlay is valid. + */ +#define DDSD_CKDESTOVERLAY 0x00002000l + +/* + * ddckCKDestBlt is valid. + */ +#define DDSD_CKDESTBLT 0x00004000l + +/* + * ddckCKSrcOverlay is valid. + */ +#define DDSD_CKSRCOVERLAY 0x00008000l + +/* + * ddckCKSrcBlt is valid. + */ +#define DDSD_CKSRCBLT 0x00010000l + +/* + * dwMipMapCount is valid. + */ +#define DDSD_MIPMAPCOUNT 0x00020000l + + /* + * dwRefreshRate is valid + */ +#define DDSD_REFRESHRATE 0x00040000l + +/* + * dwLinearSize is valid + */ +#define DDSD_LINEARSIZE 0x00080000l + +/* + * dwTextureStage is valid + */ +#define DDSD_TEXTURESTAGE 0x00100000l +/* + * dwFVF is valid + */ +#define DDSD_FVF 0x00200000l +/* + * dwSrcVBHandle is valid + */ +#define DDSD_SRCVBHANDLE 0x00400000l + +/* + * dwDepth is valid + */ +#define DDSD_DEPTH 0x00800000l + +/* + * All input fields are valid. + */ +#define DDSD_ALL 0x00fff9eel + +/* + * DDOPTSURFACEDESC + */ +typedef struct _DDOPTSURFACEDESC +{ + DWORD dwSize; // size of the DDOPTSURFACEDESC structure + DWORD dwFlags; // determines what fields are valid + DDSCAPS2 ddSCaps; // Common caps like: Memory type + DDOSCAPS ddOSCaps; // Common caps like: Memory type + GUID guid; // Compression technique GUID + DWORD dwCompressionRatio; // Compression ratio +} DDOPTSURFACEDESC; + +/* + * guid field is valid. + */ +#define DDOSD_GUID 0x00000001l + +/* + * dwCompressionRatio field is valid. + */ +#define DDOSD_COMPRESSION_RATIO 0x00000002l + +/* + * ddSCaps field is valid. + */ +#define DDOSD_SCAPS 0x00000004l + +/* + * ddOSCaps field is valid. + */ +#define DDOSD_OSCAPS 0x00000008l + +/* + * All input fields are valid. + */ +#define DDOSD_ALL 0x0000000fl + +/* + * The surface's optimized pixelformat is compressed + */ +#define DDOSDCAPS_OPTCOMPRESSED 0x00000001l + +/* + * The surface's optimized pixelformat is reordered + */ +#define DDOSDCAPS_OPTREORDERED 0x00000002l + +/* + * The opt surface is a monolithic mipmap + */ +#define DDOSDCAPS_MONOLITHICMIPMAP 0x00000004l + +/* + * The valid Surf caps: + * #define DDSCAPS_SYSTEMMEMORY 0x00000800l + * #define DDSCAPS_VIDEOMEMORY 0x00004000l + * #define DDSCAPS_LOCALVIDMEM 0x10000000l + * #define DDSCAPS_NONLOCALVIDMEM 0x20000000l + */ +#define DDOSDCAPS_VALIDSCAPS 0x30004800l + +/* + * The valid OptSurf caps + */ +#define DDOSDCAPS_VALIDOSCAPS 0x00000007l + + +/* + * DDCOLORCONTROL + */ +typedef struct _DDCOLORCONTROL +{ + DWORD dwSize; + DWORD dwFlags; + LONG lBrightness; + LONG lContrast; + LONG lHue; + LONG lSaturation; + LONG lSharpness; + LONG lGamma; + LONG lColorEnable; + DWORD dwReserved1; +} DDCOLORCONTROL; + + +/* + * lBrightness field is valid. + */ +#define DDCOLOR_BRIGHTNESS 0x00000001l + +/* + * lContrast field is valid. + */ +#define DDCOLOR_CONTRAST 0x00000002l + +/* + * lHue field is valid. + */ +#define DDCOLOR_HUE 0x00000004l + +/* + * lSaturation field is valid. + */ +#define DDCOLOR_SATURATION 0x00000008l + +/* + * lSharpness field is valid. + */ +#define DDCOLOR_SHARPNESS 0x00000010l + +/* + * lGamma field is valid. + */ +#define DDCOLOR_GAMMA 0x00000020l + +/* + * lColorEnable field is valid. + */ +#define DDCOLOR_COLORENABLE 0x00000040l + + + +/*============================================================================ + * + * Direct Draw Capability Flags + * + * These flags are used to describe the capabilities of a given Surface. + * All flags are bit flags. + * + *==========================================================================*/ + +/**************************************************************************** + * + * DIRECTDRAWSURFACE CAPABILITY FLAGS + * + ****************************************************************************/ + +/* + * This bit is reserved. It should not be specified. + */ +#define DDSCAPS_RESERVED1 0x00000001l + +/* + * Indicates that this surface contains alpha-only information. + * (To determine if a surface is RGBA/YUVA, the pixel format must be + * interrogated.) + */ +#define DDSCAPS_ALPHA 0x00000002l + +/* + * Indicates that this surface is a backbuffer. It is generally + * set by CreateSurface when the DDSCAPS_FLIP capability bit is set. + * It indicates that this surface is THE back buffer of a surface + * flipping structure. DirectDraw supports N surfaces in a + * surface flipping structure. Only the surface that immediately + * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set. + * The other surfaces are identified as back buffers by the presence + * of the DDSCAPS_FLIP capability, their attachment order, and the + * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER + * capabilities. The bit is sent to CreateSurface when a standalone + * back buffer is being created. This surface could be attached to + * a front buffer and/or back buffers to form a flipping surface + * structure after the CreateSurface call. See AddAttachments for + * a detailed description of the behaviors in this case. + */ +#define DDSCAPS_BACKBUFFER 0x00000004l + +/* + * Indicates a complex surface structure is being described. A + * complex surface structure results in the creation of more than + * one surface. The additional surfaces are attached to the root + * surface. The complex structure can only be destroyed by + * destroying the root. + */ +#define DDSCAPS_COMPLEX 0x00000008l + +/* + * Indicates that this surface is a part of a surface flipping structure. + * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and + * DDSCAP_BACKBUFFER bits are not set. They are set by CreateSurface + * on the resulting creations. The dwBackBufferCount field in the + * DDSURFACEDESC structure must be set to at least 1 in order for + * the CreateSurface call to succeed. The DDSCAPS_COMPLEX capability + * must always be set with creating multiple surfaces through CreateSurface. + */ +#define DDSCAPS_FLIP 0x00000010l + +/* + * Indicates that this surface is THE front buffer of a surface flipping + * structure. It is generally set by CreateSurface when the DDSCAPS_FLIP + * capability bit is set. + * If this capability is sent to CreateSurface then a standalonw front buffer + * is created. This surface will not have the DDSCAPS_FLIP capability. + * It can be attached to other back buffers to form a flipping structure. + * See AddAttachments for a detailed description of the behaviors in this + * case. + */ +#define DDSCAPS_FRONTBUFFER 0x00000020l + +/* + * Indicates that this surface is any offscreen surface that is not an overlay, + * texture, zbuffer, front buffer, back buffer, or alpha surface. It is used + * to identify plain vanilla surfaces. + */ +#define DDSCAPS_OFFSCREENPLAIN 0x00000040l + +/* + * Indicates that this surface is an overlay. It may or may not be directly visible + * depending on whether or not it is currently being overlayed onto the primary + * surface. DDSCAPS_VISIBLE can be used to determine whether or not it is being + * overlayed at the moment. + */ +#define DDSCAPS_OVERLAY 0x00000080l + +/* + * Indicates that unique DirectDrawPalette objects can be created and + * attached to this surface. + */ +#define DDSCAPS_PALETTE 0x00000100l + +/* + * Indicates that this surface is the primary surface. The primary + * surface represents what the user is seeing at the moment. + */ +#define DDSCAPS_PRIMARYSURFACE 0x00000200l + + +/* + * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now + * obsolete. + */ +#define DDSCAPS_RESERVED3 0x00000400l +#define DDSCAPS_PRIMARYSURFACELEFT 0x00000000l + +/* + * Indicates that this surface memory was allocated in system memory + */ +#define DDSCAPS_SYSTEMMEMORY 0x00000800l + +/* + * Indicates that this surface can be used as a 3D texture. It does not + * indicate whether or not the surface is being used for that purpose. + */ +#define DDSCAPS_TEXTURE 0x00001000l + +/* + * Indicates that a surface may be a destination for 3D rendering. This + * bit must be set in order to query for a Direct3D Device Interface + * from this surface. + */ +#define DDSCAPS_3DDEVICE 0x00002000l + +/* + * Indicates that this surface exists in video memory. + */ +#define DDSCAPS_VIDEOMEMORY 0x00004000l + +/* + * Indicates that changes made to this surface are immediately visible. + * It is always set for the primary surface and is set for overlays while + * they are being overlayed and texture maps while they are being textured. + */ +#define DDSCAPS_VISIBLE 0x00008000l + +/* + * Indicates that only writes are permitted to the surface. Read accesses + * from the surface may or may not generate a protection fault, but the + * results of a read from this surface will not be meaningful. READ ONLY. + */ +#define DDSCAPS_WRITEONLY 0x00010000l + +/* + * Indicates that this surface is a z buffer. A z buffer does not contain + * displayable information. Instead it contains bit depth information that is + * used to determine which pixels are visible and which are obscured. + */ +#define DDSCAPS_ZBUFFER 0x00020000l + +/* + * Indicates surface will have a DC associated long term + */ +#define DDSCAPS_OWNDC 0x00040000l + +/* + * Indicates surface should be able to receive live video + */ +#define DDSCAPS_LIVEVIDEO 0x00080000l + +/* + * Indicates surface should be able to have a stream decompressed + * to it by the hardware. + */ +#define DDSCAPS_HWCODEC 0x00100000l + +/* + * Surface is a ModeX surface. + * + */ +#define DDSCAPS_MODEX 0x00200000l + +/* + * Indicates surface is one level of a mip-map. This surface will + * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map. + * This can be done explicitly, by creating a number of surfaces and + * attaching them with AddAttachedSurface or by implicitly by CreateSurface. + * If this bit is set then DDSCAPS_TEXTURE must also be set. + */ +#define DDSCAPS_MIPMAP 0x00400000l + +/* + * This bit is reserved. It should not be specified. + */ +#define DDSCAPS_RESERVED2 0x00800000l + + +/* + * Indicates that memory for the surface is not allocated until the surface + * is loaded (via the Direct3D texture Load() function). + */ +#define DDSCAPS_ALLOCONLOAD 0x04000000l + +/* + * Indicates that the surface will recieve data from a video port. + */ +#define DDSCAPS_VIDEOPORT 0x08000000l + +/* + * Indicates that a video memory surface is resident in true, local video + * memory rather than non-local video memory. If this flag is specified then + * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with + * DDSCAPS_NONLOCALVIDMEM. + */ +#define DDSCAPS_LOCALVIDMEM 0x10000000l + +/* + * Indicates that a video memory surface is resident in non-local video + * memory rather than true, local video memory. If this flag is specified + * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with + * DDSCAPS_LOCALVIDMEM. + */ +#define DDSCAPS_NONLOCALVIDMEM 0x20000000l + +/* + * Indicates that this surface is a standard VGA mode surface, and not a + * ModeX surface. (This flag will never be set in combination with the + * DDSCAPS_MODEX flag). + */ +#define DDSCAPS_STANDARDVGAMODE 0x40000000l + +/* + * Indicates that this surface will be an optimized surface. This flag is + * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface + * will be created without any underlying video memory until loaded. + */ +#define DDSCAPS_OPTIMIZED 0x80000000l + + + +/* + * This bit is reserved + */ +#define DDSCAPS2_RESERVED4 0x00000002L +#define DDSCAPS2_HARDWAREDEINTERLACE 0x00000000L + +/* + * Indicates to the driver that this surface will be locked very frequently + * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap + * set must also have DDSCAPS_TEXTURE. This cap cannot be used with + * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE. + */ +#define DDSCAPS2_HINTDYNAMIC 0x00000004L + +/* + * Indicates to the driver that this surface can be re-ordered/retiled on + * load. This operation will not change the size of the texture. It is + * relatively fast and symmetrical, since the application may lock these + * bits (although it will take a performance hit when doing so). Surfaces + * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be + * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE. + */ +#define DDSCAPS2_HINTSTATIC 0x00000008L + +/* + * Indicates that the client would like this texture surface to be managed by the + * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have + * DDSCAPS_TEXTURE set. + */ +#define DDSCAPS2_TEXTUREMANAGE 0x00000010L + +/* + * These bits are reserved for internal use */ +#define DDSCAPS2_RESERVED1 0x00000020L +#define DDSCAPS2_RESERVED2 0x00000040L + +/* + * Indicates to the driver that this surface will never be locked again. + * The driver is free to optimize this surface via retiling and actual compression. + * All calls to Lock() or Blts from this surface will fail. Surfaces with this + * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with + * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC. + */ +#define DDSCAPS2_OPAQUE 0x00000080L + +/* + * Applications should set this bit at CreateSurface time to indicate that they + * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set. + */ +#define DDSCAPS2_HINTANTIALIASING 0x00000100L + + +/* + * This flag is used at CreateSurface time to indicate that this set of + * surfaces is a cubic environment map + */ +#define DDSCAPS2_CUBEMAP 0x00000200L + +/* + * These flags preform two functions: + * - At CreateSurface time, they define which of the six cube faces are + * required by the application. + * - After creation, each face in the cubemap will have exactly one of these + * bits set. + */ +#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400L +#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800L +#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000L +#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000L +#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000L +#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000L + +/* + * This macro may be used to specify all faces of a cube map at CreateSurface time + */ +#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ + DDSCAPS2_CUBEMAP_NEGATIVEX |\ + DDSCAPS2_CUBEMAP_POSITIVEY |\ + DDSCAPS2_CUBEMAP_NEGATIVEY |\ + DDSCAPS2_CUBEMAP_POSITIVEZ |\ + DDSCAPS2_CUBEMAP_NEGATIVEZ ) + + +/* + * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards + * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface + * constructs such as Cube Maps, wherein there are more than one mipmap surface attached + * to the root surface. + * This caps bit is ignored by CreateSurface + */ +#define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000L + +/* This flag indicates that the texture should be managed by D3D only */ +#define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000L + +/* This flag indicates that the managed surface can be safely lost */ +#define DDSCAPS2_DONOTPERSIST 0x00040000L + +/* indicates that this surface is part of a stereo flipping chain */ +#define DDSCAPS2_STEREOSURFACELEFT 0x00080000L + + +/* + * Indicates that the surface is a volume. + * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume + */ +#define DDSCAPS2_VOLUME 0x00200000L + +/* + * Indicates that the surface may be locked multiple times by the application. + * This cap cannot be used with DDSCAPS2_OPAQUE. + */ +#define DDSCAPS2_NOTUSERLOCKABLE 0x00400000L + +/* + * Indicates that the vertex buffer data can be used to render points and + * point sprites. + */ +#define DDSCAPS2_POINTS 0x00800000L + +/* + * Indicates that the vertex buffer data can be used to render rt pactches. + */ +#define DDSCAPS2_RTPATCHES 0x01000000L + +/* + * Indicates that the vertex buffer data can be used to render n patches. + */ +#define DDSCAPS2_NPATCHES 0x02000000L + +/* + * This bit is reserved for internal use + */ +#define DDSCAPS2_RESERVED3 0x04000000L + + +/* + * Indicates that the contents of the backbuffer do not have to be preserved + * the contents of the backbuffer after they are presented. + */ +#define DDSCAPS2_DISCARDBACKBUFFER 0x10000000L + +/* + * Indicates that all surfaces in this creation chain should be given an alpha channel. + * This flag will be set on primary surface chains that may have no explicit pixel format + * (and thus take on the format of the current display mode). + * The driver should infer that all these surfaces have a format having an alpha channel. + * (e.g. assume D3DFMT_A8R8G8B8 if the display mode is x888.) + */ +#define DDSCAPS2_ENABLEALPHACHANNEL 0x20000000L + +/* + * Indicates that all surfaces in this creation chain is extended primary surface format. + * This flag will be set on extended primary surface chains that always have explicit pixel + * format and the pixel format is typically GDI (Graphics Device Interface) couldn't handle, + * thus only used with fullscreen application. (e.g. D3DFMT_A2R10G10B10 format) + */ +#define DDSCAPS2_EXTENDEDFORMATPRIMARY 0x40000000L + +/* + * Indicates that all surfaces in this creation chain is additional primary surface. + * This flag will be set on primary surface chains which must present on the adapter + * id provided on dwCaps4. Typically this will be used to create secondary primary surface + * on DualView display adapter. + */ +#define DDSCAPS2_ADDITIONALPRIMARY 0x80000000L + +/* + * This is a mask that indicates the set of bits that may be set + * at createsurface time to indicate number of samples per pixel + * when multisampling + */ +#define DDSCAPS3_MULTISAMPLE_MASK 0x0000001FL + +/* + * This is a mask that indicates the set of bits that may be set + * at createsurface time to indicate the quality level of rendering + * for the current number of samples per pixel + */ +#define DDSCAPS3_MULTISAMPLE_QUALITY_MASK 0x000000E0L +#define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT 5 + +/* + * This bit is reserved for internal use + */ +#define DDSCAPS3_RESERVED1 0x00000100L + +/* + * This bit is reserved for internal use + */ +#define DDSCAPS3_RESERVED2 0x00000200L + +/* + * This indicates whether this surface has light-weight miplevels + */ +#define DDSCAPS3_LIGHTWEIGHTMIPMAP 0x00000400L + +/* + * This indicates that the mipsublevels for this surface are auto-generated + */ +#define DDSCAPS3_AUTOGENMIPMAP 0x00000800L + +/* + * This indicates that the mipsublevels for this surface are auto-generated + */ +#define DDSCAPS3_DMAP 0x00001000L + + + /**************************************************************************** + * + * DIRECTDRAW DRIVER CAPABILITY FLAGS + * + ****************************************************************************/ + +/* + * Display hardware has 3D acceleration. + */ +#define DDCAPS_3D 0x00000001l + +/* + * Indicates that DirectDraw will support only dest rectangles that are aligned + * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively. + * READ ONLY. + */ +#define DDCAPS_ALIGNBOUNDARYDEST 0x00000002l + +/* + * Indicates that DirectDraw will support only source rectangles whose sizes in + * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively. READ ONLY. + */ +#define DDCAPS_ALIGNSIZEDEST 0x00000004l +/* + * Indicates that DirectDraw will support only source rectangles that are aligned + * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively. + * READ ONLY. + */ +#define DDCAPS_ALIGNBOUNDARYSRC 0x00000008l + +/* + * Indicates that DirectDraw will support only source rectangles whose sizes in + * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively. READ ONLY. + */ +#define DDCAPS_ALIGNSIZESRC 0x00000010l + +/* + * Indicates that DirectDraw will create video memory surfaces that have a stride + * alignment equal to DIRECTDRAWCAPS.dwAlignStride. READ ONLY. + */ +#define DDCAPS_ALIGNSTRIDE 0x00000020l + +/* + * Display hardware is capable of blt operations. + */ +#define DDCAPS_BLT 0x00000040l + +/* + * Display hardware is capable of asynchronous blt operations. + */ +#define DDCAPS_BLTQUEUE 0x00000080l + +/* + * Display hardware is capable of color space conversions during the blt operation. + */ +#define DDCAPS_BLTFOURCC 0x00000100l + +/* + * Display hardware is capable of stretching during blt operations. + */ +#define DDCAPS_BLTSTRETCH 0x00000200l + +/* + * Display hardware is shared with GDI. + */ +#define DDCAPS_GDI 0x00000400l + +/* + * Display hardware can overlay. + */ +#define DDCAPS_OVERLAY 0x00000800l + +/* + * Set if display hardware supports overlays but can not clip them. + */ +#define DDCAPS_OVERLAYCANTCLIP 0x00001000l + +/* + * Indicates that overlay hardware is capable of color space conversions during + * the overlay operation. + */ +#define DDCAPS_OVERLAYFOURCC 0x00002000l + +/* + * Indicates that stretching can be done by the overlay hardware. + */ +#define DDCAPS_OVERLAYSTRETCH 0x00004000l + +/* + * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces + * other than the primary surface. + */ +#define DDCAPS_PALETTE 0x00008000l + +/* + * Indicates that palette changes can be syncd with the veritcal refresh. + */ +#define DDCAPS_PALETTEVSYNC 0x00010000l + +/* + * Display hardware can return the current scan line. + */ +#define DDCAPS_READSCANLINE 0x00020000l + + +/* + * This flag used to bo DDCAPS_STEREOVIEW, which is now obsolete + */ +#define DDCAPS_RESERVED1 0x00040000l + +/* + * Display hardware is capable of generating a vertical blank interrupt. + */ +#define DDCAPS_VBI 0x00080000l + +/* + * Supports the use of z buffers with blt operations. + */ +#define DDCAPS_ZBLTS 0x00100000l + +/* + * Supports Z Ordering of overlays. + */ +#define DDCAPS_ZOVERLAYS 0x00200000l + +/* + * Supports color key + */ +#define DDCAPS_COLORKEY 0x00400000l + +/* + * Supports alpha surfaces + */ +#define DDCAPS_ALPHA 0x00800000l + +/* + * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set) + */ +#define DDCAPS_COLORKEYHWASSIST 0x01000000l + +/* + * no hardware support at all + */ +#define DDCAPS_NOHARDWARE 0x02000000l + +/* + * Display hardware is capable of color fill with bltter + */ +#define DDCAPS_BLTCOLORFILL 0x04000000l + +/* + * Display hardware is bank switched, and potentially very slow at + * random access to VRAM. + */ +#define DDCAPS_BANKSWITCHED 0x08000000l + +/* + * Display hardware is capable of depth filling Z-buffers with bltter + */ +#define DDCAPS_BLTDEPTHFILL 0x10000000l + +/* + * Display hardware is capable of clipping while bltting. + */ +#define DDCAPS_CANCLIP 0x20000000l + +/* + * Display hardware is capable of clipping while stretch bltting. + */ +#define DDCAPS_CANCLIPSTRETCHED 0x40000000l + +/* + * Display hardware is capable of bltting to or from system memory + */ +#define DDCAPS_CANBLTSYSMEM 0x80000000l + + + /**************************************************************************** + * + * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2) + * + ****************************************************************************/ + +/* + * Display hardware is certified + */ +#define DDCAPS2_CERTIFIED 0x00000001l + +/* + * Driver cannot interleave 2D operations (lock and blt) to surfaces with + * Direct3D rendering operations between calls to BeginScene() and EndScene() + */ +#define DDCAPS2_NO2DDURING3DSCENE 0x00000002l + +/* + * Display hardware contains a video port + */ +#define DDCAPS2_VIDEOPORT 0x00000004l + +/* + * The overlay can be automatically flipped according to the video port + * VSYNCs, providing automatic doubled buffered display of video port + * data using an overlay + */ +#define DDCAPS2_AUTOFLIPOVERLAY 0x00000008l + +/* + * Overlay can display each field of interlaced data individually while + * it is interleaved in memory without causing jittery artifacts. + */ +#define DDCAPS2_CANBOBINTERLEAVED 0x00000010l + +/* + * Overlay can display each field of interlaced data individually while + * it is not interleaved in memory without causing jittery artifacts. + */ +#define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020l + +/* + * The overlay surface contains color controls (brightness, sharpness, etc.) + */ +#define DDCAPS2_COLORCONTROLOVERLAY 0x00000040l + +/* + * The primary surface contains color controls (gamma, etc.) + */ +#define DDCAPS2_COLORCONTROLPRIMARY 0x00000080l + +/* + * RGBZ -> RGB supported for 16:16 RGB:Z + */ +#define DDCAPS2_CANDROPZ16BIT 0x00000100l + +/* + * Driver supports non-local video memory. + */ +#define DDCAPS2_NONLOCALVIDMEM 0x00000200l + +/* + * Dirver supports non-local video memory but has different capabilities for + * non-local video memory surfaces. If this bit is set then so must + * DDCAPS2_NONLOCALVIDMEM. + */ +#define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400l + +/* + * Driver neither requires nor prefers surfaces to be pagelocked when performing + * blts involving system memory surfaces + */ +#define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800l + +/* + * Driver can create surfaces which are wider than the primary surface + */ +#define DDCAPS2_WIDESURFACES 0x00001000l + +/* + * Driver supports bob without using a video port by handling the + * DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip. + */ +#define DDCAPS2_CANFLIPODDEVEN 0x00002000l + +/* + * Driver supports bob using hardware + */ +#define DDCAPS2_CANBOBHARDWARE 0x00004000l + +/* + * Driver supports bltting any FOURCC surface to another surface of the same FOURCC + */ +#define DDCAPS2_COPYFOURCC 0x00008000l + + +/* + * Driver supports loadable gamma ramps for the primary surface + */ +#define DDCAPS2_PRIMARYGAMMA 0x00020000l + +/* + * Driver can render in windowed mode. + */ +#define DDCAPS2_CANRENDERWINDOWED 0x00080000l + +/* + * A calibrator is available to adjust the gamma ramp according to the + * physical display properties so that the result will be identical on + * all calibrated systems. + */ +#define DDCAPS2_CANCALIBRATEGAMMA 0x00100000l + +/* + * Indicates that the driver will respond to DDFLIP_INTERVALn flags + */ +#define DDCAPS2_FLIPINTERVAL 0x00200000l + +/* + * Indicates that the driver will respond to DDFLIP_NOVSYNC + */ +#define DDCAPS2_FLIPNOVSYNC 0x00400000l + +/* + * Driver supports management of video memory, if this flag is ON, + * driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on + * DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on + */ +#define DDCAPS2_CANMANAGETEXTURE 0x00800000l + +/* + * The Direct3D texture manager uses this cap to decide whether to put managed + * surfaces in non-local video memory. If the cap is set, the texture manager will + * put managed surfaces in non-local vidmem. Drivers that cannot texture from + * local vidmem SHOULD NOT set this cap. + */ +#define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000l + +/* + * Indicates that the driver supports DX7 type of stereo in at least one mode (which may + * not necessarily be the current mode). Applications should use IDirectDraw7 (or higher) + * ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of + * DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application + * can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode. + */ +#define DDCAPS2_STEREO 0x02000000L + +/* + * This caps bit is intended for internal DirectDraw use. + * -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set. + * -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and + * all the assoicated system memory blt caps must be correct). + * -It implies that the system->video blt caps in DDCAPS also apply to system to + * nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops + * members of DDCAPS (DDCORECAPS) are filled in correctly. + * -Any blt from system to nonlocal memory that matches these caps bits will + * be passed to the driver. + * + * NOTE: This is intended to enable the driver itself to do efficient reordering + * of textures. This is NOT meant to imply that hardware can write into AGP memory. + * This operation is not currently supported. + */ +#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000L + +/* + * was DDCAPS2_PUREHAL + */ +#define DDCAPS2_RESERVED1 0x08000000L + +/* + * Driver supports management of video memory, if this flag is ON, + * driver manages the resource if requested with DDSCAPS2_TEXTUREMANAGE on + * DirectX manages the resource if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on + */ +#define DDCAPS2_CANMANAGERESOURCE 0x10000000L + +/* + * Driver supports dynamic textures. This will allow the application to set + * D3DUSAGE_DYNAMIC (DDSCAPS2_HINTDYNAMIC for drivers) at texture create time. + * Video memory dynamic textures WILL be lockable by applications. It is + * expected that these locks will be very efficient (which implies that the + * driver should always maintain a linear copy, a pointer to which can be + * quickly handed out to the application). + */ +#define DDCAPS2_DYNAMICTEXTURES 0x20000000L + +/* + * Driver supports auto-generation of mipmaps. + */ +#define DDCAPS2_CANAUTOGENMIPMAP 0x40000000L + + +/**************************************************************************** + * + * DIRECTDRAW FX ALPHA CAPABILITY FLAGS + * + ****************************************************************************/ + +/* + * Supports alpha blending around the edge of a source color keyed surface. + * For Blt. + */ +#define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001l + +/* + * Supports alpha information in the pixel format. The bit depth of alpha + * information in the pixel format can be 1,2,4, or 8. The alpha value becomes + * more opaque as the alpha value increases. (0 is transparent.) + * For Blt. + */ +#define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002l + +/* + * Supports alpha information in the pixel format. The bit depth of alpha + * information in the pixel format can be 1,2,4, or 8. The alpha value + * becomes more transparent as the alpha value increases. (0 is opaque.) + * This flag can only be set if DDCAPS_ALPHA is set. + * For Blt. + */ +#define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004l + +/* + * Supports alpha only surfaces. The bit depth of an alpha only surface can be + * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. + * (0 is transparent.) + * For Blt. + */ +#define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008l + +/* + * The depth of the alpha channel data can range can be 1,2,4, or 8. + * The NEG suffix indicates that this alpha channel becomes more transparent + * as the alpha value increases. (0 is opaque.) This flag can only be set if + * DDCAPS_ALPHA is set. + * For Blt. + */ +#define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010l + +/* + * Supports alpha blending around the edge of a source color keyed surface. + * For Overlays. + */ +#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020l + +/* + * Supports alpha information in the pixel format. The bit depth of alpha + * information in the pixel format can be 1,2,4, or 8. The alpha value becomes + * more opaque as the alpha value increases. (0 is transparent.) + * For Overlays. + */ +#define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040l + +/* + * Supports alpha information in the pixel format. The bit depth of alpha + * information in the pixel format can be 1,2,4, or 8. The alpha value + * becomes more transparent as the alpha value increases. (0 is opaque.) + * This flag can only be set if DDCAPS_ALPHA is set. + * For Overlays. + */ +#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080l + +/* + * Supports alpha only surfaces. The bit depth of an alpha only surface can be + * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. + * (0 is transparent.) + * For Overlays. + */ +#define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100l + +/* + * The depth of the alpha channel data can range can be 1,2,4, or 8. + * The NEG suffix indicates that this alpha channel becomes more transparent + * as the alpha value increases. (0 is opaque.) This flag can only be set if + * DDCAPS_ALPHA is set. + * For Overlays. + */ +#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200l + +#if DIRECTDRAW_VERSION < 0x0600 +#endif //DIRECTDRAW_VERSION + + +/**************************************************************************** + * + * DIRECTDRAW FX CAPABILITY FLAGS + * + ****************************************************************************/ + +/* + * Uses arithmetic operations to stretch and shrink surfaces during blt + * rather than pixel doubling techniques. Along the Y axis. + */ +#define DDFXCAPS_BLTARITHSTRETCHY 0x00000020l + +/* + * Uses arithmetic operations to stretch during blt + * rather than pixel doubling techniques. Along the Y axis. Only + * works for x1, x2, etc. + */ +#define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010l + +/* + * Supports mirroring left to right in blt. + */ +#define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040l + +/* + * Supports mirroring top to bottom in blt. + */ +#define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080l + +/* + * Supports arbitrary rotation for blts. + */ +#define DDFXCAPS_BLTROTATION 0x00000100l + +/* + * Supports 90 degree rotations for blts. + */ +#define DDFXCAPS_BLTROTATION90 0x00000200l + +/* + * DirectDraw supports arbitrary shrinking of a surface along the + * x axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSHRINKX 0x00000400l + +/* + * DirectDraw supports integer shrinking (1x,2x,) of a surface + * along the x axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSHRINKXN 0x00000800l + +/* + * DirectDraw supports arbitrary shrinking of a surface along the + * y axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSHRINKY 0x00001000l + +/* + * DirectDraw supports integer shrinking (1x,2x,) of a surface + * along the y axis (vertical direction) for blts. + */ +#define DDFXCAPS_BLTSHRINKYN 0x00002000l + +/* + * DirectDraw supports arbitrary stretching of a surface along the + * x axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSTRETCHX 0x00004000l + +/* + * DirectDraw supports integer stretching (1x,2x,) of a surface + * along the x axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSTRETCHXN 0x00008000l + +/* + * DirectDraw supports arbitrary stretching of a surface along the + * y axis (horizontal direction) for blts. + */ +#define DDFXCAPS_BLTSTRETCHY 0x00010000l + +/* + * DirectDraw supports integer stretching (1x,2x,) of a surface + * along the y axis (vertical direction) for blts. + */ +#define DDFXCAPS_BLTSTRETCHYN 0x00020000l + +/* + * Uses arithmetic operations to stretch and shrink surfaces during + * overlay rather than pixel doubling techniques. Along the Y axis + * for overlays. + */ +#define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000l + +/* + * Uses arithmetic operations to stretch surfaces during + * overlay rather than pixel doubling techniques. Along the Y axis + * for overlays. Only works for x1, x2, etc. + */ +#define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008l + +/* + * DirectDraw supports arbitrary shrinking of a surface along the + * x axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSHRINKX 0x00080000l + +/* + * DirectDraw supports integer shrinking (1x,2x,) of a surface + * along the x axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSHRINKXN 0x00100000l + +/* + * DirectDraw supports arbitrary shrinking of a surface along the + * y axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSHRINKY 0x00200000l + +/* + * DirectDraw supports integer shrinking (1x,2x,) of a surface + * along the y axis (vertical direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSHRINKYN 0x00400000l + +/* + * DirectDraw supports arbitrary stretching of a surface along the + * x axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSTRETCHX 0x00800000l + +/* + * DirectDraw supports integer stretching (1x,2x,) of a surface + * along the x axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000l + +/* + * DirectDraw supports arbitrary stretching of a surface along the + * y axis (horizontal direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSTRETCHY 0x02000000l + +/* + * DirectDraw supports integer stretching (1x,2x,) of a surface + * along the y axis (vertical direction) for overlays. + */ +#define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000l + +/* + * DirectDraw supports mirroring of overlays across the vertical axis + */ +#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000l + +/* + * DirectDraw supports mirroring of overlays across the horizontal axis + */ +#define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000l + +/* + * DirectDraw supports deinterlacing of overlay surfaces + */ +#define DDFXCAPS_OVERLAYDEINTERLACE 0x20000000l + +/* + * Driver can do alpha blending for blits. + */ +#define DDFXCAPS_BLTALPHA 0x00000001l + + +/* + * Driver can do surface-reconstruction filtering for warped blits. + */ +#define DDFXCAPS_BLTFILTER DDFXCAPS_BLTARITHSTRETCHY + +/* + * Driver can do alpha blending for overlays. + */ +#define DDFXCAPS_OVERLAYALPHA 0x00000004l + + +/* + * Driver can do surface-reconstruction filtering for warped overlays. + */ +#define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY + +/**************************************************************************** + * + * DIRECTDRAW STEREO VIEW CAPABILITIES + * + ****************************************************************************/ + +/* + * This flag used to be DDSVCAPS_ENIGMA, which is now obsolete + */ + +#define DDSVCAPS_RESERVED1 0x00000001l + +/* + * This flag used to be DDSVCAPS_FLICKER, which is now obsolete + */ +#define DDSVCAPS_RESERVED2 0x00000002l + +/* + * This flag used to be DDSVCAPS_REDBLUE, which is now obsolete + */ +#define DDSVCAPS_RESERVED3 0x00000004l + +/* + * This flag used to be DDSVCAPS_SPLIT, which is now obsolete + */ +#define DDSVCAPS_RESERVED4 0x00000008l + +/* + * The stereo view is accomplished with switching technology + */ + +#define DDSVCAPS_STEREOSEQUENTIAL 0x00000010L + + + +/**************************************************************************** + * + * DIRECTDRAWPALETTE CAPABILITIES + * + ****************************************************************************/ + +/* + * Index is 4 bits. There are sixteen color entries in the palette table. + */ +#define DDPCAPS_4BIT 0x00000001l + +/* + * Index is onto a 8 bit color index. This field is only valid with the + * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target + * surface is in 8bpp. Each color entry is one byte long and is an index + * into destination surface's 8bpp palette. + */ +#define DDPCAPS_8BITENTRIES 0x00000002l + +/* + * Index is 8 bits. There are 256 color entries in the palette table. + */ +#define DDPCAPS_8BIT 0x00000004l + +/* + * Indicates that this DIRECTDRAWPALETTE should use the palette color array + * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE + * object. + * This flag is obsolete. DirectDraw always initializes the color array from + * the lpDDColorArray parameter. The definition remains for source-level + * compatibility. + */ +#define DDPCAPS_INITIALIZE 0x00000000l + +/* + * This palette is the one attached to the primary surface. Changing this + * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified + * and supported. + */ +#define DDPCAPS_PRIMARYSURFACE 0x00000010l + +/* + * This palette is the one attached to the primary surface left. Changing + * this table has immediate effect on the display for the left eye unless + * DDPSETPAL_VSYNC is specified and supported. + */ +#define DDPCAPS_PRIMARYSURFACELEFT 0x00000020l + +/* + * This palette can have all 256 entries defined + */ +#define DDPCAPS_ALLOW256 0x00000040l + +/* + * This palette can have modifications to it synced with the monitors + * refresh rate. + */ +#define DDPCAPS_VSYNC 0x00000080l + +/* + * Index is 1 bit. There are two color entries in the palette table. + */ +#define DDPCAPS_1BIT 0x00000100l + +/* + * Index is 2 bit. There are four color entries in the palette table. + */ +#define DDPCAPS_2BIT 0x00000200l + +/* + * The peFlags member of PALETTEENTRY denotes an 8 bit alpha value + */ +#define DDPCAPS_ALPHA 0x00000400l + + +/**************************************************************************** + * + * DIRECTDRAWPALETTE SETENTRY CONSTANTS + * + ****************************************************************************/ + + +/**************************************************************************** + * + * DIRECTDRAWPALETTE GETENTRY CONSTANTS + * + ****************************************************************************/ + +/* 0 is the only legal value */ + +/**************************************************************************** + * + * DIRECTDRAWSURFACE SETPRIVATEDATA CONSTANTS + * + ****************************************************************************/ + +/* + * The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData + * must be set to sizeof(IUnknown*). DirectDraw will call AddRef through this + * pointer and Release when the private data is destroyed. This includes when + * the surface or palette is destroyed before such priovate data is destroyed. + */ +#define DDSPD_IUNKNOWNPOINTER 0x00000001L + +/* + * Private data is only valid for the current state of the object, + * as determined by the uniqueness value. + */ +#define DDSPD_VOLATILE 0x00000002L + + +/**************************************************************************** + * + * DIRECTDRAWSURFACE SETPALETTE CONSTANTS + * + ****************************************************************************/ + + +/**************************************************************************** + * + * DIRECTDRAW BITDEPTH CONSTANTS + * + * NOTE: These are only used to indicate supported bit depths. These + * are flags only, they are not to be used as an actual bit depth. The + * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual + * bit depths in a surface or for changing the display mode. + * + ****************************************************************************/ + +/* + * 1 bit per pixel. + */ +#define DDBD_1 0x00004000l + +/* + * 2 bits per pixel. + */ +#define DDBD_2 0x00002000l + +/* + * 4 bits per pixel. + */ +#define DDBD_4 0x00001000l + +/* + * 8 bits per pixel. + */ +#define DDBD_8 0x00000800l + +/* + * 16 bits per pixel. + */ +#define DDBD_16 0x00000400l + +/* + * 24 bits per pixel. + */ +#define DDBD_24 0X00000200l + +/* + * 32 bits per pixel. + */ +#define DDBD_32 0x00000100l + +/**************************************************************************** + * + * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS + * + ****************************************************************************/ + +/* + * Set if the structure contains a color space. Not set if the structure + * contains a single color key. + */ +#define DDCKEY_COLORSPACE 0x00000001l + +/* + * Set if the structure specifies a color key or color space which is to be + * used as a destination color key for blt operations. + */ +#define DDCKEY_DESTBLT 0x00000002l + +/* + * Set if the structure specifies a color key or color space which is to be + * used as a destination color key for overlay operations. + */ +#define DDCKEY_DESTOVERLAY 0x00000004l + +/* + * Set if the structure specifies a color key or color space which is to be + * used as a source color key for blt operations. + */ +#define DDCKEY_SRCBLT 0x00000008l + +/* + * Set if the structure specifies a color key or color space which is to be + * used as a source color key for overlay operations. + */ +#define DDCKEY_SRCOVERLAY 0x00000010l + + +/**************************************************************************** + * + * DIRECTDRAW COLOR KEY CAPABILITY FLAGS + * + ****************************************************************************/ + +/* + * Supports transparent blting using a color key to identify the replaceable + * bits of the destination surface for RGB colors. + */ +#define DDCKEYCAPS_DESTBLT 0x00000001l + +/* + * Supports transparent blting using a color space to identify the replaceable + * bits of the destination surface for RGB colors. + */ +#define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002l + +/* + * Supports transparent blting using a color space to identify the replaceable + * bits of the destination surface for YUV colors. + */ +#define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004l + +/* + * Supports transparent blting using a color key to identify the replaceable + * bits of the destination surface for YUV colors. + */ +#define DDCKEYCAPS_DESTBLTYUV 0x00000008l + +/* + * Supports overlaying using colorkeying of the replaceable bits of the surface + * being overlayed for RGB colors. + */ +#define DDCKEYCAPS_DESTOVERLAY 0x00000010l + +/* + * Supports a color space as the color key for the destination for RGB colors. + */ +#define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020l + +/* + * Supports a color space as the color key for the destination for YUV colors. + */ +#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040l + +/* + * Supports only one active destination color key value for visible overlay + * surfaces. + */ +#define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080l + +/* + * Supports overlaying using colorkeying of the replaceable bits of the + * surface being overlayed for YUV colors. + */ +#define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100l + +/* + * Supports transparent blting using the color key for the source with + * this surface for RGB colors. + */ +#define DDCKEYCAPS_SRCBLT 0x00000200l + +/* + * Supports transparent blting using a color space for the source with + * this surface for RGB colors. + */ +#define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400l + +/* + * Supports transparent blting using a color space for the source with + * this surface for YUV colors. + */ +#define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800l + +/* + * Supports transparent blting using the color key for the source with + * this surface for YUV colors. + */ +#define DDCKEYCAPS_SRCBLTYUV 0x00001000l + +/* + * Supports overlays using the color key for the source with this + * overlay surface for RGB colors. + */ +#define DDCKEYCAPS_SRCOVERLAY 0x00002000l + +/* + * Supports overlays using a color space as the source color key for + * the overlay surface for RGB colors. + */ +#define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000l + +/* + * Supports overlays using a color space as the source color key for + * the overlay surface for YUV colors. + */ +#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000l + +/* + * Supports only one active source color key value for visible + * overlay surfaces. + */ +#define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000l + +/* + * Supports overlays using the color key for the source with this + * overlay surface for YUV colors. + */ +#define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000l + +/* + * there are no bandwidth trade-offs for using colorkey with an overlay + */ +#define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000l + + +/**************************************************************************** + * + * DIRECTDRAW PIXELFORMAT FLAGS + * + ****************************************************************************/ + +/* + * The surface has alpha channel information in the pixel format. + */ +#define DDPF_ALPHAPIXELS 0x00000001l + +/* + * The pixel format contains alpha only information + */ +#define DDPF_ALPHA 0x00000002l + +/* + * The FourCC code is valid. + */ +#define DDPF_FOURCC 0x00000004l + +/* + * The surface is 4-bit color indexed. + */ +#define DDPF_PALETTEINDEXED4 0x00000008l + +/* + * The surface is indexed into a palette which stores indices + * into the destination surface's 8-bit palette. + */ +#define DDPF_PALETTEINDEXEDTO8 0x00000010l + +/* + * The surface is 8-bit color indexed. + */ +#define DDPF_PALETTEINDEXED8 0x00000020l + +/* + * The RGB data in the pixel format structure is valid. + */ +#define DDPF_RGB 0x00000040l + +/* + * The surface will accept pixel data in the format specified + * and compress it during the write. + */ +#define DDPF_COMPRESSED 0x00000080l + +/* + * The surface will accept RGB data and translate it during + * the write to YUV data. The format of the data to be written + * will be contained in the pixel format structure. The DDPF_RGB + * flag will be set. + */ +#define DDPF_RGBTOYUV 0x00000100l + +/* + * pixel format is YUV - YUV data in pixel format struct is valid + */ +#define DDPF_YUV 0x00000200l + +/* + * pixel format is a z buffer only surface + */ +#define DDPF_ZBUFFER 0x00000400l + +/* + * The surface is 1-bit color indexed. + */ +#define DDPF_PALETTEINDEXED1 0x00000800l + +/* + * The surface is 2-bit color indexed. + */ +#define DDPF_PALETTEINDEXED2 0x00001000l + +/* + * The surface contains Z information in the pixels + */ +#define DDPF_ZPIXELS 0x00002000l + +/* + * The surface contains stencil information along with Z + */ +#define DDPF_STENCILBUFFER 0x00004000l + +/* + * Premultiplied alpha format -- the color components have been + * premultiplied by the alpha component. + */ +#define DDPF_ALPHAPREMULT 0x00008000l + + +/* + * Luminance data in the pixel format is valid. + * Use this flag for luminance-only or luminance+alpha surfaces, + * the bit depth is then ddpf.dwLuminanceBitCount. + */ +#define DDPF_LUMINANCE 0x00020000l + +/* + * Luminance data in the pixel format is valid. + * Use this flag when hanging luminance off bumpmap surfaces, + * the bit mask for the luminance portion of the pixel is then + * ddpf.dwBumpLuminanceBitMask + */ +#define DDPF_BUMPLUMINANCE 0x00040000l + +/* + * Bump map dUdV data in the pixel format is valid. + */ +#define DDPF_BUMPDUDV 0x00080000l + + +/*=========================================================================== + * + * + * DIRECTDRAW CALLBACK FLAGS + * + * + *==========================================================================*/ + +/**************************************************************************** + * + * DIRECTDRAW ENUMSURFACES FLAGS + * + ****************************************************************************/ + +/* + * Enumerate all of the surfaces that meet the search criterion. + */ +#define DDENUMSURFACES_ALL 0x00000001l + +/* + * A search hit is a surface that matches the surface description. + */ +#define DDENUMSURFACES_MATCH 0x00000002l + +/* + * A search hit is a surface that does not match the surface description. + */ +#define DDENUMSURFACES_NOMATCH 0x00000004l + +/* + * Enumerate the first surface that can be created which meets the search criterion. + */ +#define DDENUMSURFACES_CANBECREATED 0x00000008l + +/* + * Enumerate the surfaces that already exist that meet the search criterion. + */ +#define DDENUMSURFACES_DOESEXIST 0x00000010l + + +/**************************************************************************** + * + * DIRECTDRAW SETDISPLAYMODE FLAGS + * + ****************************************************************************/ + +/* + * The desired mode is a standard VGA mode + */ +#define DDSDM_STANDARDVGAMODE 0x00000001l + + +/**************************************************************************** + * + * DIRECTDRAW ENUMDISPLAYMODES FLAGS + * + ****************************************************************************/ + +/* + * Enumerate Modes with different refresh rates. EnumDisplayModes guarantees + * that a particular mode will be enumerated only once. This flag specifies whether + * the refresh rate is taken into account when determining if a mode is unique. + */ +#define DDEDM_REFRESHRATES 0x00000001l + +/* + * Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA + * modes such as mode 0x13 in addition to the usual ModeX modes (which are always + * enumerated if the application has previously called SetCooperativeLevel with the + * DDSCL_ALLOWMODEX flag set). + */ +#define DDEDM_STANDARDVGAMODES 0x00000002L + + +/**************************************************************************** + * + * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS + * + ****************************************************************************/ + +/* + * Exclusive mode owner will be responsible for the entire primary surface. + * GDI can be ignored. used with DD + */ +#define DDSCL_FULLSCREEN 0x00000001l + +/* + * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode + */ +#define DDSCL_ALLOWREBOOT 0x00000002l + +/* + * prevents DDRAW from modifying the application window. + * prevents DDRAW from minimize/restore the application window on activation. + */ +#define DDSCL_NOWINDOWCHANGES 0x00000004l + +/* + * app wants to work as a regular Windows application + */ +#define DDSCL_NORMAL 0x00000008l + +/* + * app wants exclusive access + */ +#define DDSCL_EXCLUSIVE 0x00000010l + + +/* + * app can deal with non-windows display modes + */ +#define DDSCL_ALLOWMODEX 0x00000040l + +/* + * this window will receive the focus messages + */ +#define DDSCL_SETFOCUSWINDOW 0x00000080l + +/* + * this window is associated with the DDRAW object and will + * cover the screen in fullscreen mode + */ +#define DDSCL_SETDEVICEWINDOW 0x00000100l + +/* + * app wants DDRAW to create a window to be associated with the + * DDRAW object + */ +#define DDSCL_CREATEDEVICEWINDOW 0x00000200l + +/* + * App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D + * take the global crtisec more frequently. + */ +#define DDSCL_MULTITHREADED 0x00000400l + +/* + * App specifies that it would like to keep the FPU set up for optimal Direct3D + * performance (single precision and exceptions disabled) so Direct3D + * does not need to explicitly set the FPU each time. This is assumed by + * default in DirectX 7. See also DDSCL_FPUPRESERVE + */ +#define DDSCL_FPUSETUP 0x00000800l + +/* + * App specifies that it needs either double precision FPU or FPU exceptions + * enabled. This makes Direct3D explicitly set the FPU state eah time it is + * called. Setting the flag will reduce Direct3D performance. The flag is + * assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP + */ +#define DDSCL_FPUPRESERVE 0x00001000l + + +/**************************************************************************** + * + * DIRECTDRAW BLT FLAGS + * + ****************************************************************************/ + +/* + * Use the alpha information in the pixel format or the alpha channel surface + * attached to the destination surface as the alpha channel for this blt. + */ +#define DDBLT_ALPHADEST 0x00000001l + +/* + * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel + * for the destination surface for this blt. + */ +#define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002l + +/* + * The NEG suffix indicates that the destination surface becomes more + * transparent as the alpha value increases. (0 is opaque) + */ +#define DDBLT_ALPHADESTNEG 0x00000004l + +/* + * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha + * channel for the destination for this blt. + */ +#define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008l + +/* + * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel + * for the edges of the image that border the color key colors. + */ +#define DDBLT_ALPHAEDGEBLEND 0x00000010l + +/* + * Use the alpha information in the pixel format or the alpha channel surface + * attached to the source surface as the alpha channel for this blt. + */ +#define DDBLT_ALPHASRC 0x00000020l + +/* + * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel + * for the source for this blt. + */ +#define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040l + +/* + * The NEG suffix indicates that the source surface becomes more transparent + * as the alpha value increases. (0 is opaque) + */ +#define DDBLT_ALPHASRCNEG 0x00000080l + +/* + * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel + * for the source for this blt. + */ +#define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100l + +/* + * Do this blt asynchronously through the FIFO in the order received. If + * there is no room in the hardware FIFO fail the call. + */ +#define DDBLT_ASYNC 0x00000200l + +/* + * Uses the dwFillColor field in the DDBLTFX structure as the RGB color + * to fill the destination rectangle on the destination surface with. + */ +#define DDBLT_COLORFILL 0x00000400l + +/* + * Uses the dwDDFX field in the DDBLTFX structure to specify the effects + * to use for the blt. + */ +#define DDBLT_DDFX 0x00000800l + +/* + * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS + * that are not part of the Win32 API. + */ +#define DDBLT_DDROPS 0x00001000l + +/* + * Use the color key associated with the destination surface. + */ +#define DDBLT_KEYDEST 0x00002000l + +/* + * Use the dckDestColorkey field in the DDBLTFX structure as the color key + * for the destination surface. + */ +#define DDBLT_KEYDESTOVERRIDE 0x00004000l + +/* + * Use the color key associated with the source surface. + */ +#define DDBLT_KEYSRC 0x00008000l + +/* + * Use the dckSrcColorkey field in the DDBLTFX structure as the color key + * for the source surface. + */ +#define DDBLT_KEYSRCOVERRIDE 0x00010000l + +/* + * Use the dwROP field in the DDBLTFX structure for the raster operation + * for this blt. These ROPs are the same as the ones defined in the Win32 API. + */ +#define DDBLT_ROP 0x00020000l + +/* + * Use the dwRotationAngle field in the DDBLTFX structure as the angle + * (specified in 1/100th of a degree) to rotate the surface. + */ +#define DDBLT_ROTATIONANGLE 0x00040000l + +/* + * Z-buffered blt using the z-buffers attached to the source and destination + * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the + * z-buffer opcode. + */ +#define DDBLT_ZBUFFER 0x00080000l + +/* + * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field + * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively + * for the destination. + */ +#define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000l + +/* + * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode + * field in the DDBLTFX structure as the z-buffer and z-buffer opcode + * respectively for the destination. + */ +#define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000l + +/* + * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field + * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively + * for the source. + */ +#define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000l + +/* + * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode + * field in the DDBLTFX structure as the z-buffer and z-buffer opcode + * respectively for the source. + */ +#define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000l + +/* + * wait until the device is ready to handle the blt + * this will cause blt to not return DDERR_WASSTILLDRAWING + */ +#define DDBLT_WAIT 0x01000000l + +/* + * Uses the dwFillDepth field in the DDBLTFX structure as the depth value + * to fill the destination rectangle on the destination Z-buffer surface + * with. + */ +#define DDBLT_DEPTHFILL 0x02000000l + + +/* + * Return immediately (with DDERR_WASSTILLDRAWING) if the device is not + * ready to schedule the blt at the time Blt() is called. + */ +#define DDBLT_DONOTWAIT 0x08000000l + +/* + * These flags indicate a presentation blt (i.e. a blt + * that moves surface contents from an offscreen back buffer to the primary + * surface). The driver is not allowed to "queue" more than three such blts. + * The "end" of the presentation blt is indicated, since the + * blt may be clipped, in which case the runtime will call the driver with + * several blts. All blts (even if not clipped) are tagged with DDBLT_PRESENTATION + * and the last (even if not clipped) additionally with DDBLT_LAST_PRESENTATION. + * Thus the true rule is that the driver must not schedule a DDBLT_PRESENTATION + * blt if there are 3 or more DDBLT_PRESENTLAST blts in the hardware pipe. + * If there are such blts in the pipe, the driver should return DDERR_WASSTILLDRAWING + * until the oldest queued DDBLT_LAST_PRESENTATION blts has been retired (i.e. the + * pixels have been actually written to the primary surface). Once the oldest blt + * has been retired, the driver is free to schedule the current blt. + * The goal is to provide a mechanism whereby the device's hardware queue never + * gets more than 3 frames ahead of the frames being generated by the application. + * When excessive queueing occurs, applications become unusable because the application + * visibly lags user input, and such problems make windowed interactive applications impossible. + * Some drivers may not have sufficient knowledge of their hardware's FIFO to know + * when a certain blt has been retired. Such drivers should code cautiously, and + * simply not allow any frames to be queued at all. DDBLT_LAST_PRESENTATION should cause + * such drivers to return DDERR_WASSTILLDRAWING until the accelerator is completely + * finished- exactly as if the application had called Lock on the source surface + * before calling Blt. + * In other words, the driver is allowed and encouraged to + * generate as much latency as it can, but never more than 3 frames worth. + * Implementation detail: Drivers should count blts against the SOURCE surface, not + * against the primary surface. This enables multiple parallel windowed application + * to function more optimally. + * This flag is passed only to DX8 or higher drivers. + * + * APPLICATIONS DO NOT SET THESE FLAGS. THEY ARE SET BY THE DIRECTDRAW RUNTIME. + * + */ +#define DDBLT_PRESENTATION 0x10000000l +#define DDBLT_LAST_PRESENTATION 0x20000000l + +/* + * If DDBLT_EXTENDED_FLAGS is set, then the driver should re-interpret + * other flags according to the definitions that follow. + * For example, bit 0 (0x00000001L) means DDBLT_ALPHADEST, unless + * DDBLT_EXTENDED_FLAGS is also set, in which case bit 0 means + * DDBLT_EXTENDED_LINEAR_CONTENT. + * Only DirectX9 and higher drivers will be given extended blt flags. + * Only flags explicitly mentioned here should be re-interpreted. + * All other flags retain their original meanings. + * + * List of re-interpreted flags: + * + * Bit Hex value New meaning old meaning + * --------------------------------------------------------------- + * 2 0x00000004 DDBLT_EXTENDED_LINEAR_CONTENT DDBLT_ALPHADESTNEG + * 4 0x00000010 DDBLT_EXTENDED_PRESENTATION_STRETCHFACTOR DDBLT_ALPHAEDGEBLEND + * + * + * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED + * FOR USE BY THE DIRECT3D RUNTIME. + */ +#define DDBLT_EXTENDED_FLAGS 0x40000000l + +/* + * EXTENDED FLAG. SEE DEFINITION OF DDBLT_EXTENDED_FLAGS. + * This flag indidcates that the source surface contains content in a + * linear color space. The driver may perform gamma correction to the + * desktop color space (i.e. sRGB, gamma 2.2) as part of this blt. + * If the device can perform such a conversion as part of the copy, + * the driver should also set D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION + * + * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED + * FOR USE BY THE DIRECT3D RUNTIME. Use IDirect3DSwapChain9::Present + * and specify D3DPRESENT_LINEAR_CONTENT in order to use this functionality. + */ +#define DDBLT_EXTENDED_LINEAR_CONTENT 0x00000004l + + +/**************************************************************************** + * + * BLTFAST FLAGS + * + ****************************************************************************/ + +#define DDBLTFAST_NOCOLORKEY 0x00000000 +#define DDBLTFAST_SRCCOLORKEY 0x00000001 +#define DDBLTFAST_DESTCOLORKEY 0x00000002 +#define DDBLTFAST_WAIT 0x00000010 +#define DDBLTFAST_DONOTWAIT 0x00000020 + +/**************************************************************************** + * + * FLIP FLAGS + * + ****************************************************************************/ + +#define DDFLIP_WAIT 0x00000001L + +/* + * Indicates that the target surface contains the even field of video data. + * This flag is only valid with an overlay surface. + */ +#define DDFLIP_EVEN 0x00000002L + +/* + * Indicates that the target surface contains the odd field of video data. + * This flag is only valid with an overlay surface. + */ +#define DDFLIP_ODD 0x00000004L + +/* + * Causes DirectDraw to perform the physical flip immediately and return + * to the application. Typically, what was the front buffer but is now the back + * buffer will still be visible (depending on timing) until the next vertical + * retrace. Subsequent operations involving the two flipped surfaces will + * not check to see if the physical flip has finished (i.e. will not return + * DDERR_WASSTILLDRAWING for that reason (but may for other reasons)). + * This allows an application to perform Flips at a higher frequency than the + * monitor refresh rate, but may introduce visible artifacts. + * Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set, + * DDFLIP_NOVSYNC has no effect. + */ +#define DDFLIP_NOVSYNC 0x00000008L + + +/* + * Flip Interval Flags. These flags indicate how many vertical retraces to wait between + * each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each + * surface involved in the flip until the specified number of vertical retraces has + * ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set, + * DDFLIP_INTERVALn has no effect. + */ + +/* + * DirectDraw will flip on every other vertical sync + */ +#define DDFLIP_INTERVAL2 0x02000000L + + +/* + * DirectDraw will flip on every third vertical sync + */ +#define DDFLIP_INTERVAL3 0x03000000L + + +/* + * DirectDraw will flip on every fourth vertical sync + */ +#define DDFLIP_INTERVAL4 0x04000000L + +/* + * DirectDraw will flip and display a main stereo surface + */ +#define DDFLIP_STEREO 0x00000010L + +/* + * On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish + * to override the default and use time when the accelerator is busy (as denoted by + * the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT. + */ +#define DDFLIP_DONOTWAIT 0x00000020L + + +/**************************************************************************** + * + * DIRECTDRAW SURFACE OVERLAY FLAGS + * + ****************************************************************************/ + +/* + * Use the alpha information in the pixel format or the alpha channel surface + * attached to the destination surface as the alpha channel for the + * destination overlay. + */ +#define DDOVER_ALPHADEST 0x00000001l + +/* + * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the + * destination alpha channel for this overlay. + */ +#define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002l + +/* + * The NEG suffix indicates that the destination surface becomes more + * transparent as the alpha value increases. + */ +#define DDOVER_ALPHADESTNEG 0x00000004l + +/* + * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha + * channel destination for this overlay. + */ +#define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008l + +/* + * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha + * channel for the edges of the image that border the color key colors. + */ +#define DDOVER_ALPHAEDGEBLEND 0x00000010l + +/* + * Use the alpha information in the pixel format or the alpha channel surface + * attached to the source surface as the source alpha channel for this overlay. + */ +#define DDOVER_ALPHASRC 0x00000020l + +/* + * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source + * alpha channel for this overlay. + */ +#define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040l + +/* + * The NEG suffix indicates that the source surface becomes more transparent + * as the alpha value increases. + */ +#define DDOVER_ALPHASRCNEG 0x00000080l + +/* + * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel + * source for this overlay. + */ +#define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100l + +/* + * Turn this overlay off. + */ +#define DDOVER_HIDE 0x00000200l + +/* + * Use the color key associated with the destination surface. + */ +#define DDOVER_KEYDEST 0x00000400l + +/* + * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key + * for the destination surface + */ +#define DDOVER_KEYDESTOVERRIDE 0x00000800l + +/* + * Use the color key associated with the source surface. + */ +#define DDOVER_KEYSRC 0x00001000l + +/* + * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key + * for the source surface. + */ +#define DDOVER_KEYSRCOVERRIDE 0x00002000l + +/* + * Turn this overlay on. + */ +#define DDOVER_SHOW 0x00004000l + +/* + * Add a dirty rect to an emulated overlayed surface. + */ +#define DDOVER_ADDDIRTYRECT 0x00008000l + +/* + * Redraw all dirty rects on an emulated overlayed surface. + */ +#define DDOVER_REFRESHDIRTYRECTS 0x00010000l + +/* + * Redraw the entire surface on an emulated overlayed surface. + */ +#define DDOVER_REFRESHALL 0x00020000l + + +/* + * Use the overlay FX flags to define special overlay FX + */ +#define DDOVER_DDFX 0x00080000l + +/* + * Autoflip the overlay when ever the video port autoflips + */ +#define DDOVER_AUTOFLIP 0x00100000l + +/* + * Display each field of video port data individually without + * causing any jittery artifacts + */ +#define DDOVER_BOB 0x00200000l + +/* + * Indicates that bob/weave decisions should not be overridden by other + * interfaces. + */ +#define DDOVER_OVERRIDEBOBWEAVE 0x00400000l + +/* + * Indicates that the surface memory is composed of interleaved fields. + */ +#define DDOVER_INTERLEAVED 0x00800000l + +/* + * Indicates that bob will be performed using hardware rather than + * software or emulated. + */ +#define DDOVER_BOBHARDWARE 0x01000000l + +/* + * Indicates that overlay FX structure contains valid ARGB scaling factors. + */ +#define DDOVER_ARGBSCALEFACTORS 0x02000000l + +/* + * Indicates that ARGB scaling factors can be degraded to fit driver capabilities. + */ +#define DDOVER_DEGRADEARGBSCALING 0x04000000l + + +/**************************************************************************** + * + * DIRECTDRAWSURFACE LOCK FLAGS + * + ****************************************************************************/ + +/* + * The default. Set to indicate that Lock should return a valid memory pointer + * to the top of the specified rectangle. If no rectangle is specified then a + * pointer to the top of the surface is returned. + */ +#define DDLOCK_SURFACEMEMORYPTR 0x00000000L // default + +/* + * Set to indicate that Lock should wait until it can obtain a valid memory + * pointer before returning. If this bit is set, Lock will never return + * DDERR_WASSTILLDRAWING. + */ +#define DDLOCK_WAIT 0x00000001L + +/* + * Set if an event handle is being passed to Lock. Lock will trigger the event + * when it can return the surface memory pointer requested. + */ +#define DDLOCK_EVENT 0x00000002L + +/* + * Indicates that the surface being locked will only be read from. + */ +#define DDLOCK_READONLY 0x00000010L + +/* + * Indicates that the surface being locked will only be written to + */ +#define DDLOCK_WRITEONLY 0x00000020L + + +/* + * Indicates that a system wide lock should not be taken when this surface + * is locked. This has several advantages (cursor responsiveness, ability + * to call more Windows functions, easier debugging) when locking video + * memory surfaces. However, an application specifying this flag must + * comply with a number of conditions documented in the help file. + * Furthermore, this flag cannot be specified when locking the primary. + */ +#define DDLOCK_NOSYSLOCK 0x00000800L + +/* + * Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices + * that were referred to in Draw*PrimtiveVB calls since the start of the + * frame (or the last lock without this flag) will be modified during the + * lock. This can be useful when one is only appending data to the vertex + * buffer + */ +#define DDLOCK_NOOVERWRITE 0x00001000L + +/* + * Indicates that no assumptions will be made about the contents of the + * surface or vertex buffer during this lock. + * This enables two things: + * - Direct3D or the driver may provide an alternative memory + * area as the vertex buffer. This is useful when one plans to clear the + * contents of the vertex buffer and fill in new data. + * - Drivers sometimes store surface data in a re-ordered format. + * When the application locks the surface, the driver is forced to un-re-order + * the surface data before allowing the application to see the surface contents. + * This flag is a hint to the driver that it can skip the un-re-ordering process + * since the application plans to overwrite every single pixel in the surface + * or locked rectangle (and so erase any un-re-ordered pixels anyway). + * Applications should always set this flag when they intend to overwrite the entire + * surface or locked rectangle. + */ +#define DDLOCK_DISCARDCONTENTS 0x00002000L + /* + * DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS + */ +#define DDLOCK_OKTOSWAP 0x00002000L + +/* + * On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish + * to override the default and use time when the accelerator is busy (as denoted by + * the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT. + */ +#define DDLOCK_DONOTWAIT 0x00004000L + +/* + * This indicates volume texture lock with front and back specified. + */ +#define DDLOCK_HASVOLUMETEXTUREBOXRECT 0x00008000L + +/* + * This indicates that the driver should not update dirty rect information for this lock. + */ +#define DDLOCK_NODIRTYUPDATE 0x00010000L + + +/**************************************************************************** + * + * DIRECTDRAWSURFACE PAGELOCK FLAGS + * + ****************************************************************************/ + +/* + * No flags defined at present + */ + + +/**************************************************************************** + * + * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS + * + ****************************************************************************/ + +/* + * No flags defined at present + */ + + +/**************************************************************************** + * + * DIRECTDRAWSURFACE BLT FX FLAGS + * + ****************************************************************************/ + +/* + * If stretching, use arithmetic stretching along the Y axis for this blt. + */ +#define DDBLTFX_ARITHSTRETCHY 0x00000001l + +/* + * Do this blt mirroring the surface left to right. Spin the + * surface around its y-axis. + */ +#define DDBLTFX_MIRRORLEFTRIGHT 0x00000002l + +/* + * Do this blt mirroring the surface up and down. Spin the surface + * around its x-axis. + */ +#define DDBLTFX_MIRRORUPDOWN 0x00000004l + +/* + * Schedule this blt to avoid tearing. + */ +#define DDBLTFX_NOTEARING 0x00000008l + +/* + * Do this blt rotating the surface one hundred and eighty degrees. + */ +#define DDBLTFX_ROTATE180 0x00000010l + +/* + * Do this blt rotating the surface two hundred and seventy degrees. + */ +#define DDBLTFX_ROTATE270 0x00000020l + +/* + * Do this blt rotating the surface ninety degrees. + */ +#define DDBLTFX_ROTATE90 0x00000040l + +/* + * Do this z blt using dwZBufferLow and dwZBufferHigh as range values + * specified to limit the bits copied from the source surface. + */ +#define DDBLTFX_ZBUFFERRANGE 0x00000080l + +/* + * Do this z blt adding the dwZBufferBaseDest to each of the sources z values + * before comparing it with the desting z values. + */ +#define DDBLTFX_ZBUFFERBASEDEST 0x00000100l + +/**************************************************************************** + * + * DIRECTDRAWSURFACE OVERLAY FX FLAGS + * + ****************************************************************************/ + +/* + * If stretching, use arithmetic stretching along the Y axis for this overlay. + */ +#define DDOVERFX_ARITHSTRETCHY 0x00000001l + +/* + * Mirror the overlay across the vertical axis + */ +#define DDOVERFX_MIRRORLEFTRIGHT 0x00000002l + +/* + * Mirror the overlay across the horizontal axis + */ +#define DDOVERFX_MIRRORUPDOWN 0x00000004l + +/* + * Deinterlace the overlay, if possible + */ +#define DDOVERFX_DEINTERLACE 0x00000008l + + +/**************************************************************************** + * + * DIRECTDRAW WAITFORVERTICALBLANK FLAGS + * + ****************************************************************************/ + +/* + * return when the vertical blank interval begins + */ +#define DDWAITVB_BLOCKBEGIN 0x00000001l + +/* + * set up an event to trigger when the vertical blank begins + */ +#define DDWAITVB_BLOCKBEGINEVENT 0x00000002l + +/* + * return when the vertical blank interval ends and display begins + */ +#define DDWAITVB_BLOCKEND 0x00000004l + +/**************************************************************************** + * + * DIRECTDRAW GETFLIPSTATUS FLAGS + * + ****************************************************************************/ + +/* + * is it OK to flip now? + */ +#define DDGFS_CANFLIP 0x00000001l + +/* + * is the last flip finished? + */ +#define DDGFS_ISFLIPDONE 0x00000002l + +/**************************************************************************** + * + * DIRECTDRAW GETBLTSTATUS FLAGS + * + ****************************************************************************/ + +/* + * is it OK to blt now? + */ +#define DDGBS_CANBLT 0x00000001l + +/* + * is the blt to the surface finished? + */ +#define DDGBS_ISBLTDONE 0x00000002l + + +/**************************************************************************** + * + * DIRECTDRAW ENUMOVERLAYZORDER FLAGS + * + ****************************************************************************/ + +/* + * Enumerate overlays back to front. + */ +#define DDENUMOVERLAYZ_BACKTOFRONT 0x00000000l + +/* + * Enumerate overlays front to back + */ +#define DDENUMOVERLAYZ_FRONTTOBACK 0x00000001l + +/**************************************************************************** + * + * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS + * + ****************************************************************************/ + +/* + * Send overlay to front + */ +#define DDOVERZ_SENDTOFRONT 0x00000000l + +/* + * Send overlay to back + */ +#define DDOVERZ_SENDTOBACK 0x00000001l + +/* + * Move Overlay forward + */ +#define DDOVERZ_MOVEFORWARD 0x00000002l + +/* + * Move Overlay backward + */ +#define DDOVERZ_MOVEBACKWARD 0x00000003l + +/* + * Move Overlay in front of relative surface + */ +#define DDOVERZ_INSERTINFRONTOF 0x00000004l + +/* + * Move Overlay in back of relative surface + */ +#define DDOVERZ_INSERTINBACKOF 0x00000005l + + +/**************************************************************************** + * + * DIRECTDRAW SETGAMMARAMP FLAGS + * + ****************************************************************************/ + +/* + * Request calibrator to adjust the gamma ramp according to the physical + * properties of the display so that the result should appear identical + * on all systems. + */ +#define DDSGR_CALIBRATE 0x00000001L + + +/**************************************************************************** + * + * DIRECTDRAW STARTMODETEST FLAGS + * + ****************************************************************************/ + +/* + * Indicates that the mode being tested has passed + */ +#define DDSMT_ISTESTREQUIRED 0x00000001L + + +/**************************************************************************** + * + * DIRECTDRAW EVALUATEMODE FLAGS + * + ****************************************************************************/ + +/* + * Indicates that the mode being tested has passed + */ +#define DDEM_MODEPASSED 0x00000001L + +/* + * Indicates that the mode being tested has failed + */ +#define DDEM_MODEFAILED 0x00000002L + + +/*=========================================================================== + * + * + * DIRECTDRAW RETURN CODES + * + * The return values from DirectDraw Commands and Surface that return an HRESULT + * are codes from DirectDraw concerning the results of the action + * requested by DirectDraw. + * + *==========================================================================*/ + +/* + * Status is OK + * + * Issued by: DirectDraw Commands and all callbacks + */ +#define DD_OK S_OK +#define DD_FALSE S_FALSE + +/**************************************************************************** + * + * DIRECTDRAW ENUMCALLBACK RETURN VALUES + * + * EnumCallback returns are used to control the flow of the DIRECTDRAW and + * DIRECTDRAWSURFACE object enumerations. They can only be returned by + * enumeration callback routines. + * + ****************************************************************************/ + +/* + * stop the enumeration + */ +#define DDENUMRET_CANCEL 0 + +/* + * continue the enumeration + */ +#define DDENUMRET_OK 1 + +/**************************************************************************** + * + * DIRECTDRAW ERRORS + * + * Errors are represented by negative values and cannot be combined. + * + ****************************************************************************/ + +/* + * This object is already initialized + */ +#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) + +/* + * This surface can not be attached to the requested surface. + */ +#define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) + +/* + * This surface can not be detached from the requested surface. + */ +#define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) + +/* + * Support is currently not available. + */ +#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) + +/* + * An exception was encountered while performing the requested operation + */ +#define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) + +/* + * Generic failure. + */ +#define DDERR_GENERIC E_FAIL + +/* + * Height of rectangle provided is not a multiple of reqd alignment + */ +#define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) + +/* + * Unable to match primary surface creation request with existing + * primary surface. + */ +#define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) + +/* + * One or more of the caps bits passed to the callback are incorrect. + */ +#define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) + +/* + * DirectDraw does not support provided Cliplist. + */ +#define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) + +/* + * DirectDraw does not support the requested mode + */ +#define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) + +/* + * DirectDraw received a pointer that was an invalid DIRECTDRAW object. + */ +#define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) + +/* + * One or more of the parameters passed to the callback function are + * incorrect. + */ +#define DDERR_INVALIDPARAMS E_INVALIDARG + +/* + * pixel format was invalid as specified + */ +#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) + +/* + * Rectangle provided was invalid. + */ +#define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) + +/* + * Operation could not be carried out because one or more surfaces are locked + */ +#define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) + +/* + * There is no 3D present. + */ +#define DDERR_NO3D MAKE_DDHRESULT( 170 ) + +/* + * Operation could not be carried out because there is no alpha accleration + * hardware present or available. + */ +#define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) + +/* + * Operation could not be carried out because there is no stereo + * hardware present or available. + */ +#define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) + +/* + * Operation could not be carried out because there is no hardware + * present which supports stereo surfaces + */ +#define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) + + + +/* + * no clip list available + */ +#define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) + +/* + * Operation could not be carried out because there is no color conversion + * hardware present or available. + */ +#define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) + +/* + * Create function called without DirectDraw object method SetCooperativeLevel + * being called. + */ +#define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) + +/* + * Surface doesn't currently have a color key + */ +#define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) + +/* + * Operation could not be carried out because there is no hardware support + * of the dest color key. + */ +#define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) + +/* + * No DirectDraw support possible with current display driver + */ +#define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) + +/* + * Operation requires the application to have exclusive mode but the + * application does not have exclusive mode. + */ +#define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) + +/* + * Flipping visible surfaces is not supported. + */ +#define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) + +/* + * There is no GDI present. + */ +#define DDERR_NOGDI MAKE_DDHRESULT( 240 ) + +/* + * Operation could not be carried out because there is no hardware present + * or available. + */ +#define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) + +/* + * Requested item was not found + */ +#define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) + +/* + * Operation could not be carried out because there is no overlay hardware + * present or available. + */ +#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) + +/* + * Operation could not be carried out because the source and destination + * rectangles are on the same surface and overlap each other. + */ +#define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) + +/* + * Operation could not be carried out because there is no appropriate raster + * op hardware present or available. + */ +#define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) + +/* + * Operation could not be carried out because there is no rotation hardware + * present or available. + */ +#define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) + +/* + * Operation could not be carried out because there is no hardware support + * for stretching + */ +#define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) + +/* + * DirectDrawSurface is not in 4 bit color palette and the requested operation + * requires 4 bit color palette. + */ +#define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) + +/* + * DirectDrawSurface is not in 4 bit color index palette and the requested + * operation requires 4 bit color index palette. + */ +#define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) + +/* + * DirectDraw Surface is not in 8 bit color mode and the requested operation + * requires 8 bit color. + */ +#define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) + +/* + * Operation could not be carried out because there is no texture mapping + * hardware present or available. + */ +#define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) + +/* + * Operation could not be carried out because there is no hardware support + * for vertical blank synchronized operations. + */ +#define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) + +/* + * Operation could not be carried out because there is no hardware support + * for zbuffer blting. + */ +#define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) + +/* + * Overlay surfaces could not be z layered based on their BltOrder because + * the hardware does not support z layering of overlays. + */ +#define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) + +/* + * The hardware needed for the requested operation has already been + * allocated. + */ +#define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) + +/* + * DirectDraw does not have enough memory to perform the operation. + */ +#define DDERR_OUTOFMEMORY E_OUTOFMEMORY + +/* + * DirectDraw does not have enough memory to perform the operation. + */ +#define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) + +/* + * hardware does not support clipped overlays + */ +#define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) + +/* + * Can only have ony color key active at one time for overlays + */ +#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) + +/* + * Access to this palette is being refused because the palette is already + * locked by another thread. + */ +#define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) + +/* + * No src color key specified for this operation. + */ +#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) + +/* + * This surface is already attached to the surface it is being attached to. + */ +#define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) + +/* + * This surface is already a dependency of the surface it is being made a + * dependency of. + */ +#define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) + +/* + * Access to this surface is being refused because the surface is already + * locked by another thread. + */ +#define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) + +/* + * Access to this surface is being refused because no driver exists + * which can supply a pointer to the surface. + * This is most likely to happen when attempting to lock the primary + * surface when no DCI provider is present. + * Will also happen on attempts to lock an optimized surface. + */ +#define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) + +/* + * Access to Surface refused because Surface is obscured. + */ +#define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) + +/* + * Access to this surface is being refused because the surface is gone. + * The DIRECTDRAWSURFACE object representing this surface should + * have Restore called on it. + */ +#define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) + +/* + * The requested surface is not attached. + */ +#define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) + +/* + * Height requested by DirectDraw is too large. + */ +#define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) + +/* + * Size requested by DirectDraw is too large -- The individual height and + * width are OK. + */ +#define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) + +/* + * Width requested by DirectDraw is too large. + */ +#define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) + +/* + * Action not supported. + */ +#define DDERR_UNSUPPORTED E_NOTIMPL + +/* + * Pixel format requested is unsupported by DirectDraw + */ +#define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) + +/* + * Bitmask in the pixel format requested is unsupported by DirectDraw + */ +#define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) + +/* + * The specified stream contains invalid data + */ +#define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) + +/* + * vertical blank is in progress + */ +#define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) + +/* + * Informs DirectDraw that the previous Blt which is transfering information + * to or from this Surface is incomplete. + */ +#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) + + +/* + * The specified surface type requires specification of the COMPLEX flag + */ +#define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) + + +/* + * Rectangle provided was not horizontally aligned on reqd. boundary + */ +#define DDERR_XALIGN MAKE_DDHRESULT( 560 ) + +/* + * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver + * identifier. + */ +#define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) + +/* + * A DirectDraw object representing this driver has already been created + * for this process. + */ +#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) + +/* + * A hardware only DirectDraw object creation was attempted but the driver + * did not support any hardware. + */ +#define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) + +/* + * this process already has created a primary surface + */ +#define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) + +/* + * software emulation not available. + */ +#define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) + +/* + * region passed to Clipper::GetClipList is too small. + */ +#define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) + +/* + * an attempt was made to set a clip list for a clipper objec that + * is already monitoring an hwnd. + */ +#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) + +/* + * No clipper object attached to surface object + */ +#define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) + +/* + * Clipper notification requires an HWND or + * no HWND has previously been set as the CooperativeLevel HWND. + */ +#define DDERR_NOHWND MAKE_DDHRESULT( 569 ) + +/* + * HWND used by DirectDraw CooperativeLevel has been subclassed, + * this prevents DirectDraw from restoring state. + */ +#define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) + +/* + * The CooperativeLevel HWND has already been set. + * It can not be reset while the process has surfaces or palettes created. + */ +#define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) + +/* + * No palette object attached to this surface. + */ +#define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) + +/* + * No hardware support for 16 or 256 color palettes. + */ +#define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) + +/* + * If a clipper object is attached to the source surface passed into a + * BltFast call. + */ +#define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) + +/* + * No blter. + */ +#define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) + +/* + * No DirectDraw ROP hardware. + */ +#define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) + +/* + * returned when GetOverlayPosition is called on a hidden overlay + */ +#define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) + +/* + * returned when GetOverlayPosition is called on a overlay that UpdateOverlay + * has never been called on to establish a destionation. + */ +#define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) + +/* + * returned when the position of the overlay on the destionation is no longer + * legal for that destionation. + */ +#define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) + +/* + * returned when an overlay member is called for a non-overlay surface + */ +#define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) + +/* + * An attempt was made to set the cooperative level when it was already + * set to exclusive. + */ +#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) + +/* + * An attempt has been made to flip a surface that is not flippable. + */ +#define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) + +/* + * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly + * created. + */ +#define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) + +/* + * Surface was not locked. An attempt to unlock a surface that was not + * locked at all, or by this process, has been attempted. + */ +#define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) + +/* + * Windows can not create any more DCs, or a DC was requested for a paltte-indexed + * surface when the surface had no palette AND the display mode was not palette-indexed + * (in this case DirectDraw cannot select a proper palette into the DC) + */ +#define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) + +/* + * No DC was ever created for this surface. + */ +#define DDERR_NODC MAKE_DDHRESULT( 586 ) + +/* + * This surface can not be restored because it was created in a different + * mode. + */ +#define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) + +/* + * This surface can not be restored because it is an implicitly created + * surface. + */ +#define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) + +/* + * The surface being used is not a palette-based surface + */ +#define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) + + +/* + * The display is currently in an unsupported mode + */ +#define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) + +/* + * Operation could not be carried out because there is no mip-map + * texture mapping hardware present or available. + */ +#define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) + +/* + * The requested action could not be performed because the surface was of + * the wrong type. + */ +#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) + + +/* + * Device does not support optimized surfaces, therefore no video memory optimized surfaces + */ +#define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) + +/* + * Surface is an optimized surface, but has not yet been allocated any memory + */ +#define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) + +/* + * Attempt was made to create or set a device window without first setting + * the focus window + */ +#define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) + +/* + * Attempt was made to set a palette on a mipmap sublevel + */ +#define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) + +/* + * A DC has already been returned for this surface. Only one DC can be + * retrieved per surface. + */ +#define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) + +/* + * An attempt was made to allocate non-local video memory from a device + * that does not support non-local video memory. + */ +#define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) + +/* + * The attempt to page lock a surface failed. + */ +#define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) + + +/* + * The attempt to page unlock a surface failed. + */ +#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) + +/* + * An attempt was made to page unlock a surface with no outstanding page locks. + */ +#define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) + +/* + * There is more data available than the specified buffer size could hold + */ +#define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) + +/* + * The data has expired and is therefore no longer valid. + */ +#define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) + +/* + * The mode test has finished executing. + */ +#define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) + +/* + * The mode test has switched to a new mode. + */ +#define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) + +/* + * D3D has not yet been initialized. + */ +#define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) + +/* + * The video port is not active + */ +#define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) + +/* + * The monitor does not have EDID data. + */ +#define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) + +/* + * The driver does not enumerate display mode refresh rates. + */ +#define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) + +/* + * Surfaces created by one direct draw device cannot be used directly by + * another direct draw device. + */ +#define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) + + + +/* + * An attempt was made to invoke an interface member of a DirectDraw object + * created by CoCreateInstance() before it was initialized. + */ +#define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED + + +/* Alpha bit depth constants */ + + +#ifdef __cplusplus +}; +#endif + +#ifdef ENABLE_NAMELESS_UNION_PRAGMA +#pragma warning(default:4201) +#endif + +#endif //__DDRAW_INCLUDED__ + + diff --git a/desmume/src/windows/directx/ddraw.lib b/desmume/src/windows/directx/ddraw.lib new file mode 100644 index 0000000000000000000000000000000000000000..57f83d6452306b95fc8ce5ab203c7a8d28c2f263 GIT binary patch literal 4540 zcmcInJ9FDc5dKJ6rbvko#c48m(H=SDxKQ*UC3+^40V623Y+CkE(x}SN2nk1YD3XIf z6Iafp&o6MD%C(D>o^hKZMM@R^5w2X=-UIFdfCmV)ots(QVRsMT-QMor;^McK(>?mG z@J%(`R#&dAudmeVjny!Jg}*j78hmuG0N`^V*9P(~P7Qm?dh|^2zi7KSSX#N$WPG{%#-8=35j=8r%afXWqmyCphCLVucM@ir=FZTyouM^ojk>=C zzB$2Hng_!H)2+!>OI;;VEB0-$bah;@r2o_7BeJ*xU+C(~1W?)u=f>v~R)?8nK7Gs)xrDQ*A5SXTynI`d@u4{FV?4Fp}4bDr@m^wZ;ReV+` zK-)RM%>z#gz|$h|xI__G1|E>`CcTd-LQjd7h~HWS9+B)N(J9Ga&3gfk3i2pm4(BkB zS)4}^CFD@X0y4-ZNM|U%685gVOZcJU1iUKZyb%}jtgp^<((|ISGlEj7Pq>v<=9x?et1xtwuguLQVWTG`M7<~&*m{ka#3_xQoFP+0`WfLI z$ff#2@|UeUs+haPyJ41lg8>iOvu@H_V?*Agt;`H&|G3(m%Yfp{YnkPq{nN?MOMCt+ zV9?-C@xprpmG77PJuqp0MKti5=!IZVZ=m`tOFfHt z*79;wS8$<1sRZn6tmSC_^YTZx`(0=B>*&5)z0&@=+S=K@<%=UvN-*9`_61NLVe?sb zn)OB!1V(psJf?*{FaL-)Zv-0CXN|2a3$b4V@YZ@HINr|K`ep>D#&n1QsZ&=R#{Ysn zcw=7&Hu)Rtve>2PhpRT^K2v(gTJ2iEL$aQS{Ozratqxib>3Jgc2zbc4;4%;SOT6%& zdC329@@Y<#ib%3@OyyRX+G?BifYtoC`i~I&^VM4|A+GAeP|OQiTm@Sou4;nM^!^nu zy#J8aO=Hnd2{$H9O>NJ*C@89|;%8CW%CKDZ6=9sC8X)P8muCk#O6mKx7}U=Qb=F6X zRIw6aYOK2WxrywMWry=&EO}ABJ6cV+X9VpNLd$t*q03hRO@DIoA1-`yUlP)shomW{ z-Ulz{%$TR-b$Ed?LBYyVN>8b;^Kg&Y^CF=Zbf|vmAz?7RU2A&8ON2NdMhw+63Q~^J z?r~F(c$p9vVi0+aB%$76p9!eNSX8g@dLPsT>y~0rSv991 +#endif + +#endif /* DIJ_RINGZERO */ + +#ifdef __cplusplus +extern "C" { +#endif + + + + + +/* + * To build applications for older versions of DirectInput + * + * #define DIRECTINPUT_VERSION [ 0x0300 | 0x0500 | 0x0700 ] + * + * before #include . By default, #include + * will produce a DirectX 8-compatible header file. + * + */ + +#define DIRECTINPUT_HEADER_VERSION 0x0800 +#ifndef DIRECTINPUT_VERSION +#define DIRECTINPUT_VERSION DIRECTINPUT_HEADER_VERSION +#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800") +#endif + +#ifndef DIJ_RINGZERO + +/**************************************************************************** + * + * Class IDs + * + ****************************************************************************/ + +DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(CLSID_DirectInputDevice8,0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Interfaces + * + ****************************************************************************/ + +DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); + +/**************************************************************************** + * + * Predefined object types + * + ****************************************************************************/ + +DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RxAxis, 0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RyAxis, 0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RzAxis, 0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Slider, 0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_Button, 0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Predefined product GUIDs + * + ****************************************************************************/ + +DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Joystick ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Predefined force feedback effects + * + ****************************************************************************/ + +DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Interfaces and Structures... + * + ****************************************************************************/ + +#if(DIRECTINPUT_VERSION >= 0x0500) + +/**************************************************************************** + * + * IDirectInputEffect + * + ****************************************************************************/ + +#define DIEFT_ALL 0x00000000 + +#define DIEFT_CONSTANTFORCE 0x00000001 +#define DIEFT_RAMPFORCE 0x00000002 +#define DIEFT_PERIODIC 0x00000003 +#define DIEFT_CONDITION 0x00000004 +#define DIEFT_CUSTOMFORCE 0x00000005 +#define DIEFT_HARDWARE 0x000000FF +#define DIEFT_FFATTACK 0x00000200 +#define DIEFT_FFFADE 0x00000400 +#define DIEFT_SATURATION 0x00000800 +#define DIEFT_POSNEGCOEFFICIENTS 0x00001000 +#define DIEFT_POSNEGSATURATION 0x00002000 +#define DIEFT_DEADBAND 0x00004000 +#define DIEFT_STARTDELAY 0x00008000 +#define DIEFT_GETTYPE(n) LOBYTE(n) + +#define DI_DEGREES 100 +#define DI_FFNOMINALMAX 10000 +#define DI_SECONDS 1000000 + +typedef struct DICONSTANTFORCE { + LONG lMagnitude; +} DICONSTANTFORCE, *LPDICONSTANTFORCE; +typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE; + +typedef struct DIRAMPFORCE { + LONG lStart; + LONG lEnd; +} DIRAMPFORCE, *LPDIRAMPFORCE; +typedef const DIRAMPFORCE *LPCDIRAMPFORCE; + +typedef struct DIPERIODIC { + DWORD dwMagnitude; + LONG lOffset; + DWORD dwPhase; + DWORD dwPeriod; +} DIPERIODIC, *LPDIPERIODIC; +typedef const DIPERIODIC *LPCDIPERIODIC; + +typedef struct DICONDITION { + LONG lOffset; + LONG lPositiveCoefficient; + LONG lNegativeCoefficient; + DWORD dwPositiveSaturation; + DWORD dwNegativeSaturation; + LONG lDeadBand; +} DICONDITION, *LPDICONDITION; +typedef const DICONDITION *LPCDICONDITION; + +typedef struct DICUSTOMFORCE { + DWORD cChannels; + DWORD dwSamplePeriod; + DWORD cSamples; + LPLONG rglForceData; +} DICUSTOMFORCE, *LPDICUSTOMFORCE; +typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE; + + +typedef struct DIENVELOPE { + DWORD dwSize; /* sizeof(DIENVELOPE) */ + DWORD dwAttackLevel; + DWORD dwAttackTime; /* Microseconds */ + DWORD dwFadeLevel; + DWORD dwFadeTime; /* Microseconds */ +} DIENVELOPE, *LPDIENVELOPE; +typedef const DIENVELOPE *LPCDIENVELOPE; + + +/* This structure is defined for DirectX 5.0 compatibility */ +typedef struct DIEFFECT_DX5 { + DWORD dwSize; /* sizeof(DIEFFECT_DX5) */ + DWORD dwFlags; /* DIEFF_* */ + DWORD dwDuration; /* Microseconds */ + DWORD dwSamplePeriod; /* Microseconds */ + DWORD dwGain; + DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ + DWORD dwTriggerRepeatInterval; /* Microseconds */ + DWORD cAxes; /* Number of axes */ + LPDWORD rgdwAxes; /* Array of axes */ + LPLONG rglDirection; /* Array of directions */ + LPDIENVELOPE lpEnvelope; /* Optional */ + DWORD cbTypeSpecificParams; /* Size of params */ + LPVOID lpvTypeSpecificParams; /* Pointer to params */ +} DIEFFECT_DX5, *LPDIEFFECT_DX5; +typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5; + +typedef struct DIEFFECT { + DWORD dwSize; /* sizeof(DIEFFECT) */ + DWORD dwFlags; /* DIEFF_* */ + DWORD dwDuration; /* Microseconds */ + DWORD dwSamplePeriod; /* Microseconds */ + DWORD dwGain; + DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ + DWORD dwTriggerRepeatInterval; /* Microseconds */ + DWORD cAxes; /* Number of axes */ + LPDWORD rgdwAxes; /* Array of axes */ + LPLONG rglDirection; /* Array of directions */ + LPDIENVELOPE lpEnvelope; /* Optional */ + DWORD cbTypeSpecificParams; /* Size of params */ + LPVOID lpvTypeSpecificParams; /* Pointer to params */ +#if(DIRECTINPUT_VERSION >= 0x0600) + DWORD dwStartDelay; /* Microseconds */ +#endif /* DIRECTINPUT_VERSION >= 0x0600 */ +} DIEFFECT, *LPDIEFFECT; +typedef DIEFFECT DIEFFECT_DX6; +typedef LPDIEFFECT LPDIEFFECT_DX6; +typedef const DIEFFECT *LPCDIEFFECT; + + +#if(DIRECTINPUT_VERSION >= 0x0700) +#ifndef DIJ_RINGZERO +typedef struct DIFILEEFFECT{ + DWORD dwSize; + GUID GuidEffect; + LPCDIEFFECT lpDiEffect; + CHAR szFriendlyName[MAX_PATH]; +}DIFILEEFFECT, *LPDIFILEEFFECT; +typedef const DIFILEEFFECT *LPCDIFILEEFFECT; +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); +#endif /* DIJ_RINGZERO */ +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#define DIEFF_OBJECTIDS 0x00000001 +#define DIEFF_OBJECTOFFSETS 0x00000002 +#define DIEFF_CARTESIAN 0x00000010 +#define DIEFF_POLAR 0x00000020 +#define DIEFF_SPHERICAL 0x00000040 + +#define DIEP_DURATION 0x00000001 +#define DIEP_SAMPLEPERIOD 0x00000002 +#define DIEP_GAIN 0x00000004 +#define DIEP_TRIGGERBUTTON 0x00000008 +#define DIEP_TRIGGERREPEATINTERVAL 0x00000010 +#define DIEP_AXES 0x00000020 +#define DIEP_DIRECTION 0x00000040 +#define DIEP_ENVELOPE 0x00000080 +#define DIEP_TYPESPECIFICPARAMS 0x00000100 +#if(DIRECTINPUT_VERSION >= 0x0600) +#define DIEP_STARTDELAY 0x00000200 +#define DIEP_ALLPARAMS_DX5 0x000001FF +#define DIEP_ALLPARAMS 0x000003FF +#else /* DIRECTINPUT_VERSION < 0x0600 */ +#define DIEP_ALLPARAMS 0x000001FF +#endif /* DIRECTINPUT_VERSION < 0x0600 */ +#define DIEP_START 0x20000000 +#define DIEP_NORESTART 0x40000000 +#define DIEP_NODOWNLOAD 0x80000000 +#define DIEB_NOTRIGGER 0xFFFFFFFF + +#define DIES_SOLO 0x00000001 +#define DIES_NODOWNLOAD 0x80000000 + +#define DIEGES_PLAYING 0x00000001 +#define DIEGES_EMULATED 0x00000002 + +typedef struct DIEFFESCAPE { + DWORD dwSize; + DWORD dwCommand; + LPVOID lpvInBuffer; + DWORD cbInBuffer; + LPVOID lpvOutBuffer; + DWORD cbOutBuffer; +} DIEFFESCAPE, *LPDIEFFESCAPE; + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputEffect + +DECLARE_INTERFACE_(IDirectInputEffect, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputEffect methods ***/ + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE; + STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE; + STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE; + STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE; + STDMETHOD(Stop)(THIS) PURE; + STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE; + STDMETHOD(Download)(THIS) PURE; + STDMETHOD(Unload)(THIS) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; +}; + +typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a) +#define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b) +#define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b) +#define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b) +#define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p) +#define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a) +#define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p) +#define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p) +#define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#else +#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputEffect_AddRef(p) (p)->AddRef() +#define IDirectInputEffect_Release(p) (p)->Release() +#define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a) +#define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b) +#define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b) +#define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b) +#define IDirectInputEffect_Stop(p) (p)->Stop() +#define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a) +#define IDirectInputEffect_Download(p) (p)->Download() +#define IDirectInputEffect_Unload(p) (p)->Unload() +#define IDirectInputEffect_Escape(p,a) (p)->Escape(a) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +/**************************************************************************** + * + * IDirectInputDevice + * + ****************************************************************************/ + +#if DIRECTINPUT_VERSION <= 0x700 +#define DIDEVTYPE_DEVICE 1 +#define DIDEVTYPE_MOUSE 2 +#define DIDEVTYPE_KEYBOARD 3 +#define DIDEVTYPE_JOYSTICK 4 + +#else +#define DI8DEVCLASS_ALL 0 +#define DI8DEVCLASS_DEVICE 1 +#define DI8DEVCLASS_POINTER 2 +#define DI8DEVCLASS_KEYBOARD 3 +#define DI8DEVCLASS_GAMECTRL 4 + +#define DI8DEVTYPE_DEVICE 0x11 +#define DI8DEVTYPE_MOUSE 0x12 +#define DI8DEVTYPE_KEYBOARD 0x13 +#define DI8DEVTYPE_JOYSTICK 0x14 +#define DI8DEVTYPE_GAMEPAD 0x15 +#define DI8DEVTYPE_DRIVING 0x16 +#define DI8DEVTYPE_FLIGHT 0x17 +#define DI8DEVTYPE_1STPERSON 0x18 +#define DI8DEVTYPE_DEVICECTRL 0x19 +#define DI8DEVTYPE_SCREENPOINTER 0x1A +#define DI8DEVTYPE_REMOTE 0x1B +#define DI8DEVTYPE_SUPPLEMENTAL 0x1C +#endif /* DIRECTINPUT_VERSION <= 0x700 */ + +#define DIDEVTYPE_HID 0x00010000 + +#if DIRECTINPUT_VERSION <= 0x700 +#define DIDEVTYPEMOUSE_UNKNOWN 1 +#define DIDEVTYPEMOUSE_TRADITIONAL 2 +#define DIDEVTYPEMOUSE_FINGERSTICK 3 +#define DIDEVTYPEMOUSE_TOUCHPAD 4 +#define DIDEVTYPEMOUSE_TRACKBALL 5 + +#define DIDEVTYPEKEYBOARD_UNKNOWN 0 +#define DIDEVTYPEKEYBOARD_PCXT 1 +#define DIDEVTYPEKEYBOARD_OLIVETTI 2 +#define DIDEVTYPEKEYBOARD_PCAT 3 +#define DIDEVTYPEKEYBOARD_PCENH 4 +#define DIDEVTYPEKEYBOARD_NOKIA1050 5 +#define DIDEVTYPEKEYBOARD_NOKIA9140 6 +#define DIDEVTYPEKEYBOARD_NEC98 7 +#define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8 +#define DIDEVTYPEKEYBOARD_NEC98106 9 +#define DIDEVTYPEKEYBOARD_JAPAN106 10 +#define DIDEVTYPEKEYBOARD_JAPANAX 11 +#define DIDEVTYPEKEYBOARD_J3100 12 + +#define DIDEVTYPEJOYSTICK_UNKNOWN 1 +#define DIDEVTYPEJOYSTICK_TRADITIONAL 2 +#define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3 +#define DIDEVTYPEJOYSTICK_GAMEPAD 4 +#define DIDEVTYPEJOYSTICK_RUDDER 5 +#define DIDEVTYPEJOYSTICK_WHEEL 6 +#define DIDEVTYPEJOYSTICK_HEADTRACKER 7 + +#else +#define DI8DEVTYPEMOUSE_UNKNOWN 1 +#define DI8DEVTYPEMOUSE_TRADITIONAL 2 +#define DI8DEVTYPEMOUSE_FINGERSTICK 3 +#define DI8DEVTYPEMOUSE_TOUCHPAD 4 +#define DI8DEVTYPEMOUSE_TRACKBALL 5 +#define DI8DEVTYPEMOUSE_ABSOLUTE 6 + +#define DI8DEVTYPEKEYBOARD_UNKNOWN 0 +#define DI8DEVTYPEKEYBOARD_PCXT 1 +#define DI8DEVTYPEKEYBOARD_OLIVETTI 2 +#define DI8DEVTYPEKEYBOARD_PCAT 3 +#define DI8DEVTYPEKEYBOARD_PCENH 4 +#define DI8DEVTYPEKEYBOARD_NOKIA1050 5 +#define DI8DEVTYPEKEYBOARD_NOKIA9140 6 +#define DI8DEVTYPEKEYBOARD_NEC98 7 +#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8 +#define DI8DEVTYPEKEYBOARD_NEC98106 9 +#define DI8DEVTYPEKEYBOARD_JAPAN106 10 +#define DI8DEVTYPEKEYBOARD_JAPANAX 11 +#define DI8DEVTYPEKEYBOARD_J3100 12 + +#define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1 + +#define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEJOYSTICK_STANDARD 2 + +#define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEGAMEPAD_STANDARD 2 +#define DI8DEVTYPEGAMEPAD_TILT 3 + +#define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2 +#define DI8DEVTYPEDRIVING_DUALPEDALS 3 +#define DI8DEVTYPEDRIVING_THREEPEDALS 4 +#define DI8DEVTYPEDRIVING_HANDHELD 5 + +#define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEFLIGHT_STICK 2 +#define DI8DEVTYPEFLIGHT_YOKE 3 +#define DI8DEVTYPEFLIGHT_RC 4 + +#define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPE1STPERSON_UNKNOWN 2 +#define DI8DEVTYPE1STPERSON_SIXDOF 3 +#define DI8DEVTYPE1STPERSON_SHOOTER 4 + +#define DI8DEVTYPESCREENPTR_UNKNOWN 2 +#define DI8DEVTYPESCREENPTR_LIGHTGUN 3 +#define DI8DEVTYPESCREENPTR_LIGHTPEN 4 +#define DI8DEVTYPESCREENPTR_TOUCH 5 + +#define DI8DEVTYPEREMOTE_UNKNOWN 2 + +#define DI8DEVTYPEDEVICECTRL_UNKNOWN 2 +#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3 +#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4 + +#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2 +#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3 +#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4 +#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5 +#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6 +#define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7 +#define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8 +#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9 +#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10 +#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11 +#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12 +#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13 +#endif /* DIRECTINPUT_VERSION <= 0x700 */ + +#define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType) +#define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType) + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* This structure is defined for DirectX 3.0 compatibility */ +typedef struct DIDEVCAPS_DX3 { + DWORD dwSize; + DWORD dwFlags; + DWORD dwDevType; + DWORD dwAxes; + DWORD dwButtons; + DWORD dwPOVs; +} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVCAPS { + DWORD dwSize; + DWORD dwFlags; + DWORD dwDevType; + DWORD dwAxes; + DWORD dwButtons; + DWORD dwPOVs; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFSamplePeriod; + DWORD dwFFMinTimeResolution; + DWORD dwFirmwareRevision; + DWORD dwHardwareRevision; + DWORD dwFFDriverVersion; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVCAPS, *LPDIDEVCAPS; + +#define DIDC_ATTACHED 0x00000001 +#define DIDC_POLLEDDEVICE 0x00000002 +#define DIDC_EMULATED 0x00000004 +#define DIDC_POLLEDDATAFORMAT 0x00000008 +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIDC_FORCEFEEDBACK 0x00000100 +#define DIDC_FFATTACK 0x00000200 +#define DIDC_FFFADE 0x00000400 +#define DIDC_SATURATION 0x00000800 +#define DIDC_POSNEGCOEFFICIENTS 0x00001000 +#define DIDC_POSNEGSATURATION 0x00002000 +#define DIDC_DEADBAND 0x00004000 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#define DIDC_STARTDELAY 0x00008000 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDC_ALIAS 0x00010000 +#define DIDC_PHANTOM 0x00020000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIDC_HIDDEN 0x00040000 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#define DIDFT_ALL 0x00000000 + +#define DIDFT_RELAXIS 0x00000001 +#define DIDFT_ABSAXIS 0x00000002 +#define DIDFT_AXIS 0x00000003 + +#define DIDFT_PSHBUTTON 0x00000004 +#define DIDFT_TGLBUTTON 0x00000008 +#define DIDFT_BUTTON 0x0000000C + +#define DIDFT_POV 0x00000010 +#define DIDFT_COLLECTION 0x00000040 +#define DIDFT_NODATA 0x00000080 + +#define DIDFT_ANYINSTANCE 0x00FFFF00 +#define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE +#define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8) +#define DIDFT_GETTYPE(n) LOBYTE(n) +#define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8) +#define DIDFT_FFACTUATOR 0x01000000 +#define DIDFT_FFEFFECTTRIGGER 0x02000000 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDFT_OUTPUT 0x10000000 +#define DIDFT_VENDORDEFINED 0x04000000 +#define DIDFT_ALIAS 0x08000000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ +#ifndef DIDFT_OPTIONAL +#define DIDFT_OPTIONAL 0x80000000 +#endif + +#define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8) +#define DIDFT_NOCOLLECTION 0x00FFFF00 + +#ifndef DIJ_RINGZERO + +typedef struct _DIOBJECTDATAFORMAT { + const GUID *pguid; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; +} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT; +typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT; + +typedef struct _DIDATAFORMAT { + DWORD dwSize; + DWORD dwObjSize; + DWORD dwFlags; + DWORD dwDataSize; + DWORD dwNumObjs; + LPDIOBJECTDATAFORMAT rgodf; +} DIDATAFORMAT, *LPDIDATAFORMAT; +typedef const DIDATAFORMAT *LPCDIDATAFORMAT; + +#define DIDF_ABSAXIS 0x00000001 +#define DIDF_RELAXIS 0x00000002 + +#ifdef __cplusplus +extern "C" { +#endif +extern const DIDATAFORMAT c_dfDIMouse; + +#if(DIRECTINPUT_VERSION >= 0x0700) +extern const DIDATAFORMAT c_dfDIMouse2; +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +extern const DIDATAFORMAT c_dfDIKeyboard; + +#if(DIRECTINPUT_VERSION >= 0x0500) +extern const DIDATAFORMAT c_dfDIJoystick; +extern const DIDATAFORMAT c_dfDIJoystick2; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +#ifdef __cplusplus +}; +#endif + + +#if DIRECTINPUT_VERSION > 0x0700 + +typedef struct _DIACTIONA { + UINT_PTR uAppData; + DWORD dwSemantic; + OPTIONAL DWORD dwFlags; + OPTIONAL union { + LPCSTR lptszActionName; + UINT uResIdString; + }; + OPTIONAL GUID guidInstance; + OPTIONAL DWORD dwObjID; + OPTIONAL DWORD dwHow; +} DIACTIONA, *LPDIACTIONA ; +typedef struct _DIACTIONW { + UINT_PTR uAppData; + DWORD dwSemantic; + OPTIONAL DWORD dwFlags; + OPTIONAL union { + LPCWSTR lptszActionName; + UINT uResIdString; + }; + OPTIONAL GUID guidInstance; + OPTIONAL DWORD dwObjID; + OPTIONAL DWORD dwHow; +} DIACTIONW, *LPDIACTIONW ; +#ifdef UNICODE +typedef DIACTIONW DIACTION; +typedef LPDIACTIONW LPDIACTION; +#else +typedef DIACTIONA DIACTION; +typedef LPDIACTIONA LPDIACTION; +#endif // UNICODE + +typedef const DIACTIONA *LPCDIACTIONA; +typedef const DIACTIONW *LPCDIACTIONW; +#ifdef UNICODE +typedef DIACTIONW DIACTION; +typedef LPCDIACTIONW LPCDIACTION; +#else +typedef DIACTIONA DIACTION; +typedef LPCDIACTIONA LPCDIACTION; +#endif // UNICODE +typedef const DIACTION *LPCDIACTION; + + +#define DIA_FORCEFEEDBACK 0x00000001 +#define DIA_APPMAPPED 0x00000002 +#define DIA_APPNOMAP 0x00000004 +#define DIA_NORANGE 0x00000008 +#define DIA_APPFIXED 0x00000010 + +#define DIAH_UNMAPPED 0x00000000 +#define DIAH_USERCONFIG 0x00000001 +#define DIAH_APPREQUESTED 0x00000002 +#define DIAH_HWAPP 0x00000004 +#define DIAH_HWDEFAULT 0x00000008 +#define DIAH_DEFAULT 0x00000020 +#define DIAH_ERROR 0x80000000 + +typedef struct _DIACTIONFORMATA { + DWORD dwSize; + DWORD dwActionSize; + DWORD dwDataSize; + DWORD dwNumActions; + LPDIACTIONA rgoAction; + GUID guidActionMap; + DWORD dwGenre; + DWORD dwBufferSize; + OPTIONAL LONG lAxisMin; + OPTIONAL LONG lAxisMax; + OPTIONAL HINSTANCE hInstString; + FILETIME ftTimeStamp; + DWORD dwCRC; + CHAR tszActionMap[MAX_PATH]; +} DIACTIONFORMATA, *LPDIACTIONFORMATA; +typedef struct _DIACTIONFORMATW { + DWORD dwSize; + DWORD dwActionSize; + DWORD dwDataSize; + DWORD dwNumActions; + LPDIACTIONW rgoAction; + GUID guidActionMap; + DWORD dwGenre; + DWORD dwBufferSize; + OPTIONAL LONG lAxisMin; + OPTIONAL LONG lAxisMax; + OPTIONAL HINSTANCE hInstString; + FILETIME ftTimeStamp; + DWORD dwCRC; + WCHAR tszActionMap[MAX_PATH]; +} DIACTIONFORMATW, *LPDIACTIONFORMATW; +#ifdef UNICODE +typedef DIACTIONFORMATW DIACTIONFORMAT; +typedef LPDIACTIONFORMATW LPDIACTIONFORMAT; +#else +typedef DIACTIONFORMATA DIACTIONFORMAT; +typedef LPDIACTIONFORMATA LPDIACTIONFORMAT; +#endif // UNICODE +typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA; +typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW; +#ifdef UNICODE +typedef DIACTIONFORMATW DIACTIONFORMAT; +typedef LPCDIACTIONFORMATW LPCDIACTIONFORMAT; +#else +typedef DIACTIONFORMATA DIACTIONFORMAT; +typedef LPCDIACTIONFORMATA LPCDIACTIONFORMAT; +#endif // UNICODE +typedef const DIACTIONFORMAT *LPCDIACTIONFORMAT; + +#define DIAFTS_NEWDEVICELOW 0xFFFFFFFF +#define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF +#define DIAFTS_UNUSEDDEVICELOW 0x00000000 +#define DIAFTS_UNUSEDDEVICEHIGH 0x00000000 + +#define DIDBAM_DEFAULT 0x00000000 +#define DIDBAM_PRESERVE 0x00000001 +#define DIDBAM_INITIALIZE 0x00000002 +#define DIDBAM_HWDEFAULTS 0x00000004 + +#define DIDSAM_DEFAULT 0x00000000 +#define DIDSAM_NOUSER 0x00000001 +#define DIDSAM_FORCESAVE 0x00000002 + +#define DICD_DEFAULT 0x00000000 +#define DICD_EDIT 0x00000001 + +/* + * The following definition is normally defined in d3dtypes.h + */ +#ifndef D3DCOLOR_DEFINED +typedef DWORD D3DCOLOR; +#define D3DCOLOR_DEFINED +#endif + +typedef struct _DICOLORSET{ + DWORD dwSize; + D3DCOLOR cTextFore; + D3DCOLOR cTextHighlight; + D3DCOLOR cCalloutLine; + D3DCOLOR cCalloutHighlight; + D3DCOLOR cBorder; + D3DCOLOR cControlFill; + D3DCOLOR cHighlightFill; + D3DCOLOR cAreaFill; +} DICOLORSET, *LPDICOLORSET; +typedef const DICOLORSET *LPCDICOLORSET; + + +typedef struct _DICONFIGUREDEVICESPARAMSA{ + DWORD dwSize; + DWORD dwcUsers; + LPSTR lptszUserNames; + DWORD dwcFormats; + LPDIACTIONFORMATA lprgFormats; + HWND hwnd; + DICOLORSET dics; + IUnknown FAR * lpUnkDDSTarget; +} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA; +typedef struct _DICONFIGUREDEVICESPARAMSW{ + DWORD dwSize; + DWORD dwcUsers; + LPWSTR lptszUserNames; + DWORD dwcFormats; + LPDIACTIONFORMATW lprgFormats; + HWND hwnd; + DICOLORSET dics; + IUnknown FAR * lpUnkDDSTarget; +} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW; +#ifdef UNICODE +typedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; +typedef LPDICONFIGUREDEVICESPARAMSW LPDICONFIGUREDEVICESPARAMS; +#else +typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; +typedef LPDICONFIGUREDEVICESPARAMSA LPDICONFIGUREDEVICESPARAMS; +#endif // UNICODE +typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA; +typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW; +#ifdef UNICODE +typedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; +typedef LPCDICONFIGUREDEVICESPARAMSW LPCDICONFIGUREDEVICESPARAMS; +#else +typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; +typedef LPCDICONFIGUREDEVICESPARAMSA LPCDICONFIGUREDEVICESPARAMS; +#endif // UNICODE +typedef const DICONFIGUREDEVICESPARAMS *LPCDICONFIGUREDEVICESPARAMS; + + +#define DIDIFT_CONFIGURATION 0x00000001 +#define DIDIFT_OVERLAY 0x00000002 + +#define DIDAL_CENTERED 0x00000000 +#define DIDAL_LEFTALIGNED 0x00000001 +#define DIDAL_RIGHTALIGNED 0x00000002 +#define DIDAL_MIDDLE 0x00000000 +#define DIDAL_TOPALIGNED 0x00000004 +#define DIDAL_BOTTOMALIGNED 0x00000008 + +typedef struct _DIDEVICEIMAGEINFOA { + CHAR tszImagePath[MAX_PATH]; + DWORD dwFlags; + // These are valid if DIDIFT_OVERLAY is present in dwFlags. + DWORD dwViewID; + RECT rcOverlay; + DWORD dwObjID; + DWORD dwcValidPts; + POINT rgptCalloutLine[5]; + RECT rcCalloutRect; + DWORD dwTextAlign; +} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA; +typedef struct _DIDEVICEIMAGEINFOW { + WCHAR tszImagePath[MAX_PATH]; + DWORD dwFlags; + // These are valid if DIDIFT_OVERLAY is present in dwFlags. + DWORD dwViewID; + RECT rcOverlay; + DWORD dwObjID; + DWORD dwcValidPts; + POINT rgptCalloutLine[5]; + RECT rcCalloutRect; + DWORD dwTextAlign; +} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; +typedef LPDIDEVICEIMAGEINFOW LPDIDEVICEIMAGEINFO; +#else +typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; +typedef LPDIDEVICEIMAGEINFOA LPDIDEVICEIMAGEINFO; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA; +typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; +typedef LPCDIDEVICEIMAGEINFOW LPCDIDEVICEIMAGEINFO; +#else +typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; +typedef LPCDIDEVICEIMAGEINFOA LPCDIDEVICEIMAGEINFO; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFO *LPCDIDEVICEIMAGEINFO; + +typedef struct _DIDEVICEIMAGEINFOHEADERA { + DWORD dwSize; + DWORD dwSizeImageInfo; + DWORD dwcViews; + DWORD dwcButtons; + DWORD dwcAxes; + DWORD dwcPOVs; + DWORD dwBufferSize; + DWORD dwBufferUsed; + LPDIDEVICEIMAGEINFOA lprgImageInfoArray; +} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA; +typedef struct _DIDEVICEIMAGEINFOHEADERW { + DWORD dwSize; + DWORD dwSizeImageInfo; + DWORD dwcViews; + DWORD dwcButtons; + DWORD dwcAxes; + DWORD dwcPOVs; + DWORD dwBufferSize; + DWORD dwBufferUsed; + LPDIDEVICEIMAGEINFOW lprgImageInfoArray; +} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; +typedef LPDIDEVICEIMAGEINFOHEADERW LPDIDEVICEIMAGEINFOHEADER; +#else +typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; +typedef LPDIDEVICEIMAGEINFOHEADERA LPDIDEVICEIMAGEINFOHEADER; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA; +typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; +typedef LPCDIDEVICEIMAGEINFOHEADERW LPCDIDEVICEIMAGEINFOHEADER; +#else +typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; +typedef LPCDIDEVICEIMAGEINFOHEADERA LPCDIDEVICEIMAGEINFOHEADER; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOHEADER *LPCDIDEVICEIMAGEINFOHEADER; + +#endif /* DIRECTINPUT_VERSION > 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* These structures are defined for DirectX 3.0 compatibility */ + +typedef struct DIDEVICEOBJECTINSTANCE_DX3A { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + CHAR tszName[MAX_PATH]; +} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A; +typedef struct DIDEVICEOBJECTINSTANCE_DX3W { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + WCHAR tszName[MAX_PATH]; +} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W; +#ifdef UNICODE +typedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3; +typedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3; +#else +typedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3; +typedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3; +#endif // UNICODE +typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A; +typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W; +typedef const DIDEVICEOBJECTINSTANCE_DX3 *LPCDIDEVICEOBJECTINSTANCE_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVICEOBJECTINSTANCEA { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + CHAR tszName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFMaxForce; + DWORD dwFFForceResolution; + WORD wCollectionNumber; + WORD wDesignatorIndex; + WORD wUsagePage; + WORD wUsage; + DWORD dwDimension; + WORD wExponent; + WORD wReportId; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA; +typedef struct DIDEVICEOBJECTINSTANCEW { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + WCHAR tszName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFMaxForce; + DWORD dwFFForceResolution; + WORD wCollectionNumber; + WORD wDesignatorIndex; + WORD wUsagePage; + WORD wUsage; + DWORD dwDimension; + WORD wExponent; + WORD wReportId; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE; +typedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE; +#else +typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE; +typedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE; +#endif // UNICODE +typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA; +typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW; +typedef const DIDEVICEOBJECTINSTANCE *LPCDIDEVICEOBJECTINSTANCE; + +typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKW +#else +#define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKA +#endif // !UNICODE + +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIDOI_FFACTUATOR 0x00000001 +#define DIDOI_FFEFFECTTRIGGER 0x00000002 +#define DIDOI_POLLED 0x00008000 +#define DIDOI_ASPECTPOSITION 0x00000100 +#define DIDOI_ASPECTVELOCITY 0x00000200 +#define DIDOI_ASPECTACCEL 0x00000300 +#define DIDOI_ASPECTFORCE 0x00000400 +#define DIDOI_ASPECTMASK 0x00000F00 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDOI_GUIDISUSAGE 0x00010000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +typedef struct DIPROPHEADER { + DWORD dwSize; + DWORD dwHeaderSize; + DWORD dwObj; + DWORD dwHow; +} DIPROPHEADER, *LPDIPROPHEADER; +typedef const DIPROPHEADER *LPCDIPROPHEADER; + +#define DIPH_DEVICE 0 +#define DIPH_BYOFFSET 1 +#define DIPH_BYID 2 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIPH_BYUSAGE 3 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIMAKEUSAGEDWORD(UsagePage, Usage) \ + (DWORD)MAKELONG(Usage, UsagePage) +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +typedef struct DIPROPDWORD { + DIPROPHEADER diph; + DWORD dwData; +} DIPROPDWORD, *LPDIPROPDWORD; +typedef const DIPROPDWORD *LPCDIPROPDWORD; + +#if(DIRECTINPUT_VERSION >= 0x0800) +typedef struct DIPROPPOINTER { + DIPROPHEADER diph; + UINT_PTR uData; +} DIPROPPOINTER, *LPDIPROPPOINTER; +typedef const DIPROPPOINTER *LPCDIPROPPOINTER; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +typedef struct DIPROPRANGE { + DIPROPHEADER diph; + LONG lMin; + LONG lMax; +} DIPROPRANGE, *LPDIPROPRANGE; +typedef const DIPROPRANGE *LPCDIPROPRANGE; + +#define DIPROPRANGE_NOMIN ((LONG)0x80000000) +#define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF) + +#if(DIRECTINPUT_VERSION >= 0x050a) +typedef struct DIPROPCAL { + DIPROPHEADER diph; + LONG lMin; + LONG lCenter; + LONG lMax; +} DIPROPCAL, *LPDIPROPCAL; +typedef const DIPROPCAL *LPCDIPROPCAL; + +typedef struct DIPROPCALPOV { + DIPROPHEADER diph; + LONG lMin[5]; + LONG lMax[5]; +} DIPROPCALPOV, *LPDIPROPCALPOV; +typedef const DIPROPCALPOV *LPCDIPROPCALPOV; + +typedef struct DIPROPGUIDANDPATH { + DIPROPHEADER diph; + GUID guidClass; + WCHAR wszPath[MAX_PATH]; +} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; +typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; + +typedef struct DIPROPSTRING { + DIPROPHEADER diph; + WCHAR wsz[MAX_PATH]; +} DIPROPSTRING, *LPDIPROPSTRING; +typedef const DIPROPSTRING *LPCDIPROPSTRING; + +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define MAXCPOINTSNUM 8 + +typedef struct _CPOINT +{ + LONG lP; // raw value + DWORD dwLog; // logical_value / max_logical_value * 10000 +} CPOINT, *PCPOINT; + +typedef struct DIPROPCPOINTS { + DIPROPHEADER diph; + DWORD dwCPointsNum; + CPOINT cp[MAXCPOINTSNUM]; +} DIPROPCPOINTS, *LPDIPROPCPOINTS; +typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +#ifdef __cplusplus +#define MAKEDIPROP(prop) (*(const GUID *)(prop)) +#else +#define MAKEDIPROP(prop) ((REFGUID)(prop)) +#endif + +#define DIPROP_BUFFERSIZE MAKEDIPROP(1) + +#define DIPROP_AXISMODE MAKEDIPROP(2) + +#define DIPROPAXISMODE_ABS 0 +#define DIPROPAXISMODE_REL 1 + +#define DIPROP_GRANULARITY MAKEDIPROP(3) + +#define DIPROP_RANGE MAKEDIPROP(4) + +#define DIPROP_DEADZONE MAKEDIPROP(5) + +#define DIPROP_SATURATION MAKEDIPROP(6) + +#define DIPROP_FFGAIN MAKEDIPROP(7) + +#define DIPROP_FFLOAD MAKEDIPROP(8) + +#define DIPROP_AUTOCENTER MAKEDIPROP(9) + +#define DIPROPAUTOCENTER_OFF 0 +#define DIPROPAUTOCENTER_ON 1 + +#define DIPROP_CALIBRATIONMODE MAKEDIPROP(10) + +#define DIPROPCALIBRATIONMODE_COOKED 0 +#define DIPROPCALIBRATIONMODE_RAW 1 + +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIPROP_CALIBRATION MAKEDIPROP(11) + +#define DIPROP_GUIDANDPATH MAKEDIPROP(12) + +#define DIPROP_INSTANCENAME MAKEDIPROP(13) + +#define DIPROP_PRODUCTNAME MAKEDIPROP(14) +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x05b2) +#define DIPROP_JOYSTICKID MAKEDIPROP(15) + +#define DIPROP_GETPORTDISPLAYNAME MAKEDIPROP(16) + +#endif /* DIRECTINPUT_VERSION >= 0x05b2 */ + +#if(DIRECTINPUT_VERSION >= 0x0700) +#define DIPROP_PHYSICALRANGE MAKEDIPROP(18) + +#define DIPROP_LOGICALRANGE MAKEDIPROP(19) +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIPROP_KEYNAME MAKEDIPROP(20) + +#define DIPROP_CPOINTS MAKEDIPROP(21) + +#define DIPROP_APPDATA MAKEDIPROP(22) + +#define DIPROP_SCANCODE MAKEDIPROP(23) + +#define DIPROP_VIDPID MAKEDIPROP(24) + +#define DIPROP_USERNAME MAKEDIPROP(25) + +#define DIPROP_TYPENAME MAKEDIPROP(26) +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +typedef struct DIDEVICEOBJECTDATA_DX3 { + DWORD dwOfs; + DWORD dwData; + DWORD dwTimeStamp; + DWORD dwSequence; +} DIDEVICEOBJECTDATA_DX3, *LPDIDEVICEOBJECTDATA_DX3; +typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX; + +typedef struct DIDEVICEOBJECTDATA { + DWORD dwOfs; + DWORD dwData; + DWORD dwTimeStamp; + DWORD dwSequence; +#if(DIRECTINPUT_VERSION >= 0x0800) + UINT_PTR uAppData; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ +} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA; +typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA; + +#define DIGDD_PEEK 0x00000001 + +#define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \ + ((int)((dwSequence1) - (dwSequence2)) cmp 0) +#define DISCL_EXCLUSIVE 0x00000001 +#define DISCL_NONEXCLUSIVE 0x00000002 +#define DISCL_FOREGROUND 0x00000004 +#define DISCL_BACKGROUND 0x00000008 +#define DISCL_NOWINKEY 0x00000010 + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* These structures are defined for DirectX 3.0 compatibility */ + +typedef struct DIDEVICEINSTANCE_DX3A { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + CHAR tszInstanceName[MAX_PATH]; + CHAR tszProductName[MAX_PATH]; +} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A; +typedef struct DIDEVICEINSTANCE_DX3W { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + WCHAR tszInstanceName[MAX_PATH]; + WCHAR tszProductName[MAX_PATH]; +} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W; +#ifdef UNICODE +typedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3; +typedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3; +#else +typedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3; +typedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3; +#endif // UNICODE +typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A; +typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W; +typedef const DIDEVICEINSTANCE_DX3 *LPCDIDEVICEINSTANCE_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVICEINSTANCEA { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + CHAR tszInstanceName[MAX_PATH]; + CHAR tszProductName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + GUID guidFFDriver; + WORD wUsagePage; + WORD wUsage; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA; +typedef struct DIDEVICEINSTANCEW { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + WCHAR tszInstanceName[MAX_PATH]; + WCHAR tszProductName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + GUID guidFFDriver; + WORD wUsagePage; + WORD wUsage; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; +typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE; +#else +typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; +typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE; +#endif // UNICODE + +typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA; +typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; +typedef LPCDIDEVICEINSTANCEW LPCDIDEVICEINSTANCE; +#else +typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; +typedef LPCDIDEVICEINSTANCEA LPCDIDEVICEINSTANCE; +#endif // UNICODE +typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE; + +#undef INTERFACE +#define INTERFACE IDirectInputDeviceW + +DECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceW methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; +}; + +typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW; + +#undef INTERFACE +#define INTERFACE IDirectInputDeviceA + +DECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceA methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; +}; + +typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA; + +#ifdef UNICODE +#define IID_IDirectInputDevice IID_IDirectInputDeviceW +#define IDirectInputDevice IDirectInputDeviceW +#define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl +#else +#define IID_IDirectInputDevice IID_IDirectInputDeviceA +#define IDirectInputDevice IDirectInputDeviceA +#define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl +#endif +typedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#else +#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice_AddRef(p) (p)->AddRef() +#define IDirectInputDevice_Release(p) (p)->Release() +#define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice_Acquire(p) (p)->Acquire() +#define IDirectInputDevice_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#endif + +#endif /* DIJ_RINGZERO */ + + +#if(DIRECTINPUT_VERSION >= 0x0500) + +#define DISFFC_RESET 0x00000001 +#define DISFFC_STOPALL 0x00000002 +#define DISFFC_PAUSE 0x00000004 +#define DISFFC_CONTINUE 0x00000008 +#define DISFFC_SETACTUATORSON 0x00000010 +#define DISFFC_SETACTUATORSOFF 0x00000020 + +#define DIGFFS_EMPTY 0x00000001 +#define DIGFFS_STOPPED 0x00000002 +#define DIGFFS_PAUSED 0x00000004 +#define DIGFFS_ACTUATORSON 0x00000010 +#define DIGFFS_ACTUATORSOFF 0x00000020 +#define DIGFFS_POWERON 0x00000040 +#define DIGFFS_POWEROFF 0x00000080 +#define DIGFFS_SAFETYSWITCHON 0x00000100 +#define DIGFFS_SAFETYSWITCHOFF 0x00000200 +#define DIGFFS_USERFFSWITCHON 0x00000400 +#define DIGFFS_USERFFSWITCHOFF 0x00000800 +#define DIGFFS_DEVICELOST 0x80000000 + +#ifndef DIJ_RINGZERO + +typedef struct DIEFFECTINFOA { + DWORD dwSize; + GUID guid; + DWORD dwEffType; + DWORD dwStaticParams; + DWORD dwDynamicParams; + CHAR tszName[MAX_PATH]; +} DIEFFECTINFOA, *LPDIEFFECTINFOA; +typedef struct DIEFFECTINFOW { + DWORD dwSize; + GUID guid; + DWORD dwEffType; + DWORD dwStaticParams; + DWORD dwDynamicParams; + WCHAR tszName[MAX_PATH]; +} DIEFFECTINFOW, *LPDIEFFECTINFOW; +#ifdef UNICODE +typedef DIEFFECTINFOW DIEFFECTINFO; +typedef LPDIEFFECTINFOW LPDIEFFECTINFO; +#else +typedef DIEFFECTINFOA DIEFFECTINFO; +typedef LPDIEFFECTINFOA LPDIEFFECTINFO; +#endif // UNICODE +typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA; +typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW; +typedef const DIEFFECTINFO *LPCDIEFFECTINFO; + +#define DISDD_CONTINUE 0x00000001 + +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID); +#ifdef UNICODE +#define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKW +#else +#define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKA +#endif // !UNICODE +typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID); + +#undef INTERFACE +#define INTERFACE IDirectInputDevice2W + +DECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceW methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + + /*** IDirectInputDevice2W methods ***/ + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; +}; + +typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice2A + +DECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceA methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + + /*** IDirectInputDevice2A methods ***/ + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; +}; + +typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A; + +#ifdef UNICODE +#define IID_IDirectInputDevice2 IID_IDirectInputDevice2W +#define IDirectInputDevice2 IDirectInputDevice2W +#define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl +#else +#define IID_IDirectInputDevice2 IID_IDirectInputDevice2A +#define IDirectInputDevice2 IDirectInputDevice2A +#define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl +#endif +typedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#else +#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice2_AddRef(p) (p)->AddRef() +#define IDirectInputDevice2_Release(p) (p)->Release() +#define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice2_Acquire(p) (p)->Acquire() +#define IDirectInputDevice2_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice2_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice2_Poll(p) (p)->Poll() +#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +#if(DIRECTINPUT_VERSION >= 0x0700) +#define DIFEF_DEFAULT 0x00000000 +#define DIFEF_INCLUDENONSTANDARD 0x00000001 +#define DIFEF_MODIFYIFNEEDED 0x00000010 + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputDevice7W + +DECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice2W methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + + /*** IDirectInputDevice7W methods ***/ + STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; +}; + +typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice7A + +DECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice2A methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + + /*** IDirectInputDevice7A methods ***/ + STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; +}; + +typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A; + +#ifdef UNICODE +#define IID_IDirectInputDevice7 IID_IDirectInputDevice7W +#define IDirectInputDevice7 IDirectInputDevice7W +#define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl +#else +#define IID_IDirectInputDevice7 IID_IDirectInputDevice7A +#define IDirectInputDevice7 IDirectInputDevice7A +#define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl +#endif +typedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) +#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) +#else +#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice7_AddRef(p) (p)->AddRef() +#define IDirectInputDevice7_Release(p) (p)->Release() +#define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice7_Acquire(p) (p)->Acquire() +#define IDirectInputDevice7_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice7_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice7_Poll(p) (p)->Poll() +#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) +#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputDevice8W + +DECLARE_INTERFACE_(IDirectInputDevice8W, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice8W methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW) PURE; +}; + +typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice8A + +DECLARE_INTERFACE_(IDirectInputDevice8A, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice8A methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA) PURE; +}; + +typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A; + +#ifdef UNICODE +#define IID_IDirectInputDevice8 IID_IDirectInputDevice8W +#define IDirectInputDevice8 IDirectInputDevice8W +#define IDirectInputDevice8Vtbl IDirectInputDevice8WVtbl +#else +#define IID_IDirectInputDevice8 IID_IDirectInputDevice8A +#define IDirectInputDevice8 IDirectInputDevice8A +#define IDirectInputDevice8Vtbl IDirectInputDevice8AVtbl +#endif +typedef struct IDirectInputDevice8 *LPDIRECTINPUTDEVICE8; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) +#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) +#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c) +#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c) +#define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a) +#else +#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice8_AddRef(p) (p)->AddRef() +#define IDirectInputDevice8_Release(p) (p)->Release() +#define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice8_Acquire(p) (p)->Acquire() +#define IDirectInputDevice8_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice8_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice8_Poll(p) (p)->Poll() +#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) +#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) +#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c) +#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c) +#define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +/**************************************************************************** + * + * Mouse + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +typedef struct _DIMOUSESTATE { + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[4]; +} DIMOUSESTATE, *LPDIMOUSESTATE; + +#if DIRECTINPUT_VERSION >= 0x0700 +typedef struct _DIMOUSESTATE2 { + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[8]; +} DIMOUSESTATE2, *LPDIMOUSESTATE2; +#endif + + +#define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX) +#define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY) +#define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ) +#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0) +#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1) +#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2) +#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3) +#if (DIRECTINPUT_VERSION >= 0x0700) +#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4) +#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5) +#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6) +#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7) +#endif +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Keyboard + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +/**************************************************************************** + * + * DirectInput keyboard scan codes + * + ****************************************************************************/ +#define DIK_ESCAPE 0x01 +#define DIK_1 0x02 +#define DIK_2 0x03 +#define DIK_3 0x04 +#define DIK_4 0x05 +#define DIK_5 0x06 +#define DIK_6 0x07 +#define DIK_7 0x08 +#define DIK_8 0x09 +#define DIK_9 0x0A +#define DIK_0 0x0B +#define DIK_MINUS 0x0C /* - on main keyboard */ +#define DIK_EQUALS 0x0D +#define DIK_BACK 0x0E /* backspace */ +#define DIK_TAB 0x0F +#define DIK_Q 0x10 +#define DIK_W 0x11 +#define DIK_E 0x12 +#define DIK_R 0x13 +#define DIK_T 0x14 +#define DIK_Y 0x15 +#define DIK_U 0x16 +#define DIK_I 0x17 +#define DIK_O 0x18 +#define DIK_P 0x19 +#define DIK_LBRACKET 0x1A +#define DIK_RBRACKET 0x1B +#define DIK_RETURN 0x1C /* Enter on main keyboard */ +#define DIK_LCONTROL 0x1D +#define DIK_A 0x1E +#define DIK_S 0x1F +#define DIK_D 0x20 +#define DIK_F 0x21 +#define DIK_G 0x22 +#define DIK_H 0x23 +#define DIK_J 0x24 +#define DIK_K 0x25 +#define DIK_L 0x26 +#define DIK_SEMICOLON 0x27 +#define DIK_APOSTROPHE 0x28 +#define DIK_GRAVE 0x29 /* accent grave */ +#define DIK_LSHIFT 0x2A +#define DIK_BACKSLASH 0x2B +#define DIK_Z 0x2C +#define DIK_X 0x2D +#define DIK_C 0x2E +#define DIK_V 0x2F +#define DIK_B 0x30 +#define DIK_N 0x31 +#define DIK_M 0x32 +#define DIK_COMMA 0x33 +#define DIK_PERIOD 0x34 /* . on main keyboard */ +#define DIK_SLASH 0x35 /* / on main keyboard */ +#define DIK_RSHIFT 0x36 +#define DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define DIK_LMENU 0x38 /* left Alt */ +#define DIK_SPACE 0x39 +#define DIK_CAPITAL 0x3A +#define DIK_F1 0x3B +#define DIK_F2 0x3C +#define DIK_F3 0x3D +#define DIK_F4 0x3E +#define DIK_F5 0x3F +#define DIK_F6 0x40 +#define DIK_F7 0x41 +#define DIK_F8 0x42 +#define DIK_F9 0x43 +#define DIK_F10 0x44 +#define DIK_NUMLOCK 0x45 +#define DIK_SCROLL 0x46 /* Scroll Lock */ +#define DIK_NUMPAD7 0x47 +#define DIK_NUMPAD8 0x48 +#define DIK_NUMPAD9 0x49 +#define DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define DIK_NUMPAD4 0x4B +#define DIK_NUMPAD5 0x4C +#define DIK_NUMPAD6 0x4D +#define DIK_ADD 0x4E /* + on numeric keypad */ +#define DIK_NUMPAD1 0x4F +#define DIK_NUMPAD2 0x50 +#define DIK_NUMPAD3 0x51 +#define DIK_NUMPAD0 0x52 +#define DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define DIK_F11 0x57 +#define DIK_F12 0x58 +#define DIK_F13 0x64 /* (NEC PC98) */ +#define DIK_F14 0x65 /* (NEC PC98) */ +#define DIK_F15 0x66 /* (NEC PC98) */ +#define DIK_KANA 0x70 /* (Japanese keyboard) */ +#define DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ +#define DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define DIK_YEN 0x7D /* (Japanese keyboard) */ +#define DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ +#define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define DIK_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +#define DIK_AT 0x91 /* (NEC PC98) */ +#define DIK_COLON 0x92 /* (NEC PC98) */ +#define DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define DIK_STOP 0x95 /* (NEC PC98) */ +#define DIK_AX 0x96 /* (Japan AX) */ +#define DIK_UNLABELED 0x97 /* (J3100) */ +#define DIK_NEXTTRACK 0x99 /* Next Track */ +#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define DIK_RCONTROL 0x9D +#define DIK_MUTE 0xA0 /* Mute */ +#define DIK_CALCULATOR 0xA1 /* Calculator */ +#define DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define DIK_VOLUMEUP 0xB0 /* Volume + */ +#define DIK_WEBHOME 0xB2 /* Web home */ +#define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define DIK_SYSRQ 0xB7 +#define DIK_RMENU 0xB8 /* right Alt */ +#define DIK_PAUSE 0xC5 /* Pause */ +#define DIK_HOME 0xC7 /* Home on arrow keypad */ +#define DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define DIK_END 0xCF /* End on arrow keypad */ +#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define DIK_LWIN 0xDB /* Left Windows key */ +#define DIK_RWIN 0xDC /* Right Windows key */ +#define DIK_APPS 0xDD /* AppMenu key */ +#define DIK_POWER 0xDE /* System Power */ +#define DIK_SLEEP 0xDF /* System Sleep */ +#define DIK_WAKE 0xE3 /* System Wake */ +#define DIK_WEBSEARCH 0xE5 /* Web Search */ +#define DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define DIK_WEBSTOP 0xE8 /* Web Stop */ +#define DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define DIK_WEBBACK 0xEA /* Web Back */ +#define DIK_MYCOMPUTER 0xEB /* My Computer */ +#define DIK_MAIL 0xEC /* Mail */ +#define DIK_MEDIASELECT 0xED /* Media Select */ + +/* + * Alternate names for keys, to facilitate transition from DOS. + */ +#define DIK_BACKSPACE DIK_BACK /* backspace */ +#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ +#define DIK_LALT DIK_LMENU /* left Alt */ +#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ +#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ +#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ +#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ +#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ +#define DIK_RALT DIK_RMENU /* right Alt */ +#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ +#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ +#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ +#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ +#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ +#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ + +/* + * Alternate names for keys originally not used on US keyboards. + */ +#define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Joystick + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +typedef struct DIJOYSTATE { + LONG lX; /* x-axis position */ + LONG lY; /* y-axis position */ + LONG lZ; /* z-axis position */ + LONG lRx; /* x-axis rotation */ + LONG lRy; /* y-axis rotation */ + LONG lRz; /* z-axis rotation */ + LONG rglSlider[2]; /* extra axes positions */ + DWORD rgdwPOV[4]; /* POV directions */ + BYTE rgbButtons[32]; /* 32 buttons */ +} DIJOYSTATE, *LPDIJOYSTATE; + +typedef struct DIJOYSTATE2 { + LONG lX; /* x-axis position */ + LONG lY; /* y-axis position */ + LONG lZ; /* z-axis position */ + LONG lRx; /* x-axis rotation */ + LONG lRy; /* y-axis rotation */ + LONG lRz; /* z-axis rotation */ + LONG rglSlider[2]; /* extra axes positions */ + DWORD rgdwPOV[4]; /* POV directions */ + BYTE rgbButtons[128]; /* 128 buttons */ + LONG lVX; /* x-axis velocity */ + LONG lVY; /* y-axis velocity */ + LONG lVZ; /* z-axis velocity */ + LONG lVRx; /* x-axis angular velocity */ + LONG lVRy; /* y-axis angular velocity */ + LONG lVRz; /* z-axis angular velocity */ + LONG rglVSlider[2]; /* extra axes velocities */ + LONG lAX; /* x-axis acceleration */ + LONG lAY; /* y-axis acceleration */ + LONG lAZ; /* z-axis acceleration */ + LONG lARx; /* x-axis angular acceleration */ + LONG lARy; /* y-axis angular acceleration */ + LONG lARz; /* z-axis angular acceleration */ + LONG rglASlider[2]; /* extra axes accelerations */ + LONG lFX; /* x-axis force */ + LONG lFY; /* y-axis force */ + LONG lFZ; /* z-axis force */ + LONG lFRx; /* x-axis torque */ + LONG lFRy; /* y-axis torque */ + LONG lFRz; /* z-axis torque */ + LONG rglFSlider[2]; /* extra axes forces */ +} DIJOYSTATE2, *LPDIJOYSTATE2; + +#define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX) +#define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY) +#define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ) +#define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx) +#define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy) +#define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz) +#define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \ + (n) * sizeof(LONG)) +#define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \ + (n) * sizeof(DWORD)) +#define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n)) +#define DIJOFS_BUTTON0 DIJOFS_BUTTON(0) +#define DIJOFS_BUTTON1 DIJOFS_BUTTON(1) +#define DIJOFS_BUTTON2 DIJOFS_BUTTON(2) +#define DIJOFS_BUTTON3 DIJOFS_BUTTON(3) +#define DIJOFS_BUTTON4 DIJOFS_BUTTON(4) +#define DIJOFS_BUTTON5 DIJOFS_BUTTON(5) +#define DIJOFS_BUTTON6 DIJOFS_BUTTON(6) +#define DIJOFS_BUTTON7 DIJOFS_BUTTON(7) +#define DIJOFS_BUTTON8 DIJOFS_BUTTON(8) +#define DIJOFS_BUTTON9 DIJOFS_BUTTON(9) +#define DIJOFS_BUTTON10 DIJOFS_BUTTON(10) +#define DIJOFS_BUTTON11 DIJOFS_BUTTON(11) +#define DIJOFS_BUTTON12 DIJOFS_BUTTON(12) +#define DIJOFS_BUTTON13 DIJOFS_BUTTON(13) +#define DIJOFS_BUTTON14 DIJOFS_BUTTON(14) +#define DIJOFS_BUTTON15 DIJOFS_BUTTON(15) +#define DIJOFS_BUTTON16 DIJOFS_BUTTON(16) +#define DIJOFS_BUTTON17 DIJOFS_BUTTON(17) +#define DIJOFS_BUTTON18 DIJOFS_BUTTON(18) +#define DIJOFS_BUTTON19 DIJOFS_BUTTON(19) +#define DIJOFS_BUTTON20 DIJOFS_BUTTON(20) +#define DIJOFS_BUTTON21 DIJOFS_BUTTON(21) +#define DIJOFS_BUTTON22 DIJOFS_BUTTON(22) +#define DIJOFS_BUTTON23 DIJOFS_BUTTON(23) +#define DIJOFS_BUTTON24 DIJOFS_BUTTON(24) +#define DIJOFS_BUTTON25 DIJOFS_BUTTON(25) +#define DIJOFS_BUTTON26 DIJOFS_BUTTON(26) +#define DIJOFS_BUTTON27 DIJOFS_BUTTON(27) +#define DIJOFS_BUTTON28 DIJOFS_BUTTON(28) +#define DIJOFS_BUTTON29 DIJOFS_BUTTON(29) +#define DIJOFS_BUTTON30 DIJOFS_BUTTON(30) +#define DIJOFS_BUTTON31 DIJOFS_BUTTON(31) + + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * IDirectInput + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +#define DIENUM_STOP 0 +#define DIENUM_CONTINUE 1 + +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKW +#else +#define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKA +#endif // !UNICODE +typedef BOOL (FAR PASCAL * LPDICONFIGUREDEVICESCALLBACK)(IUnknown FAR *, LPVOID); + +#define DIEDFL_ALLDEVICES 0x00000000 +#define DIEDFL_ATTACHEDONLY 0x00000001 +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIEDFL_FORCEFEEDBACK 0x00000100 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIEDFL_INCLUDEALIASES 0x00010000 +#define DIEDFL_INCLUDEPHANTOMS 0x00020000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDFL_INCLUDEHIDDEN 0x00040000 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +#if(DIRECTINPUT_VERSION >= 0x0800) +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA, LPDIRECTINPUTDEVICE8A, DWORD, DWORD, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW, LPDIRECTINPUTDEVICE8W, DWORD, DWORD, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBW +#else +#define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBA +#endif // !UNICODE +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDBS_MAPPEDPRI1 0x00000001 +#define DIEDBS_MAPPEDPRI2 0x00000002 +#define DIEDBS_RECENTDEVICE 0x00000010 +#define DIEDBS_NEWDEVICE 0x00000020 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDBSFL_ATTACHEDONLY 0x00000000 +#define DIEDBSFL_THISUSER 0x00000010 +#define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK +#define DIEDBSFL_AVAILABLEDEVICES 0x00001000 +#define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000 +#define DIEDBSFL_NONGAMINGDEVICES 0x00004000 +#define DIEDBSFL_VALID 0x00007110 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#undef INTERFACE +#define INTERFACE IDirectInputW + +DECLARE_INTERFACE_(IDirectInputW, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputW methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; +}; + +typedef struct IDirectInputW *LPDIRECTINPUTW; + +#undef INTERFACE +#define INTERFACE IDirectInputA + +DECLARE_INTERFACE_(IDirectInputA, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputA methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; +}; + +typedef struct IDirectInputA *LPDIRECTINPUTA; + +#ifdef UNICODE +#define IID_IDirectInput IID_IDirectInputW +#define IDirectInput IDirectInputW +#define IDirectInputVtbl IDirectInputWVtbl +#else +#define IID_IDirectInput IID_IDirectInputA +#define IDirectInput IDirectInputA +#define IDirectInputVtbl IDirectInputAVtbl +#endif +typedef struct IDirectInput *LPDIRECTINPUT; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#else +#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput_AddRef(p) (p)->AddRef() +#define IDirectInput_Release(p) (p)->Release() +#define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b) +#endif + +#undef INTERFACE +#define INTERFACE IDirectInput2W + +DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputW methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + + /*** IDirectInput2W methods ***/ + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; +}; + +typedef struct IDirectInput2W *LPDIRECTINPUT2W; + +#undef INTERFACE +#define INTERFACE IDirectInput2A + +DECLARE_INTERFACE_(IDirectInput2A, IDirectInputA) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputA methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + + /*** IDirectInput2A methods ***/ + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; +}; + +typedef struct IDirectInput2A *LPDIRECTINPUT2A; + +#ifdef UNICODE +#define IID_IDirectInput2 IID_IDirectInput2W +#define IDirectInput2 IDirectInput2W +#define IDirectInput2Vtbl IDirectInput2WVtbl +#else +#define IID_IDirectInput2 IID_IDirectInput2A +#define IDirectInput2 IDirectInput2A +#define IDirectInput2Vtbl IDirectInput2AVtbl +#endif +typedef struct IDirectInput2 *LPDIRECTINPUT2; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#else +#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput2_AddRef(p) (p)->AddRef() +#define IDirectInput2_Release(p) (p)->Release() +#define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#endif + + +#undef INTERFACE +#define INTERFACE IDirectInput7W + +DECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput2W methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; + + /*** IDirectInput7W methods ***/ + STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; +}; + +typedef struct IDirectInput7W *LPDIRECTINPUT7W; + +#undef INTERFACE +#define INTERFACE IDirectInput7A + +DECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput2A methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; + + /*** IDirectInput7A methods ***/ + STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; +}; + +typedef struct IDirectInput7A *LPDIRECTINPUT7A; + +#ifdef UNICODE +#define IID_IDirectInput7 IID_IDirectInput7W +#define IDirectInput7 IDirectInput7W +#define IDirectInput7Vtbl IDirectInput7WVtbl +#else +#define IID_IDirectInput7 IID_IDirectInput7A +#define IDirectInput7 IDirectInput7A +#define IDirectInput7Vtbl IDirectInput7AVtbl +#endif +typedef struct IDirectInput7 *LPDIRECTINPUT7; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d) +#else +#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput7_AddRef(p) (p)->AddRef() +#define IDirectInput7_Release(p) (p)->Release() +#define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d) +#endif + +#if(DIRECTINPUT_VERSION >= 0x0800) +#undef INTERFACE +#define INTERFACE IDirectInput8W + +DECLARE_INTERFACE_(IDirectInput8W, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput8W methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8W *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR,LPDIACTIONFORMATW,LPDIENUMDEVICESBYSEMANTICSCBW,LPVOID,DWORD) PURE; + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSW,DWORD,LPVOID) PURE; +}; + +typedef struct IDirectInput8W *LPDIRECTINPUT8W; + +#undef INTERFACE +#define INTERFACE IDirectInput8A + +DECLARE_INTERFACE_(IDirectInput8A, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput8A methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8A *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR,LPDIACTIONFORMATA,LPDIENUMDEVICESBYSEMANTICSCBA,LPVOID,DWORD) PURE; + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSA,DWORD,LPVOID) PURE; +}; + +typedef struct IDirectInput8A *LPDIRECTINPUT8A; + +#ifdef UNICODE +#define IID_IDirectInput8 IID_IDirectInput8W +#define IDirectInput8 IDirectInput8W +#define IDirectInput8Vtbl IDirectInput8WVtbl +#else +#define IID_IDirectInput8 IID_IDirectInput8A +#define IDirectInput8 IDirectInput8A +#define IDirectInput8Vtbl IDirectInput8AVtbl +#endif +typedef struct IDirectInput8 *LPDIRECTINPUT8; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput8_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e) +#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d) +#else +#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput8_AddRef(p) (p)->AddRef() +#define IDirectInput8_Release(p) (p)->Release() +#define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e) +#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d) +#endif +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if DIRECTINPUT_VERSION > 0x0700 + +extern HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); + +#else +extern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter); +extern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter); +#ifdef UNICODE +#define DirectInputCreate DirectInputCreateW +#else +#define DirectInputCreate DirectInputCreateA +#endif // !UNICODE + +extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); + +#endif /* DIRECTINPUT_VERSION > 0x700 */ + +#endif /* DIJ_RINGZERO */ + + +/**************************************************************************** + * + * Return Codes + * + ****************************************************************************/ + +/* + * The operation completed successfully. + */ +#define DI_OK S_OK + +/* + * The device exists but is not currently attached. + */ +#define DI_NOTATTACHED S_FALSE + +/* + * The device buffer overflowed. Some input was lost. + */ +#define DI_BUFFEROVERFLOW S_FALSE + +/* + * The change in device properties had no effect. + */ +#define DI_PROPNOEFFECT S_FALSE + +/* + * The operation had no effect. + */ +#define DI_NOEFFECT S_FALSE + +/* + * The device is a polled device. As a result, device buffering + * will not collect any data and event notifications will not be + * signalled until GetDeviceState is called. + */ +#define DI_POLLEDDEVICE ((HRESULT)0x00000002L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but the effect was not + * downloaded because the device is not exclusively acquired + * or because the DIEP_NODOWNLOAD flag was passed. + */ +#define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but in order to change + * the parameters, the effect needed to be restarted. + */ +#define DI_EFFECTRESTARTED ((HRESULT)0x00000004L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but some of them were + * beyond the capabilities of the device and were truncated. + */ +#define DI_TRUNCATED ((HRESULT)0x00000008L) + +/* + * The settings have been successfully applied but could not be + * persisted. + */ +#define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000BL) + +/* + * Equal to DI_EFFECTRESTARTED | DI_TRUNCATED. + */ +#define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000CL) + +/* + * A SUCCESS code indicating that settings cannot be modified. + */ +#define DI_WRITEPROTECT ((HRESULT)0x00000013L) + +/* + * The application requires a newer version of DirectInput. + */ +#define DIERR_OLDDIRECTINPUTVERSION \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION) + +/* + * The application was written for an unsupported prerelease version + * of DirectInput. + */ +#define DIERR_BETADIRECTINPUTVERSION \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP) + +/* + * The object could not be created due to an incompatible driver version + * or mismatched or incomplete driver components. + */ +#define DIERR_BADDRIVERVER \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL) + +/* + * The device or device instance or effect is not registered with DirectInput. + */ +#define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG + +/* + * The requested object does not exist. + */ +#define DIERR_NOTFOUND \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) + +/* + * The requested object does not exist. + */ +#define DIERR_OBJECTNOTFOUND \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) + +/* + * An invalid parameter was passed to the returning function, + * or the object was not in a state that admitted the function + * to be called. + */ +#define DIERR_INVALIDPARAM E_INVALIDARG + +/* + * The specified interface is not supported by the object + */ +#define DIERR_NOINTERFACE E_NOINTERFACE + +/* + * An undetermined error occured inside the DInput subsystem + */ +#define DIERR_GENERIC E_FAIL + +/* + * The DInput subsystem couldn't allocate sufficient memory to complete the + * caller's request. + */ +#define DIERR_OUTOFMEMORY E_OUTOFMEMORY + +/* + * The function called is not supported at this time + */ +#define DIERR_UNSUPPORTED E_NOTIMPL + +/* + * This object has not been initialized + */ +#define DIERR_NOTINITIALIZED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY) + +/* + * This object is already initialized + */ +#define DIERR_ALREADYINITIALIZED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED) + +/* + * This object does not support aggregation + */ +#define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION + +/* + * Another app has a higher priority level, preventing this call from + * succeeding. + */ +#define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED + +/* + * Access to the device has been lost. It must be re-acquired. + */ +#define DIERR_INPUTLOST \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT) + +/* + * The operation cannot be performed while the device is acquired. + */ +#define DIERR_ACQUIRED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY) + +/* + * The operation cannot be performed unless the device is acquired. + */ +#define DIERR_NOTACQUIRED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS) + +/* + * The specified property cannot be changed. + */ +#define DIERR_READONLY E_ACCESSDENIED + +/* + * The device already has an event notification associated with it. + */ +#define DIERR_HANDLEEXISTS E_ACCESSDENIED + +/* + * Data is not yet available. + */ +#ifndef E_PENDING +#define E_PENDING 0x8000000AL +#endif + +/* + * Unable to IDirectInputJoyConfig_Acquire because the user + * does not have sufficient privileges to change the joystick + * configuration. + */ +#define DIERR_INSUFFICIENTPRIVS 0x80040200L + +/* + * The device is full. + */ +#define DIERR_DEVICEFULL 0x80040201L + +/* + * Not all the requested information fit into the buffer. + */ +#define DIERR_MOREDATA 0x80040202L + +/* + * The effect is not downloaded. + */ +#define DIERR_NOTDOWNLOADED 0x80040203L + +/* + * The device cannot be reinitialized because there are still effects + * attached to it. + */ +#define DIERR_HASEFFECTS 0x80040204L + +/* + * The operation cannot be performed unless the device is acquired + * in DISCL_EXCLUSIVE mode. + */ +#define DIERR_NOTEXCLUSIVEACQUIRED 0x80040205L + +/* + * The effect could not be downloaded because essential information + * is missing. For example, no axes have been associated with the + * effect, or no type-specific information has been created. + */ +#define DIERR_INCOMPLETEEFFECT 0x80040206L + +/* + * Attempted to read buffered device data from a device that is + * not buffered. + */ +#define DIERR_NOTBUFFERED 0x80040207L + +/* + * An attempt was made to modify parameters of an effect while it is + * playing. Not all hardware devices support altering the parameters + * of an effect while it is playing. + */ +#define DIERR_EFFECTPLAYING 0x80040208L + +/* + * The operation could not be completed because the device is not + * plugged in. + */ +#define DIERR_UNPLUGGED 0x80040209L + +/* + * SendDeviceData failed because more information was requested + * to be sent than can be sent to the device. Some devices have + * restrictions on how much data can be sent to them. (For example, + * there might be a limit on the number of buttons that can be + * pressed at once.) + */ +#define DIERR_REPORTFULL 0x8004020AL + + +/* + * A mapper file function failed because reading or writing the user or IHV + * settings file failed. + */ +#define DIERR_MAPFILEFAIL 0x8004020BL + + +/*--- DINPUT Mapper Definitions: New for Dx8 ---*/ + + +/*--- Keyboard + Physical Keyboard Device ---*/ + +#define DIKEYBOARD_ESCAPE 0x81000401 +#define DIKEYBOARD_1 0x81000402 +#define DIKEYBOARD_2 0x81000403 +#define DIKEYBOARD_3 0x81000404 +#define DIKEYBOARD_4 0x81000405 +#define DIKEYBOARD_5 0x81000406 +#define DIKEYBOARD_6 0x81000407 +#define DIKEYBOARD_7 0x81000408 +#define DIKEYBOARD_8 0x81000409 +#define DIKEYBOARD_9 0x8100040A +#define DIKEYBOARD_0 0x8100040B +#define DIKEYBOARD_MINUS 0x8100040C /* - on main keyboard */ +#define DIKEYBOARD_EQUALS 0x8100040D +#define DIKEYBOARD_BACK 0x8100040E /* backspace */ +#define DIKEYBOARD_TAB 0x8100040F +#define DIKEYBOARD_Q 0x81000410 +#define DIKEYBOARD_W 0x81000411 +#define DIKEYBOARD_E 0x81000412 +#define DIKEYBOARD_R 0x81000413 +#define DIKEYBOARD_T 0x81000414 +#define DIKEYBOARD_Y 0x81000415 +#define DIKEYBOARD_U 0x81000416 +#define DIKEYBOARD_I 0x81000417 +#define DIKEYBOARD_O 0x81000418 +#define DIKEYBOARD_P 0x81000419 +#define DIKEYBOARD_LBRACKET 0x8100041A +#define DIKEYBOARD_RBRACKET 0x8100041B +#define DIKEYBOARD_RETURN 0x8100041C /* Enter on main keyboard */ +#define DIKEYBOARD_LCONTROL 0x8100041D +#define DIKEYBOARD_A 0x8100041E +#define DIKEYBOARD_S 0x8100041F +#define DIKEYBOARD_D 0x81000420 +#define DIKEYBOARD_F 0x81000421 +#define DIKEYBOARD_G 0x81000422 +#define DIKEYBOARD_H 0x81000423 +#define DIKEYBOARD_J 0x81000424 +#define DIKEYBOARD_K 0x81000425 +#define DIKEYBOARD_L 0x81000426 +#define DIKEYBOARD_SEMICOLON 0x81000427 +#define DIKEYBOARD_APOSTROPHE 0x81000428 +#define DIKEYBOARD_GRAVE 0x81000429 /* accent grave */ +#define DIKEYBOARD_LSHIFT 0x8100042A +#define DIKEYBOARD_BACKSLASH 0x8100042B +#define DIKEYBOARD_Z 0x8100042C +#define DIKEYBOARD_X 0x8100042D +#define DIKEYBOARD_C 0x8100042E +#define DIKEYBOARD_V 0x8100042F +#define DIKEYBOARD_B 0x81000430 +#define DIKEYBOARD_N 0x81000431 +#define DIKEYBOARD_M 0x81000432 +#define DIKEYBOARD_COMMA 0x81000433 +#define DIKEYBOARD_PERIOD 0x81000434 /* . on main keyboard */ +#define DIKEYBOARD_SLASH 0x81000435 /* / on main keyboard */ +#define DIKEYBOARD_RSHIFT 0x81000436 +#define DIKEYBOARD_MULTIPLY 0x81000437 /* * on numeric keypad */ +#define DIKEYBOARD_LMENU 0x81000438 /* left Alt */ +#define DIKEYBOARD_SPACE 0x81000439 +#define DIKEYBOARD_CAPITAL 0x8100043A +#define DIKEYBOARD_F1 0x8100043B +#define DIKEYBOARD_F2 0x8100043C +#define DIKEYBOARD_F3 0x8100043D +#define DIKEYBOARD_F4 0x8100043E +#define DIKEYBOARD_F5 0x8100043F +#define DIKEYBOARD_F6 0x81000440 +#define DIKEYBOARD_F7 0x81000441 +#define DIKEYBOARD_F8 0x81000442 +#define DIKEYBOARD_F9 0x81000443 +#define DIKEYBOARD_F10 0x81000444 +#define DIKEYBOARD_NUMLOCK 0x81000445 +#define DIKEYBOARD_SCROLL 0x81000446 /* Scroll Lock */ +#define DIKEYBOARD_NUMPAD7 0x81000447 +#define DIKEYBOARD_NUMPAD8 0x81000448 +#define DIKEYBOARD_NUMPAD9 0x81000449 +#define DIKEYBOARD_SUBTRACT 0x8100044A /* - on numeric keypad */ +#define DIKEYBOARD_NUMPAD4 0x8100044B +#define DIKEYBOARD_NUMPAD5 0x8100044C +#define DIKEYBOARD_NUMPAD6 0x8100044D +#define DIKEYBOARD_ADD 0x8100044E /* + on numeric keypad */ +#define DIKEYBOARD_NUMPAD1 0x8100044F +#define DIKEYBOARD_NUMPAD2 0x81000450 +#define DIKEYBOARD_NUMPAD3 0x81000451 +#define DIKEYBOARD_NUMPAD0 0x81000452 +#define DIKEYBOARD_DECIMAL 0x81000453 /* . on numeric keypad */ +#define DIKEYBOARD_OEM_102 0x81000456 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define DIKEYBOARD_F11 0x81000457 +#define DIKEYBOARD_F12 0x81000458 +#define DIKEYBOARD_F13 0x81000464 /* (NEC PC98) */ +#define DIKEYBOARD_F14 0x81000465 /* (NEC PC98) */ +#define DIKEYBOARD_F15 0x81000466 /* (NEC PC98) */ +#define DIKEYBOARD_KANA 0x81000470 /* (Japanese keyboard) */ +#define DIKEYBOARD_ABNT_C1 0x81000473 /* /? on Brazilian keyboard */ +#define DIKEYBOARD_CONVERT 0x81000479 /* (Japanese keyboard) */ +#define DIKEYBOARD_NOCONVERT 0x8100047B /* (Japanese keyboard) */ +#define DIKEYBOARD_YEN 0x8100047D /* (Japanese keyboard) */ +#define DIKEYBOARD_ABNT_C2 0x8100047E /* Numpad . on Brazilian keyboard */ +#define DIKEYBOARD_NUMPADEQUALS 0x8100048D /* = on numeric keypad (NEC PC98) */ +#define DIKEYBOARD_PREVTRACK 0x81000490 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +#define DIKEYBOARD_AT 0x81000491 /* (NEC PC98) */ +#define DIKEYBOARD_COLON 0x81000492 /* (NEC PC98) */ +#define DIKEYBOARD_UNDERLINE 0x81000493 /* (NEC PC98) */ +#define DIKEYBOARD_KANJI 0x81000494 /* (Japanese keyboard) */ +#define DIKEYBOARD_STOP 0x81000495 /* (NEC PC98) */ +#define DIKEYBOARD_AX 0x81000496 /* (Japan AX) */ +#define DIKEYBOARD_UNLABELED 0x81000497 /* (J3100) */ +#define DIKEYBOARD_NEXTTRACK 0x81000499 /* Next Track */ +#define DIKEYBOARD_NUMPADENTER 0x8100049C /* Enter on numeric keypad */ +#define DIKEYBOARD_RCONTROL 0x8100049D +#define DIKEYBOARD_MUTE 0x810004A0 /* Mute */ +#define DIKEYBOARD_CALCULATOR 0x810004A1 /* Calculator */ +#define DIKEYBOARD_PLAYPAUSE 0x810004A2 /* Play / Pause */ +#define DIKEYBOARD_MEDIASTOP 0x810004A4 /* Media Stop */ +#define DIKEYBOARD_VOLUMEDOWN 0x810004AE /* Volume - */ +#define DIKEYBOARD_VOLUMEUP 0x810004B0 /* Volume + */ +#define DIKEYBOARD_WEBHOME 0x810004B2 /* Web home */ +#define DIKEYBOARD_NUMPADCOMMA 0x810004B3 /* , on numeric keypad (NEC PC98) */ +#define DIKEYBOARD_DIVIDE 0x810004B5 /* / on numeric keypad */ +#define DIKEYBOARD_SYSRQ 0x810004B7 +#define DIKEYBOARD_RMENU 0x810004B8 /* right Alt */ +#define DIKEYBOARD_PAUSE 0x810004C5 /* Pause */ +#define DIKEYBOARD_HOME 0x810004C7 /* Home on arrow keypad */ +#define DIKEYBOARD_UP 0x810004C8 /* UpArrow on arrow keypad */ +#define DIKEYBOARD_PRIOR 0x810004C9 /* PgUp on arrow keypad */ +#define DIKEYBOARD_LEFT 0x810004CB /* LeftArrow on arrow keypad */ +#define DIKEYBOARD_RIGHT 0x810004CD /* RightArrow on arrow keypad */ +#define DIKEYBOARD_END 0x810004CF /* End on arrow keypad */ +#define DIKEYBOARD_DOWN 0x810004D0 /* DownArrow on arrow keypad */ +#define DIKEYBOARD_NEXT 0x810004D1 /* PgDn on arrow keypad */ +#define DIKEYBOARD_INSERT 0x810004D2 /* Insert on arrow keypad */ +#define DIKEYBOARD_DELETE 0x810004D3 /* Delete on arrow keypad */ +#define DIKEYBOARD_LWIN 0x810004DB /* Left Windows key */ +#define DIKEYBOARD_RWIN 0x810004DC /* Right Windows key */ +#define DIKEYBOARD_APPS 0x810004DD /* AppMenu key */ +#define DIKEYBOARD_POWER 0x810004DE /* System Power */ +#define DIKEYBOARD_SLEEP 0x810004DF /* System Sleep */ +#define DIKEYBOARD_WAKE 0x810004E3 /* System Wake */ +#define DIKEYBOARD_WEBSEARCH 0x810004E5 /* Web Search */ +#define DIKEYBOARD_WEBFAVORITES 0x810004E6 /* Web Favorites */ +#define DIKEYBOARD_WEBREFRESH 0x810004E7 /* Web Refresh */ +#define DIKEYBOARD_WEBSTOP 0x810004E8 /* Web Stop */ +#define DIKEYBOARD_WEBFORWARD 0x810004E9 /* Web Forward */ +#define DIKEYBOARD_WEBBACK 0x810004EA /* Web Back */ +#define DIKEYBOARD_MYCOMPUTER 0x810004EB /* My Computer */ +#define DIKEYBOARD_MAIL 0x810004EC /* Mail */ +#define DIKEYBOARD_MEDIASELECT 0x810004ED /* Media Select */ + + +/*--- MOUSE + Physical Mouse Device ---*/ + +#define DIMOUSE_XAXISAB (0x82000200 |DIMOFS_X ) /* X Axis-absolute: Some mice natively report absolute coordinates */ +#define DIMOUSE_YAXISAB (0x82000200 |DIMOFS_Y ) /* Y Axis-absolute: Some mice natively report absolute coordinates */ +#define DIMOUSE_XAXIS (0x82000300 |DIMOFS_X ) /* X Axis */ +#define DIMOUSE_YAXIS (0x82000300 |DIMOFS_Y ) /* Y Axis */ +#define DIMOUSE_WHEEL (0x82000300 |DIMOFS_Z ) /* Z Axis */ +#define DIMOUSE_BUTTON0 (0x82000400 |DIMOFS_BUTTON0) /* Button 0 */ +#define DIMOUSE_BUTTON1 (0x82000400 |DIMOFS_BUTTON1) /* Button 1 */ +#define DIMOUSE_BUTTON2 (0x82000400 |DIMOFS_BUTTON2) /* Button 2 */ +#define DIMOUSE_BUTTON3 (0x82000400 |DIMOFS_BUTTON3) /* Button 3 */ +#define DIMOUSE_BUTTON4 (0x82000400 |DIMOFS_BUTTON4) /* Button 4 */ +#define DIMOUSE_BUTTON5 (0x82000400 |DIMOFS_BUTTON5) /* Button 5 */ +#define DIMOUSE_BUTTON6 (0x82000400 |DIMOFS_BUTTON6) /* Button 6 */ +#define DIMOUSE_BUTTON7 (0x82000400 |DIMOFS_BUTTON7) /* Button 7 */ + + +/*--- VOICE + Physical Dplay Voice Device ---*/ + +#define DIVOICE_CHANNEL1 0x83000401 +#define DIVOICE_CHANNEL2 0x83000402 +#define DIVOICE_CHANNEL3 0x83000403 +#define DIVOICE_CHANNEL4 0x83000404 +#define DIVOICE_CHANNEL5 0x83000405 +#define DIVOICE_CHANNEL6 0x83000406 +#define DIVOICE_CHANNEL7 0x83000407 +#define DIVOICE_CHANNEL8 0x83000408 +#define DIVOICE_TEAM 0x83000409 +#define DIVOICE_ALL 0x8300040A +#define DIVOICE_RECORDMUTE 0x8300040B +#define DIVOICE_PLAYBACKMUTE 0x8300040C +#define DIVOICE_TRANSMIT 0x8300040D + +#define DIVOICE_VOICECOMMAND 0x83000410 + + +/*--- Driving Simulator - Racing + Vehicle control is primary objective ---*/ +#define DIVIRTUAL_DRIVING_RACE 0x01000000 +#define DIAXIS_DRIVINGR_STEER 0x01008A01 /* Steering */ +#define DIAXIS_DRIVINGR_ACCELERATE 0x01039202 /* Accelerate */ +#define DIAXIS_DRIVINGR_BRAKE 0x01041203 /* Brake-Axis */ +#define DIBUTTON_DRIVINGR_SHIFTUP 0x01000C01 /* Shift to next higher gear */ +#define DIBUTTON_DRIVINGR_SHIFTDOWN 0x01000C02 /* Shift to next lower gear */ +#define DIBUTTON_DRIVINGR_VIEW 0x01001C03 /* Cycle through view options */ +#define DIBUTTON_DRIVINGR_MENU 0x010004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_DRIVINGR_ACCEL_AND_BRAKE 0x01014A04 /* Some devices combine accelerate and brake in a single axis */ +#define DIHATSWITCH_DRIVINGR_GLANCE 0x01004601 /* Look around */ +#define DIBUTTON_DRIVINGR_BRAKE 0x01004C04 /* Brake-button */ +#define DIBUTTON_DRIVINGR_DASHBOARD 0x01004405 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGR_AIDS 0x01004406 /* Driver correction aids */ +#define DIBUTTON_DRIVINGR_MAP 0x01004407 /* Display Driving Map */ +#define DIBUTTON_DRIVINGR_BOOST 0x01004408 /* Turbo Boost */ +#define DIBUTTON_DRIVINGR_PIT 0x01004409 /* Pit stop notification */ +#define DIBUTTON_DRIVINGR_ACCELERATE_LINK 0x0103D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGR_STEER_LEFT_LINK 0x0100CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGR_STEER_RIGHT_LINK 0x0100CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK 0x0107C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK 0x0107C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGR_DEVICE 0x010044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGR_PAUSE 0x010044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Combat + Combat from within a vehicle is primary objective ---*/ +#define DIVIRTUAL_DRIVING_COMBAT 0x02000000 +#define DIAXIS_DRIVINGC_STEER 0x02008A01 /* Steering */ +#define DIAXIS_DRIVINGC_ACCELERATE 0x02039202 /* Accelerate */ +#define DIAXIS_DRIVINGC_BRAKE 0x02041203 /* Brake-axis */ +#define DIBUTTON_DRIVINGC_FIRE 0x02000C01 /* Fire */ +#define DIBUTTON_DRIVINGC_WEAPONS 0x02000C02 /* Select next weapon */ +#define DIBUTTON_DRIVINGC_TARGET 0x02000C03 /* Select next available target */ +#define DIBUTTON_DRIVINGC_MENU 0x020004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_DRIVINGC_ACCEL_AND_BRAKE 0x02014A04 /* Some devices combine accelerate and brake in a single axis */ +#define DIHATSWITCH_DRIVINGC_GLANCE 0x02004601 /* Look around */ +#define DIBUTTON_DRIVINGC_SHIFTUP 0x02004C04 /* Shift to next higher gear */ +#define DIBUTTON_DRIVINGC_SHIFTDOWN 0x02004C05 /* Shift to next lower gear */ +#define DIBUTTON_DRIVINGC_DASHBOARD 0x02004406 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGC_AIDS 0x02004407 /* Driver correction aids */ +#define DIBUTTON_DRIVINGC_BRAKE 0x02004C08 /* Brake-button */ +#define DIBUTTON_DRIVINGC_FIRESECONDARY 0x02004C09 /* Alternative fire button */ +#define DIBUTTON_DRIVINGC_ACCELERATE_LINK 0x0203D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGC_STEER_LEFT_LINK 0x0200CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGC_STEER_RIGHT_LINK 0x0200CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK 0x0207C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK 0x0207C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGC_DEVICE 0x020044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGC_PAUSE 0x020044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Tank + Combat from withing a tank is primary objective ---*/ +#define DIVIRTUAL_DRIVING_TANK 0x03000000 +#define DIAXIS_DRIVINGT_STEER 0x03008A01 /* Turn tank left / right */ +#define DIAXIS_DRIVINGT_BARREL 0x03010202 /* Raise / lower barrel */ +#define DIAXIS_DRIVINGT_ACCELERATE 0x03039203 /* Accelerate */ +#define DIAXIS_DRIVINGT_ROTATE 0x03020204 /* Turn barrel left / right */ +#define DIBUTTON_DRIVINGT_FIRE 0x03000C01 /* Fire */ +#define DIBUTTON_DRIVINGT_WEAPONS 0x03000C02 /* Select next weapon */ +#define DIBUTTON_DRIVINGT_TARGET 0x03000C03 /* Selects next available target */ +#define DIBUTTON_DRIVINGT_MENU 0x030004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_DRIVINGT_GLANCE 0x03004601 /* Look around */ +#define DIAXIS_DRIVINGT_BRAKE 0x03045205 /* Brake-axis */ +#define DIAXIS_DRIVINGT_ACCEL_AND_BRAKE 0x03014A06 /* Some devices combine accelerate and brake in a single axis */ +#define DIBUTTON_DRIVINGT_VIEW 0x03005C04 /* Cycle through view options */ +#define DIBUTTON_DRIVINGT_DASHBOARD 0x03005C05 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGT_BRAKE 0x03004C06 /* Brake-button */ +#define DIBUTTON_DRIVINGT_FIRESECONDARY 0x03004C07 /* Alternative fire button */ +#define DIBUTTON_DRIVINGT_ACCELERATE_LINK 0x0303D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGT_STEER_LEFT_LINK 0x0300CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGT_STEER_RIGHT_LINK 0x0300CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGT_BARREL_UP_LINK 0x030144E0 /* Fallback Barrel up button */ +#define DIBUTTON_DRIVINGT_BARREL_DOWN_LINK 0x030144E8 /* Fallback Barrel down button */ +#define DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK 0x030244E4 /* Fallback Rotate left button */ +#define DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK 0x030244EC /* Fallback Rotate right button */ +#define DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK 0x0307C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK 0x0307C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGT_DEVICE 0x030044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGT_PAUSE 0x030044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Civilian + Plane control is the primary objective ---*/ +#define DIVIRTUAL_FLYING_CIVILIAN 0x04000000 +#define DIAXIS_FLYINGC_BANK 0x04008A01 /* Roll ship left / right */ +#define DIAXIS_FLYINGC_PITCH 0x04010A02 /* Nose up / down */ +#define DIAXIS_FLYINGC_THROTTLE 0x04039203 /* Throttle */ +#define DIBUTTON_FLYINGC_VIEW 0x04002401 /* Cycle through view options */ +#define DIBUTTON_FLYINGC_DISPLAY 0x04002402 /* Select next dashboard / heads up display option */ +#define DIBUTTON_FLYINGC_GEAR 0x04002C03 /* Gear up / down */ +#define DIBUTTON_FLYINGC_MENU 0x040004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGC_GLANCE 0x04004601 /* Look around */ +#define DIAXIS_FLYINGC_BRAKE 0x04046A04 /* Apply Brake */ +#define DIAXIS_FLYINGC_RUDDER 0x04025205 /* Yaw ship left/right */ +#define DIAXIS_FLYINGC_FLAPS 0x04055A06 /* Flaps */ +#define DIBUTTON_FLYINGC_FLAPSUP 0x04006404 /* Increment stepping up until fully retracted */ +#define DIBUTTON_FLYINGC_FLAPSDOWN 0x04006405 /* Decrement stepping down until fully extended */ +#define DIBUTTON_FLYINGC_BRAKE_LINK 0x04046CE0 /* Fallback brake button */ +#define DIBUTTON_FLYINGC_FASTER_LINK 0x0403D4E0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGC_SLOWER_LINK 0x0403D4E8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGC_GLANCE_LEFT_LINK 0x0407C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK 0x0407C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGC_GLANCE_UP_LINK 0x0407C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGC_GLANCE_DOWN_LINK 0x0407C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGC_DEVICE 0x040044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGC_PAUSE 0x040044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Military + Aerial combat is the primary objective ---*/ +#define DIVIRTUAL_FLYING_MILITARY 0x05000000 +#define DIAXIS_FLYINGM_BANK 0x05008A01 /* Bank - Roll ship left / right */ +#define DIAXIS_FLYINGM_PITCH 0x05010A02 /* Pitch - Nose up / down */ +#define DIAXIS_FLYINGM_THROTTLE 0x05039203 /* Throttle - faster / slower */ +#define DIBUTTON_FLYINGM_FIRE 0x05000C01 /* Fire */ +#define DIBUTTON_FLYINGM_WEAPONS 0x05000C02 /* Select next weapon */ +#define DIBUTTON_FLYINGM_TARGET 0x05000C03 /* Selects next available target */ +#define DIBUTTON_FLYINGM_MENU 0x050004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGM_GLANCE 0x05004601 /* Look around */ +#define DIBUTTON_FLYINGM_COUNTER 0x05005C04 /* Activate counter measures */ +#define DIAXIS_FLYINGM_RUDDER 0x05024A04 /* Rudder - Yaw ship left/right */ +#define DIAXIS_FLYINGM_BRAKE 0x05046205 /* Brake-axis */ +#define DIBUTTON_FLYINGM_VIEW 0x05006405 /* Cycle through view options */ +#define DIBUTTON_FLYINGM_DISPLAY 0x05006406 /* Select next dashboard option */ +#define DIAXIS_FLYINGM_FLAPS 0x05055206 /* Flaps */ +#define DIBUTTON_FLYINGM_FLAPSUP 0x05005407 /* Increment stepping up until fully retracted */ +#define DIBUTTON_FLYINGM_FLAPSDOWN 0x05005408 /* Decrement stepping down until fully extended */ +#define DIBUTTON_FLYINGM_FIRESECONDARY 0x05004C09 /* Alternative fire button */ +#define DIBUTTON_FLYINGM_GEAR 0x0500640A /* Gear up / down */ +#define DIBUTTON_FLYINGM_BRAKE_LINK 0x050464E0 /* Fallback brake button */ +#define DIBUTTON_FLYINGM_FASTER_LINK 0x0503D4E0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGM_SLOWER_LINK 0x0503D4E8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGM_GLANCE_LEFT_LINK 0x0507C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK 0x0507C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGM_GLANCE_UP_LINK 0x0507C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGM_GLANCE_DOWN_LINK 0x0507C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGM_DEVICE 0x050044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGM_PAUSE 0x050044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Combat Helicopter + Combat from helicopter is primary objective ---*/ +#define DIVIRTUAL_FLYING_HELICOPTER 0x06000000 +#define DIAXIS_FLYINGH_BANK 0x06008A01 /* Bank - Roll ship left / right */ +#define DIAXIS_FLYINGH_PITCH 0x06010A02 /* Pitch - Nose up / down */ +#define DIAXIS_FLYINGH_COLLECTIVE 0x06018A03 /* Collective - Blade pitch/power */ +#define DIBUTTON_FLYINGH_FIRE 0x06001401 /* Fire */ +#define DIBUTTON_FLYINGH_WEAPONS 0x06001402 /* Select next weapon */ +#define DIBUTTON_FLYINGH_TARGET 0x06001403 /* Selects next available target */ +#define DIBUTTON_FLYINGH_MENU 0x060004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGH_GLANCE 0x06004601 /* Look around */ +#define DIAXIS_FLYINGH_TORQUE 0x06025A04 /* Torque - Rotate ship around left / right axis */ +#define DIAXIS_FLYINGH_THROTTLE 0x0603DA05 /* Throttle */ +#define DIBUTTON_FLYINGH_COUNTER 0x06005404 /* Activate counter measures */ +#define DIBUTTON_FLYINGH_VIEW 0x06006405 /* Cycle through view options */ +#define DIBUTTON_FLYINGH_GEAR 0x06006406 /* Gear up / down */ +#define DIBUTTON_FLYINGH_FIRESECONDARY 0x06004C07 /* Alternative fire button */ +#define DIBUTTON_FLYINGH_FASTER_LINK 0x0603DCE0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGH_SLOWER_LINK 0x0603DCE8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK 0x0607C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK 0x0607C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGH_GLANCE_UP_LINK 0x0607C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK 0x0607C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGH_DEVICE 0x060044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGH_PAUSE 0x060044FC /* Start / Pause / Restart game */ + +/*--- Space Simulator - Combat + Space Simulator with weapons ---*/ +#define DIVIRTUAL_SPACESIM 0x07000000 +#define DIAXIS_SPACESIM_LATERAL 0x07008201 /* Move ship left / right */ +#define DIAXIS_SPACESIM_MOVE 0x07010202 /* Move ship forward/backward */ +#define DIAXIS_SPACESIM_THROTTLE 0x07038203 /* Throttle - Engine speed */ +#define DIBUTTON_SPACESIM_FIRE 0x07000401 /* Fire */ +#define DIBUTTON_SPACESIM_WEAPONS 0x07000402 /* Select next weapon */ +#define DIBUTTON_SPACESIM_TARGET 0x07000403 /* Selects next available target */ +#define DIBUTTON_SPACESIM_MENU 0x070004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SPACESIM_GLANCE 0x07004601 /* Look around */ +#define DIAXIS_SPACESIM_CLIMB 0x0701C204 /* Climb - Pitch ship up/down */ +#define DIAXIS_SPACESIM_ROTATE 0x07024205 /* Rotate - Turn ship left/right */ +#define DIBUTTON_SPACESIM_VIEW 0x07004404 /* Cycle through view options */ +#define DIBUTTON_SPACESIM_DISPLAY 0x07004405 /* Select next dashboard / heads up display option */ +#define DIBUTTON_SPACESIM_RAISE 0x07004406 /* Raise ship while maintaining current pitch */ +#define DIBUTTON_SPACESIM_LOWER 0x07004407 /* Lower ship while maintaining current pitch */ +#define DIBUTTON_SPACESIM_GEAR 0x07004408 /* Gear up / down */ +#define DIBUTTON_SPACESIM_FIRESECONDARY 0x07004409 /* Alternative fire button */ +#define DIBUTTON_SPACESIM_LEFT_LINK 0x0700C4E4 /* Fallback move left button */ +#define DIBUTTON_SPACESIM_RIGHT_LINK 0x0700C4EC /* Fallback move right button */ +#define DIBUTTON_SPACESIM_FORWARD_LINK 0x070144E0 /* Fallback move forward button */ +#define DIBUTTON_SPACESIM_BACKWARD_LINK 0x070144E8 /* Fallback move backwards button */ +#define DIBUTTON_SPACESIM_FASTER_LINK 0x0703C4E0 /* Fallback throttle up button */ +#define DIBUTTON_SPACESIM_SLOWER_LINK 0x0703C4E8 /* Fallback throttle down button */ +#define DIBUTTON_SPACESIM_TURN_LEFT_LINK 0x070244E4 /* Fallback turn left button */ +#define DIBUTTON_SPACESIM_TURN_RIGHT_LINK 0x070244EC /* Fallback turn right button */ +#define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK 0x0707C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK 0x0707C4EC /* Fallback Glance Right button */ +#define DIBUTTON_SPACESIM_GLANCE_UP_LINK 0x0707C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK 0x0707C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_SPACESIM_DEVICE 0x070044FE /* Show input device and controls */ +#define DIBUTTON_SPACESIM_PAUSE 0x070044FC /* Start / Pause / Restart game */ + +/*--- Fighting - First Person + Hand to Hand combat is primary objective ---*/ +#define DIVIRTUAL_FIGHTING_HAND2HAND 0x08000000 +#define DIAXIS_FIGHTINGH_LATERAL 0x08008201 /* Sidestep left/right */ +#define DIAXIS_FIGHTINGH_MOVE 0x08010202 /* Move forward/backward */ +#define DIBUTTON_FIGHTINGH_PUNCH 0x08000401 /* Punch */ +#define DIBUTTON_FIGHTINGH_KICK 0x08000402 /* Kick */ +#define DIBUTTON_FIGHTINGH_BLOCK 0x08000403 /* Block */ +#define DIBUTTON_FIGHTINGH_CROUCH 0x08000404 /* Crouch */ +#define DIBUTTON_FIGHTINGH_JUMP 0x08000405 /* Jump */ +#define DIBUTTON_FIGHTINGH_SPECIAL1 0x08000406 /* Apply first special move */ +#define DIBUTTON_FIGHTINGH_SPECIAL2 0x08000407 /* Apply second special move */ +#define DIBUTTON_FIGHTINGH_MENU 0x080004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FIGHTINGH_SELECT 0x08004408 /* Select special move */ +#define DIHATSWITCH_FIGHTINGH_SLIDE 0x08004601 /* Look around */ +#define DIBUTTON_FIGHTINGH_DISPLAY 0x08004409 /* Shows next on-screen display option */ +#define DIAXIS_FIGHTINGH_ROTATE 0x08024203 /* Rotate - Turn body left/right */ +#define DIBUTTON_FIGHTINGH_DODGE 0x0800440A /* Dodge */ +#define DIBUTTON_FIGHTINGH_LEFT_LINK 0x0800C4E4 /* Fallback left sidestep button */ +#define DIBUTTON_FIGHTINGH_RIGHT_LINK 0x0800C4EC /* Fallback right sidestep button */ +#define DIBUTTON_FIGHTINGH_FORWARD_LINK 0x080144E0 /* Fallback forward button */ +#define DIBUTTON_FIGHTINGH_BACKWARD_LINK 0x080144E8 /* Fallback backward button */ +#define DIBUTTON_FIGHTINGH_DEVICE 0x080044FE /* Show input device and controls */ +#define DIBUTTON_FIGHTINGH_PAUSE 0x080044FC /* Start / Pause / Restart game */ + +/*--- Fighting - First Person Shooting + Navigation and combat are primary objectives ---*/ +#define DIVIRTUAL_FIGHTING_FPS 0x09000000 +#define DIAXIS_FPS_ROTATE 0x09008201 /* Rotate character left/right */ +#define DIAXIS_FPS_MOVE 0x09010202 /* Move forward/backward */ +#define DIBUTTON_FPS_FIRE 0x09000401 /* Fire */ +#define DIBUTTON_FPS_WEAPONS 0x09000402 /* Select next weapon */ +#define DIBUTTON_FPS_APPLY 0x09000403 /* Use item */ +#define DIBUTTON_FPS_SELECT 0x09000404 /* Select next inventory item */ +#define DIBUTTON_FPS_CROUCH 0x09000405 /* Crouch/ climb down/ swim down */ +#define DIBUTTON_FPS_JUMP 0x09000406 /* Jump/ climb up/ swim up */ +#define DIAXIS_FPS_LOOKUPDOWN 0x09018203 /* Look up / down */ +#define DIBUTTON_FPS_STRAFE 0x09000407 /* Enable strafing while active */ +#define DIBUTTON_FPS_MENU 0x090004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FPS_GLANCE 0x09004601 /* Look around */ +#define DIBUTTON_FPS_DISPLAY 0x09004408 /* Shows next on-screen display option/ map */ +#define DIAXIS_FPS_SIDESTEP 0x09024204 /* Sidestep */ +#define DIBUTTON_FPS_DODGE 0x09004409 /* Dodge */ +#define DIBUTTON_FPS_GLANCEL 0x0900440A /* Glance Left */ +#define DIBUTTON_FPS_GLANCER 0x0900440B /* Glance Right */ +#define DIBUTTON_FPS_FIRESECONDARY 0x0900440C /* Alternative fire button */ +#define DIBUTTON_FPS_ROTATE_LEFT_LINK 0x0900C4E4 /* Fallback rotate left button */ +#define DIBUTTON_FPS_ROTATE_RIGHT_LINK 0x0900C4EC /* Fallback rotate right button */ +#define DIBUTTON_FPS_FORWARD_LINK 0x090144E0 /* Fallback forward button */ +#define DIBUTTON_FPS_BACKWARD_LINK 0x090144E8 /* Fallback backward button */ +#define DIBUTTON_FPS_GLANCE_UP_LINK 0x0901C4E0 /* Fallback look up button */ +#define DIBUTTON_FPS_GLANCE_DOWN_LINK 0x0901C4E8 /* Fallback look down button */ +#define DIBUTTON_FPS_STEP_LEFT_LINK 0x090244E4 /* Fallback step left button */ +#define DIBUTTON_FPS_STEP_RIGHT_LINK 0x090244EC /* Fallback step right button */ +#define DIBUTTON_FPS_DEVICE 0x090044FE /* Show input device and controls */ +#define DIBUTTON_FPS_PAUSE 0x090044FC /* Start / Pause / Restart game */ + +/*--- Fighting - Third Person action + Perspective of camera is behind the main character ---*/ +#define DIVIRTUAL_FIGHTING_THIRDPERSON 0x0A000000 +#define DIAXIS_TPS_TURN 0x0A020201 /* Turn left/right */ +#define DIAXIS_TPS_MOVE 0x0A010202 /* Move forward/backward */ +#define DIBUTTON_TPS_RUN 0x0A000401 /* Run or walk toggle switch */ +#define DIBUTTON_TPS_ACTION 0x0A000402 /* Action Button */ +#define DIBUTTON_TPS_SELECT 0x0A000403 /* Select next weapon */ +#define DIBUTTON_TPS_USE 0x0A000404 /* Use inventory item currently selected */ +#define DIBUTTON_TPS_JUMP 0x0A000405 /* Character Jumps */ +#define DIBUTTON_TPS_MENU 0x0A0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_TPS_GLANCE 0x0A004601 /* Look around */ +#define DIBUTTON_TPS_VIEW 0x0A004406 /* Select camera view */ +#define DIBUTTON_TPS_STEPLEFT 0x0A004407 /* Character takes a left step */ +#define DIBUTTON_TPS_STEPRIGHT 0x0A004408 /* Character takes a right step */ +#define DIAXIS_TPS_STEP 0x0A00C203 /* Character steps left/right */ +#define DIBUTTON_TPS_DODGE 0x0A004409 /* Character dodges or ducks */ +#define DIBUTTON_TPS_INVENTORY 0x0A00440A /* Cycle through inventory */ +#define DIBUTTON_TPS_TURN_LEFT_LINK 0x0A0244E4 /* Fallback turn left button */ +#define DIBUTTON_TPS_TURN_RIGHT_LINK 0x0A0244EC /* Fallback turn right button */ +#define DIBUTTON_TPS_FORWARD_LINK 0x0A0144E0 /* Fallback forward button */ +#define DIBUTTON_TPS_BACKWARD_LINK 0x0A0144E8 /* Fallback backward button */ +#define DIBUTTON_TPS_GLANCE_UP_LINK 0x0A07C4E0 /* Fallback look up button */ +#define DIBUTTON_TPS_GLANCE_DOWN_LINK 0x0A07C4E8 /* Fallback look down button */ +#define DIBUTTON_TPS_GLANCE_LEFT_LINK 0x0A07C4E4 /* Fallback glance up button */ +#define DIBUTTON_TPS_GLANCE_RIGHT_LINK 0x0A07C4EC /* Fallback glance right button */ +#define DIBUTTON_TPS_DEVICE 0x0A0044FE /* Show input device and controls */ +#define DIBUTTON_TPS_PAUSE 0x0A0044FC /* Start / Pause / Restart game */ + +/*--- Strategy - Role Playing + Navigation and problem solving are primary actions ---*/ +#define DIVIRTUAL_STRATEGY_ROLEPLAYING 0x0B000000 +#define DIAXIS_STRATEGYR_LATERAL 0x0B008201 /* sidestep - left/right */ +#define DIAXIS_STRATEGYR_MOVE 0x0B010202 /* move forward/backward */ +#define DIBUTTON_STRATEGYR_GET 0x0B000401 /* Acquire item */ +#define DIBUTTON_STRATEGYR_APPLY 0x0B000402 /* Use selected item */ +#define DIBUTTON_STRATEGYR_SELECT 0x0B000403 /* Select nextitem */ +#define DIBUTTON_STRATEGYR_ATTACK 0x0B000404 /* Attack */ +#define DIBUTTON_STRATEGYR_CAST 0x0B000405 /* Cast Spell */ +#define DIBUTTON_STRATEGYR_CROUCH 0x0B000406 /* Crouch */ +#define DIBUTTON_STRATEGYR_JUMP 0x0B000407 /* Jump */ +#define DIBUTTON_STRATEGYR_MENU 0x0B0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_STRATEGYR_GLANCE 0x0B004601 /* Look around */ +#define DIBUTTON_STRATEGYR_MAP 0x0B004408 /* Cycle through map options */ +#define DIBUTTON_STRATEGYR_DISPLAY 0x0B004409 /* Shows next on-screen display option */ +#define DIAXIS_STRATEGYR_ROTATE 0x0B024203 /* Turn body left/right */ +#define DIBUTTON_STRATEGYR_LEFT_LINK 0x0B00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_STRATEGYR_RIGHT_LINK 0x0B00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_STRATEGYR_FORWARD_LINK 0x0B0144E0 /* Fallback move forward button */ +#define DIBUTTON_STRATEGYR_BACK_LINK 0x0B0144E8 /* Fallback move backward button */ +#define DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK 0x0B0244E4 /* Fallback turn body left button */ +#define DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK 0x0B0244EC /* Fallback turn body right button */ +#define DIBUTTON_STRATEGYR_DEVICE 0x0B0044FE /* Show input device and controls */ +#define DIBUTTON_STRATEGYR_PAUSE 0x0B0044FC /* Start / Pause / Restart game */ + +/*--- Strategy - Turn based + Navigation and problem solving are primary actions ---*/ +#define DIVIRTUAL_STRATEGY_TURN 0x0C000000 +#define DIAXIS_STRATEGYT_LATERAL 0x0C008201 /* Sidestep left/right */ +#define DIAXIS_STRATEGYT_MOVE 0x0C010202 /* Move forward/backwards */ +#define DIBUTTON_STRATEGYT_SELECT 0x0C000401 /* Select unit or object */ +#define DIBUTTON_STRATEGYT_INSTRUCT 0x0C000402 /* Cycle through instructions */ +#define DIBUTTON_STRATEGYT_APPLY 0x0C000403 /* Apply selected instruction */ +#define DIBUTTON_STRATEGYT_TEAM 0x0C000404 /* Select next team / cycle through all */ +#define DIBUTTON_STRATEGYT_TURN 0x0C000405 /* Indicate turn over */ +#define DIBUTTON_STRATEGYT_MENU 0x0C0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_STRATEGYT_ZOOM 0x0C004406 /* Zoom - in / out */ +#define DIBUTTON_STRATEGYT_MAP 0x0C004407 /* cycle through map options */ +#define DIBUTTON_STRATEGYT_DISPLAY 0x0C004408 /* shows next on-screen display options */ +#define DIBUTTON_STRATEGYT_LEFT_LINK 0x0C00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_STRATEGYT_RIGHT_LINK 0x0C00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_STRATEGYT_FORWARD_LINK 0x0C0144E0 /* Fallback move forward button */ +#define DIBUTTON_STRATEGYT_BACK_LINK 0x0C0144E8 /* Fallback move back button */ +#define DIBUTTON_STRATEGYT_DEVICE 0x0C0044FE /* Show input device and controls */ +#define DIBUTTON_STRATEGYT_PAUSE 0x0C0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hunting + Hunting ---*/ +#define DIVIRTUAL_SPORTS_HUNTING 0x0D000000 +#define DIAXIS_HUNTING_LATERAL 0x0D008201 /* sidestep left/right */ +#define DIAXIS_HUNTING_MOVE 0x0D010202 /* move forward/backwards */ +#define DIBUTTON_HUNTING_FIRE 0x0D000401 /* Fire selected weapon */ +#define DIBUTTON_HUNTING_AIM 0x0D000402 /* Select aim/move */ +#define DIBUTTON_HUNTING_WEAPON 0x0D000403 /* Select next weapon */ +#define DIBUTTON_HUNTING_BINOCULAR 0x0D000404 /* Look through Binoculars */ +#define DIBUTTON_HUNTING_CALL 0x0D000405 /* Make animal call */ +#define DIBUTTON_HUNTING_MAP 0x0D000406 /* View Map */ +#define DIBUTTON_HUNTING_SPECIAL 0x0D000407 /* Special game operation */ +#define DIBUTTON_HUNTING_MENU 0x0D0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HUNTING_GLANCE 0x0D004601 /* Look around */ +#define DIBUTTON_HUNTING_DISPLAY 0x0D004408 /* show next on-screen display option */ +#define DIAXIS_HUNTING_ROTATE 0x0D024203 /* Turn body left/right */ +#define DIBUTTON_HUNTING_CROUCH 0x0D004409 /* Crouch/ Climb / Swim down */ +#define DIBUTTON_HUNTING_JUMP 0x0D00440A /* Jump/ Climb up / Swim up */ +#define DIBUTTON_HUNTING_FIRESECONDARY 0x0D00440B /* Alternative fire button */ +#define DIBUTTON_HUNTING_LEFT_LINK 0x0D00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HUNTING_RIGHT_LINK 0x0D00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HUNTING_FORWARD_LINK 0x0D0144E0 /* Fallback move forward button */ +#define DIBUTTON_HUNTING_BACK_LINK 0x0D0144E8 /* Fallback move back button */ +#define DIBUTTON_HUNTING_ROTATE_LEFT_LINK 0x0D0244E4 /* Fallback turn body left button */ +#define DIBUTTON_HUNTING_ROTATE_RIGHT_LINK 0x0D0244EC /* Fallback turn body right button */ +#define DIBUTTON_HUNTING_DEVICE 0x0D0044FE /* Show input device and controls */ +#define DIBUTTON_HUNTING_PAUSE 0x0D0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Fishing + Catching Fish is primary objective ---*/ +#define DIVIRTUAL_SPORTS_FISHING 0x0E000000 +#define DIAXIS_FISHING_LATERAL 0x0E008201 /* sidestep left/right */ +#define DIAXIS_FISHING_MOVE 0x0E010202 /* move forward/backwards */ +#define DIBUTTON_FISHING_CAST 0x0E000401 /* Cast line */ +#define DIBUTTON_FISHING_TYPE 0x0E000402 /* Select cast type */ +#define DIBUTTON_FISHING_BINOCULAR 0x0E000403 /* Look through Binocular */ +#define DIBUTTON_FISHING_BAIT 0x0E000404 /* Select type of Bait */ +#define DIBUTTON_FISHING_MAP 0x0E000405 /* View Map */ +#define DIBUTTON_FISHING_MENU 0x0E0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FISHING_GLANCE 0x0E004601 /* Look around */ +#define DIBUTTON_FISHING_DISPLAY 0x0E004406 /* Show next on-screen display option */ +#define DIAXIS_FISHING_ROTATE 0x0E024203 /* Turn character left / right */ +#define DIBUTTON_FISHING_CROUCH 0x0E004407 /* Crouch/ Climb / Swim down */ +#define DIBUTTON_FISHING_JUMP 0x0E004408 /* Jump/ Climb up / Swim up */ +#define DIBUTTON_FISHING_LEFT_LINK 0x0E00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FISHING_RIGHT_LINK 0x0E00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FISHING_FORWARD_LINK 0x0E0144E0 /* Fallback move forward button */ +#define DIBUTTON_FISHING_BACK_LINK 0x0E0144E8 /* Fallback move back button */ +#define DIBUTTON_FISHING_ROTATE_LEFT_LINK 0x0E0244E4 /* Fallback turn body left button */ +#define DIBUTTON_FISHING_ROTATE_RIGHT_LINK 0x0E0244EC /* Fallback turn body right button */ +#define DIBUTTON_FISHING_DEVICE 0x0E0044FE /* Show input device and controls */ +#define DIBUTTON_FISHING_PAUSE 0x0E0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Batting + Batter control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_BAT 0x0F000000 +#define DIAXIS_BASEBALLB_LATERAL 0x0F008201 /* Aim left / right */ +#define DIAXIS_BASEBALLB_MOVE 0x0F010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLB_SELECT 0x0F000401 /* cycle through swing options */ +#define DIBUTTON_BASEBALLB_NORMAL 0x0F000402 /* normal swing */ +#define DIBUTTON_BASEBALLB_POWER 0x0F000403 /* swing for the fence */ +#define DIBUTTON_BASEBALLB_BUNT 0x0F000404 /* bunt */ +#define DIBUTTON_BASEBALLB_STEAL 0x0F000405 /* Base runner attempts to steal a base */ +#define DIBUTTON_BASEBALLB_BURST 0x0F000406 /* Base runner invokes burst of speed */ +#define DIBUTTON_BASEBALLB_SLIDE 0x0F000407 /* Base runner slides into base */ +#define DIBUTTON_BASEBALLB_CONTACT 0x0F000408 /* Contact swing */ +#define DIBUTTON_BASEBALLB_MENU 0x0F0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLB_NOSTEAL 0x0F004409 /* Base runner goes back to a base */ +#define DIBUTTON_BASEBALLB_BOX 0x0F00440A /* Enter or exit batting box */ +#define DIBUTTON_BASEBALLB_LEFT_LINK 0x0F00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BASEBALLB_RIGHT_LINK 0x0F00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BASEBALLB_FORWARD_LINK 0x0F0144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLB_BACK_LINK 0x0F0144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLB_DEVICE 0x0F0044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLB_PAUSE 0x0F0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Pitching + Pitcher control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_PITCH 0x10000000 +#define DIAXIS_BASEBALLP_LATERAL 0x10008201 /* Aim left / right */ +#define DIAXIS_BASEBALLP_MOVE 0x10010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLP_SELECT 0x10000401 /* cycle through pitch selections */ +#define DIBUTTON_BASEBALLP_PITCH 0x10000402 /* throw pitch */ +#define DIBUTTON_BASEBALLP_BASE 0x10000403 /* select base to throw to */ +#define DIBUTTON_BASEBALLP_THROW 0x10000404 /* throw to base */ +#define DIBUTTON_BASEBALLP_FAKE 0x10000405 /* Fake a throw to a base */ +#define DIBUTTON_BASEBALLP_MENU 0x100004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLP_WALK 0x10004406 /* Throw intentional walk / pitch out */ +#define DIBUTTON_BASEBALLP_LOOK 0x10004407 /* Look at runners on bases */ +#define DIBUTTON_BASEBALLP_LEFT_LINK 0x1000C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BASEBALLP_RIGHT_LINK 0x1000C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BASEBALLP_FORWARD_LINK 0x100144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLP_BACK_LINK 0x100144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLP_DEVICE 0x100044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLP_PAUSE 0x100044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Fielding + Fielder control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_FIELD 0x11000000 +#define DIAXIS_BASEBALLF_LATERAL 0x11008201 /* Aim left / right */ +#define DIAXIS_BASEBALLF_MOVE 0x11010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLF_NEAREST 0x11000401 /* Switch to fielder nearest to the ball */ +#define DIBUTTON_BASEBALLF_THROW1 0x11000402 /* Make conservative throw */ +#define DIBUTTON_BASEBALLF_THROW2 0x11000403 /* Make aggressive throw */ +#define DIBUTTON_BASEBALLF_BURST 0x11000404 /* Invoke burst of speed */ +#define DIBUTTON_BASEBALLF_JUMP 0x11000405 /* Jump to catch ball */ +#define DIBUTTON_BASEBALLF_DIVE 0x11000406 /* Dive to catch ball */ +#define DIBUTTON_BASEBALLF_MENU 0x110004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLF_SHIFTIN 0x11004407 /* Shift the infield positioning */ +#define DIBUTTON_BASEBALLF_SHIFTOUT 0x11004408 /* Shift the outfield positioning */ +#define DIBUTTON_BASEBALLF_AIM_LEFT_LINK 0x1100C4E4 /* Fallback aim left button */ +#define DIBUTTON_BASEBALLF_AIM_RIGHT_LINK 0x1100C4EC /* Fallback aim right button */ +#define DIBUTTON_BASEBALLF_FORWARD_LINK 0x110144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLF_BACK_LINK 0x110144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLF_DEVICE 0x110044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLF_PAUSE 0x110044FC /* Start / Pause / Restart game */ + +/*--- Sports - Basketball - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE 0x12000000 +#define DIAXIS_BBALLO_LATERAL 0x12008201 /* left / right */ +#define DIAXIS_BBALLO_MOVE 0x12010202 /* up / down */ +#define DIBUTTON_BBALLO_SHOOT 0x12000401 /* shoot basket */ +#define DIBUTTON_BBALLO_DUNK 0x12000402 /* dunk basket */ +#define DIBUTTON_BBALLO_PASS 0x12000403 /* throw pass */ +#define DIBUTTON_BBALLO_FAKE 0x12000404 /* fake shot or pass */ +#define DIBUTTON_BBALLO_SPECIAL 0x12000405 /* apply special move */ +#define DIBUTTON_BBALLO_PLAYER 0x12000406 /* select next player */ +#define DIBUTTON_BBALLO_BURST 0x12000407 /* invoke burst */ +#define DIBUTTON_BBALLO_CALL 0x12000408 /* call for ball / pass to me */ +#define DIBUTTON_BBALLO_MENU 0x120004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BBALLO_GLANCE 0x12004601 /* scroll view */ +#define DIBUTTON_BBALLO_SCREEN 0x12004409 /* Call for screen */ +#define DIBUTTON_BBALLO_PLAY 0x1200440A /* Call for specific offensive play */ +#define DIBUTTON_BBALLO_JAB 0x1200440B /* Initiate fake drive to basket */ +#define DIBUTTON_BBALLO_POST 0x1200440C /* Perform post move */ +#define DIBUTTON_BBALLO_TIMEOUT 0x1200440D /* Time Out */ +#define DIBUTTON_BBALLO_SUBSTITUTE 0x1200440E /* substitute one player for another */ +#define DIBUTTON_BBALLO_LEFT_LINK 0x1200C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BBALLO_RIGHT_LINK 0x1200C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BBALLO_FORWARD_LINK 0x120144E0 /* Fallback move forward button */ +#define DIBUTTON_BBALLO_BACK_LINK 0x120144E8 /* Fallback move back button */ +#define DIBUTTON_BBALLO_DEVICE 0x120044FE /* Show input device and controls */ +#define DIBUTTON_BBALLO_PAUSE 0x120044FC /* Start / Pause / Restart game */ + +/*--- Sports - Basketball - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE 0x13000000 +#define DIAXIS_BBALLD_LATERAL 0x13008201 /* left / right */ +#define DIAXIS_BBALLD_MOVE 0x13010202 /* up / down */ +#define DIBUTTON_BBALLD_JUMP 0x13000401 /* jump to block shot */ +#define DIBUTTON_BBALLD_STEAL 0x13000402 /* attempt to steal ball */ +#define DIBUTTON_BBALLD_FAKE 0x13000403 /* fake block or steal */ +#define DIBUTTON_BBALLD_SPECIAL 0x13000404 /* apply special move */ +#define DIBUTTON_BBALLD_PLAYER 0x13000405 /* select next player */ +#define DIBUTTON_BBALLD_BURST 0x13000406 /* invoke burst */ +#define DIBUTTON_BBALLD_PLAY 0x13000407 /* call for specific defensive play */ +#define DIBUTTON_BBALLD_MENU 0x130004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BBALLD_GLANCE 0x13004601 /* scroll view */ +#define DIBUTTON_BBALLD_TIMEOUT 0x13004408 /* Time Out */ +#define DIBUTTON_BBALLD_SUBSTITUTE 0x13004409 /* substitute one player for another */ +#define DIBUTTON_BBALLD_LEFT_LINK 0x1300C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BBALLD_RIGHT_LINK 0x1300C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BBALLD_FORWARD_LINK 0x130144E0 /* Fallback move forward button */ +#define DIBUTTON_BBALLD_BACK_LINK 0x130144E8 /* Fallback move back button */ +#define DIBUTTON_BBALLD_DEVICE 0x130044FE /* Show input device and controls */ +#define DIBUTTON_BBALLD_PAUSE 0x130044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Play + Play selection ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_FIELD 0x14000000 +#define DIBUTTON_FOOTBALLP_PLAY 0x14000401 /* cycle through available plays */ +#define DIBUTTON_FOOTBALLP_SELECT 0x14000402 /* select play */ +#define DIBUTTON_FOOTBALLP_HELP 0x14000403 /* Bring up pop-up help */ +#define DIBUTTON_FOOTBALLP_MENU 0x140004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLP_DEVICE 0x140044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLP_PAUSE 0x140044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - QB + Offense: Quarterback / Kicker ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_QBCK 0x15000000 +#define DIAXIS_FOOTBALLQ_LATERAL 0x15008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLQ_MOVE 0x15010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLQ_SELECT 0x15000401 /* Select */ +#define DIBUTTON_FOOTBALLQ_SNAP 0x15000402 /* snap ball - start play */ +#define DIBUTTON_FOOTBALLQ_JUMP 0x15000403 /* jump over defender */ +#define DIBUTTON_FOOTBALLQ_SLIDE 0x15000404 /* Dive/Slide */ +#define DIBUTTON_FOOTBALLQ_PASS 0x15000405 /* throws pass to receiver */ +#define DIBUTTON_FOOTBALLQ_FAKE 0x15000406 /* pump fake pass or fake kick */ +#define DIBUTTON_FOOTBALLQ_MENU 0x150004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLQ_FAKESNAP 0x15004407 /* Fake snap */ +#define DIBUTTON_FOOTBALLQ_MOTION 0x15004408 /* Send receivers in motion */ +#define DIBUTTON_FOOTBALLQ_AUDIBLE 0x15004409 /* Change offensive play at line of scrimmage */ +#define DIBUTTON_FOOTBALLQ_LEFT_LINK 0x1500C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLQ_RIGHT_LINK 0x1500C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLQ_FORWARD_LINK 0x150144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLQ_BACK_LINK 0x150144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLQ_DEVICE 0x150044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLQ_PAUSE 0x150044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Offense + Offense - Runner ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE 0x16000000 +#define DIAXIS_FOOTBALLO_LATERAL 0x16008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLO_MOVE 0x16010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLO_JUMP 0x16000401 /* jump or hurdle over defender */ +#define DIBUTTON_FOOTBALLO_LEFTARM 0x16000402 /* holds out left arm */ +#define DIBUTTON_FOOTBALLO_RIGHTARM 0x16000403 /* holds out right arm */ +#define DIBUTTON_FOOTBALLO_THROW 0x16000404 /* throw pass or lateral ball to another runner */ +#define DIBUTTON_FOOTBALLO_SPIN 0x16000405 /* Spin to avoid defenders */ +#define DIBUTTON_FOOTBALLO_MENU 0x160004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLO_JUKE 0x16004406 /* Use special move to avoid defenders */ +#define DIBUTTON_FOOTBALLO_SHOULDER 0x16004407 /* Lower shoulder to run over defenders */ +#define DIBUTTON_FOOTBALLO_TURBO 0x16004408 /* Speed burst past defenders */ +#define DIBUTTON_FOOTBALLO_DIVE 0x16004409 /* Dive over defenders */ +#define DIBUTTON_FOOTBALLO_ZOOM 0x1600440A /* Zoom view in / out */ +#define DIBUTTON_FOOTBALLO_SUBSTITUTE 0x1600440B /* substitute one player for another */ +#define DIBUTTON_FOOTBALLO_LEFT_LINK 0x1600C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLO_RIGHT_LINK 0x1600C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLO_FORWARD_LINK 0x160144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLO_BACK_LINK 0x160144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLO_DEVICE 0x160044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLO_PAUSE 0x160044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE 0x17000000 +#define DIAXIS_FOOTBALLD_LATERAL 0x17008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLD_MOVE 0x17010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLD_PLAY 0x17000401 /* cycle through available plays */ +#define DIBUTTON_FOOTBALLD_SELECT 0x17000402 /* select player closest to the ball */ +#define DIBUTTON_FOOTBALLD_JUMP 0x17000403 /* jump to intercept or block */ +#define DIBUTTON_FOOTBALLD_TACKLE 0x17000404 /* tackler runner */ +#define DIBUTTON_FOOTBALLD_FAKE 0x17000405 /* hold down to fake tackle or intercept */ +#define DIBUTTON_FOOTBALLD_SUPERTACKLE 0x17000406 /* Initiate special tackle */ +#define DIBUTTON_FOOTBALLD_MENU 0x170004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLD_SPIN 0x17004407 /* Spin to beat offensive line */ +#define DIBUTTON_FOOTBALLD_SWIM 0x17004408 /* Swim to beat the offensive line */ +#define DIBUTTON_FOOTBALLD_BULLRUSH 0x17004409 /* Bull rush the offensive line */ +#define DIBUTTON_FOOTBALLD_RIP 0x1700440A /* Rip the offensive line */ +#define DIBUTTON_FOOTBALLD_AUDIBLE 0x1700440B /* Change defensive play at the line of scrimmage */ +#define DIBUTTON_FOOTBALLD_ZOOM 0x1700440C /* Zoom view in / out */ +#define DIBUTTON_FOOTBALLD_SUBSTITUTE 0x1700440D /* substitute one player for another */ +#define DIBUTTON_FOOTBALLD_LEFT_LINK 0x1700C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLD_RIGHT_LINK 0x1700C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLD_FORWARD_LINK 0x170144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLD_BACK_LINK 0x170144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLD_DEVICE 0x170044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLD_PAUSE 0x170044FC /* Start / Pause / Restart game */ + +/*--- Sports - Golf + ---*/ +#define DIVIRTUAL_SPORTS_GOLF 0x18000000 +#define DIAXIS_GOLF_LATERAL 0x18008201 /* Move / Aim: left / right */ +#define DIAXIS_GOLF_MOVE 0x18010202 /* Move / Aim: up / down */ +#define DIBUTTON_GOLF_SWING 0x18000401 /* swing club */ +#define DIBUTTON_GOLF_SELECT 0x18000402 /* cycle between: club / swing strength / ball arc / ball spin */ +#define DIBUTTON_GOLF_UP 0x18000403 /* increase selection */ +#define DIBUTTON_GOLF_DOWN 0x18000404 /* decrease selection */ +#define DIBUTTON_GOLF_TERRAIN 0x18000405 /* shows terrain detail */ +#define DIBUTTON_GOLF_FLYBY 0x18000406 /* view the hole via a flyby */ +#define DIBUTTON_GOLF_MENU 0x180004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_GOLF_SCROLL 0x18004601 /* scroll view */ +#define DIBUTTON_GOLF_ZOOM 0x18004407 /* Zoom view in / out */ +#define DIBUTTON_GOLF_TIMEOUT 0x18004408 /* Call for time out */ +#define DIBUTTON_GOLF_SUBSTITUTE 0x18004409 /* substitute one player for another */ +#define DIBUTTON_GOLF_LEFT_LINK 0x1800C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_GOLF_RIGHT_LINK 0x1800C4EC /* Fallback sidestep right button */ +#define DIBUTTON_GOLF_FORWARD_LINK 0x180144E0 /* Fallback move forward button */ +#define DIBUTTON_GOLF_BACK_LINK 0x180144E8 /* Fallback move back button */ +#define DIBUTTON_GOLF_DEVICE 0x180044FE /* Show input device and controls */ +#define DIBUTTON_GOLF_PAUSE 0x180044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_OFFENSE 0x19000000 +#define DIAXIS_HOCKEYO_LATERAL 0x19008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYO_MOVE 0x19010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYO_SHOOT 0x19000401 /* Shoot */ +#define DIBUTTON_HOCKEYO_PASS 0x19000402 /* pass the puck */ +#define DIBUTTON_HOCKEYO_BURST 0x19000403 /* invoke speed burst */ +#define DIBUTTON_HOCKEYO_SPECIAL 0x19000404 /* invoke special move */ +#define DIBUTTON_HOCKEYO_FAKE 0x19000405 /* hold down to fake pass or kick */ +#define DIBUTTON_HOCKEYO_MENU 0x190004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYO_SCROLL 0x19004601 /* scroll view */ +#define DIBUTTON_HOCKEYO_ZOOM 0x19004406 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYO_STRATEGY 0x19004407 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYO_TIMEOUT 0x19004408 /* Call for time out */ +#define DIBUTTON_HOCKEYO_SUBSTITUTE 0x19004409 /* substitute one player for another */ +#define DIBUTTON_HOCKEYO_LEFT_LINK 0x1900C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYO_RIGHT_LINK 0x1900C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYO_FORWARD_LINK 0x190144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYO_BACK_LINK 0x190144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYO_DEVICE 0x190044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYO_PAUSE 0x190044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_DEFENSE 0x1A000000 +#define DIAXIS_HOCKEYD_LATERAL 0x1A008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYD_MOVE 0x1A010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYD_PLAYER 0x1A000401 /* control player closest to the puck */ +#define DIBUTTON_HOCKEYD_STEAL 0x1A000402 /* attempt steal */ +#define DIBUTTON_HOCKEYD_BURST 0x1A000403 /* speed burst or body check */ +#define DIBUTTON_HOCKEYD_BLOCK 0x1A000404 /* block puck */ +#define DIBUTTON_HOCKEYD_FAKE 0x1A000405 /* hold down to fake tackle or intercept */ +#define DIBUTTON_HOCKEYD_MENU 0x1A0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYD_SCROLL 0x1A004601 /* scroll view */ +#define DIBUTTON_HOCKEYD_ZOOM 0x1A004406 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYD_STRATEGY 0x1A004407 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYD_TIMEOUT 0x1A004408 /* Call for time out */ +#define DIBUTTON_HOCKEYD_SUBSTITUTE 0x1A004409 /* substitute one player for another */ +#define DIBUTTON_HOCKEYD_LEFT_LINK 0x1A00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYD_RIGHT_LINK 0x1A00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYD_FORWARD_LINK 0x1A0144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYD_BACK_LINK 0x1A0144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYD_DEVICE 0x1A0044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYD_PAUSE 0x1A0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Goalie + Goal tending ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_GOALIE 0x1B000000 +#define DIAXIS_HOCKEYG_LATERAL 0x1B008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYG_MOVE 0x1B010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYG_PASS 0x1B000401 /* pass puck */ +#define DIBUTTON_HOCKEYG_POKE 0x1B000402 /* poke / check / hack */ +#define DIBUTTON_HOCKEYG_STEAL 0x1B000403 /* attempt steal */ +#define DIBUTTON_HOCKEYG_BLOCK 0x1B000404 /* block puck */ +#define DIBUTTON_HOCKEYG_MENU 0x1B0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYG_SCROLL 0x1B004601 /* scroll view */ +#define DIBUTTON_HOCKEYG_ZOOM 0x1B004405 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYG_STRATEGY 0x1B004406 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYG_TIMEOUT 0x1B004407 /* Call for time out */ +#define DIBUTTON_HOCKEYG_SUBSTITUTE 0x1B004408 /* substitute one player for another */ +#define DIBUTTON_HOCKEYG_LEFT_LINK 0x1B00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYG_RIGHT_LINK 0x1B00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYG_FORWARD_LINK 0x1B0144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYG_BACK_LINK 0x1B0144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYG_DEVICE 0x1B0044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYG_PAUSE 0x1B0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Mountain Biking + ---*/ +#define DIVIRTUAL_SPORTS_BIKING_MOUNTAIN 0x1C000000 +#define DIAXIS_BIKINGM_TURN 0x1C008201 /* left / right */ +#define DIAXIS_BIKINGM_PEDAL 0x1C010202 /* Pedal faster / slower / brake */ +#define DIBUTTON_BIKINGM_JUMP 0x1C000401 /* jump over obstacle */ +#define DIBUTTON_BIKINGM_CAMERA 0x1C000402 /* switch camera view */ +#define DIBUTTON_BIKINGM_SPECIAL1 0x1C000403 /* perform first special move */ +#define DIBUTTON_BIKINGM_SELECT 0x1C000404 /* Select */ +#define DIBUTTON_BIKINGM_SPECIAL2 0x1C000405 /* perform second special move */ +#define DIBUTTON_BIKINGM_MENU 0x1C0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BIKINGM_SCROLL 0x1C004601 /* scroll view */ +#define DIBUTTON_BIKINGM_ZOOM 0x1C004406 /* Zoom view in / out */ +#define DIAXIS_BIKINGM_BRAKE 0x1C044203 /* Brake axis */ +#define DIBUTTON_BIKINGM_LEFT_LINK 0x1C00C4E4 /* Fallback turn left button */ +#define DIBUTTON_BIKINGM_RIGHT_LINK 0x1C00C4EC /* Fallback turn right button */ +#define DIBUTTON_BIKINGM_FASTER_LINK 0x1C0144E0 /* Fallback pedal faster button */ +#define DIBUTTON_BIKINGM_SLOWER_LINK 0x1C0144E8 /* Fallback pedal slower button */ +#define DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK 0x1C0444E8 /* Fallback brake button */ +#define DIBUTTON_BIKINGM_DEVICE 0x1C0044FE /* Show input device and controls */ +#define DIBUTTON_BIKINGM_PAUSE 0x1C0044FC /* Start / Pause / Restart game */ + +/*--- Sports: Skiing / Snowboarding / Skateboarding + ---*/ +#define DIVIRTUAL_SPORTS_SKIING 0x1D000000 +#define DIAXIS_SKIING_TURN 0x1D008201 /* left / right */ +#define DIAXIS_SKIING_SPEED 0x1D010202 /* faster / slower */ +#define DIBUTTON_SKIING_JUMP 0x1D000401 /* Jump */ +#define DIBUTTON_SKIING_CROUCH 0x1D000402 /* crouch down */ +#define DIBUTTON_SKIING_CAMERA 0x1D000403 /* switch camera view */ +#define DIBUTTON_SKIING_SPECIAL1 0x1D000404 /* perform first special move */ +#define DIBUTTON_SKIING_SELECT 0x1D000405 /* Select */ +#define DIBUTTON_SKIING_SPECIAL2 0x1D000406 /* perform second special move */ +#define DIBUTTON_SKIING_MENU 0x1D0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SKIING_GLANCE 0x1D004601 /* scroll view */ +#define DIBUTTON_SKIING_ZOOM 0x1D004407 /* Zoom view in / out */ +#define DIBUTTON_SKIING_LEFT_LINK 0x1D00C4E4 /* Fallback turn left button */ +#define DIBUTTON_SKIING_RIGHT_LINK 0x1D00C4EC /* Fallback turn right button */ +#define DIBUTTON_SKIING_FASTER_LINK 0x1D0144E0 /* Fallback increase speed button */ +#define DIBUTTON_SKIING_SLOWER_LINK 0x1D0144E8 /* Fallback decrease speed button */ +#define DIBUTTON_SKIING_DEVICE 0x1D0044FE /* Show input device and controls */ +#define DIBUTTON_SKIING_PAUSE 0x1D0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Soccer - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_SOCCER_OFFENSE 0x1E000000 +#define DIAXIS_SOCCERO_LATERAL 0x1E008201 /* Move / Aim: left / right */ +#define DIAXIS_SOCCERO_MOVE 0x1E010202 /* Move / Aim: up / down */ +#define DIAXIS_SOCCERO_BEND 0x1E018203 /* Bend to soccer shot/pass */ +#define DIBUTTON_SOCCERO_SHOOT 0x1E000401 /* Shoot the ball */ +#define DIBUTTON_SOCCERO_PASS 0x1E000402 /* Pass */ +#define DIBUTTON_SOCCERO_FAKE 0x1E000403 /* Fake */ +#define DIBUTTON_SOCCERO_PLAYER 0x1E000404 /* Select next player */ +#define DIBUTTON_SOCCERO_SPECIAL1 0x1E000405 /* Apply special move */ +#define DIBUTTON_SOCCERO_SELECT 0x1E000406 /* Select special move */ +#define DIBUTTON_SOCCERO_MENU 0x1E0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SOCCERO_GLANCE 0x1E004601 /* scroll view */ +#define DIBUTTON_SOCCERO_SUBSTITUTE 0x1E004407 /* Substitute one player for another */ +#define DIBUTTON_SOCCERO_SHOOTLOW 0x1E004408 /* Shoot the ball low */ +#define DIBUTTON_SOCCERO_SHOOTHIGH 0x1E004409 /* Shoot the ball high */ +#define DIBUTTON_SOCCERO_PASSTHRU 0x1E00440A /* Make a thru pass */ +#define DIBUTTON_SOCCERO_SPRINT 0x1E00440B /* Sprint / turbo boost */ +#define DIBUTTON_SOCCERO_CONTROL 0x1E00440C /* Obtain control of the ball */ +#define DIBUTTON_SOCCERO_HEAD 0x1E00440D /* Attempt to head the ball */ +#define DIBUTTON_SOCCERO_LEFT_LINK 0x1E00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_SOCCERO_RIGHT_LINK 0x1E00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_SOCCERO_FORWARD_LINK 0x1E0144E0 /* Fallback move forward button */ +#define DIBUTTON_SOCCERO_BACK_LINK 0x1E0144E8 /* Fallback move back button */ +#define DIBUTTON_SOCCERO_DEVICE 0x1E0044FE /* Show input device and controls */ +#define DIBUTTON_SOCCERO_PAUSE 0x1E0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Soccer - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_SOCCER_DEFENSE 0x1F000000 +#define DIAXIS_SOCCERD_LATERAL 0x1F008201 /* Move / Aim: left / right */ +#define DIAXIS_SOCCERD_MOVE 0x1F010202 /* Move / Aim: up / down */ +#define DIBUTTON_SOCCERD_BLOCK 0x1F000401 /* Attempt to block shot */ +#define DIBUTTON_SOCCERD_STEAL 0x1F000402 /* Attempt to steal ball */ +#define DIBUTTON_SOCCERD_FAKE 0x1F000403 /* Fake a block or a steal */ +#define DIBUTTON_SOCCERD_PLAYER 0x1F000404 /* Select next player */ +#define DIBUTTON_SOCCERD_SPECIAL 0x1F000405 /* Apply special move */ +#define DIBUTTON_SOCCERD_SELECT 0x1F000406 /* Select special move */ +#define DIBUTTON_SOCCERD_SLIDE 0x1F000407 /* Attempt a slide tackle */ +#define DIBUTTON_SOCCERD_MENU 0x1F0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SOCCERD_GLANCE 0x1F004601 /* scroll view */ +#define DIBUTTON_SOCCERD_FOUL 0x1F004408 /* Initiate a foul / hard-foul */ +#define DIBUTTON_SOCCERD_HEAD 0x1F004409 /* Attempt a Header */ +#define DIBUTTON_SOCCERD_CLEAR 0x1F00440A /* Attempt to clear the ball down the field */ +#define DIBUTTON_SOCCERD_GOALIECHARGE 0x1F00440B /* Make the goalie charge out of the box */ +#define DIBUTTON_SOCCERD_SUBSTITUTE 0x1F00440C /* Substitute one player for another */ +#define DIBUTTON_SOCCERD_LEFT_LINK 0x1F00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_SOCCERD_RIGHT_LINK 0x1F00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_SOCCERD_FORWARD_LINK 0x1F0144E0 /* Fallback move forward button */ +#define DIBUTTON_SOCCERD_BACK_LINK 0x1F0144E8 /* Fallback move back button */ +#define DIBUTTON_SOCCERD_DEVICE 0x1F0044FE /* Show input device and controls */ +#define DIBUTTON_SOCCERD_PAUSE 0x1F0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Racquet + Tennis - Table-Tennis - Squash ---*/ +#define DIVIRTUAL_SPORTS_RACQUET 0x20000000 +#define DIAXIS_RACQUET_LATERAL 0x20008201 /* Move / Aim: left / right */ +#define DIAXIS_RACQUET_MOVE 0x20010202 /* Move / Aim: up / down */ +#define DIBUTTON_RACQUET_SWING 0x20000401 /* Swing racquet */ +#define DIBUTTON_RACQUET_BACKSWING 0x20000402 /* Swing backhand */ +#define DIBUTTON_RACQUET_SMASH 0x20000403 /* Smash shot */ +#define DIBUTTON_RACQUET_SPECIAL 0x20000404 /* Special shot */ +#define DIBUTTON_RACQUET_SELECT 0x20000405 /* Select special shot */ +#define DIBUTTON_RACQUET_MENU 0x200004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_RACQUET_GLANCE 0x20004601 /* scroll view */ +#define DIBUTTON_RACQUET_TIMEOUT 0x20004406 /* Call for time out */ +#define DIBUTTON_RACQUET_SUBSTITUTE 0x20004407 /* Substitute one player for another */ +#define DIBUTTON_RACQUET_LEFT_LINK 0x2000C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_RACQUET_RIGHT_LINK 0x2000C4EC /* Fallback sidestep right button */ +#define DIBUTTON_RACQUET_FORWARD_LINK 0x200144E0 /* Fallback move forward button */ +#define DIBUTTON_RACQUET_BACK_LINK 0x200144E8 /* Fallback move back button */ +#define DIBUTTON_RACQUET_DEVICE 0x200044FE /* Show input device and controls */ +#define DIBUTTON_RACQUET_PAUSE 0x200044FC /* Start / Pause / Restart game */ + +/*--- Arcade- 2D + Side to Side movement ---*/ +#define DIVIRTUAL_ARCADE_SIDE2SIDE 0x21000000 +#define DIAXIS_ARCADES_LATERAL 0x21008201 /* left / right */ +#define DIAXIS_ARCADES_MOVE 0x21010202 /* up / down */ +#define DIBUTTON_ARCADES_THROW 0x21000401 /* throw object */ +#define DIBUTTON_ARCADES_CARRY 0x21000402 /* carry object */ +#define DIBUTTON_ARCADES_ATTACK 0x21000403 /* attack */ +#define DIBUTTON_ARCADES_SPECIAL 0x21000404 /* apply special move */ +#define DIBUTTON_ARCADES_SELECT 0x21000405 /* select special move */ +#define DIBUTTON_ARCADES_MENU 0x210004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_ARCADES_VIEW 0x21004601 /* scroll view left / right / up / down */ +#define DIBUTTON_ARCADES_LEFT_LINK 0x2100C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_ARCADES_RIGHT_LINK 0x2100C4EC /* Fallback sidestep right button */ +#define DIBUTTON_ARCADES_FORWARD_LINK 0x210144E0 /* Fallback move forward button */ +#define DIBUTTON_ARCADES_BACK_LINK 0x210144E8 /* Fallback move back button */ +#define DIBUTTON_ARCADES_VIEW_UP_LINK 0x2107C4E0 /* Fallback scroll view up button */ +#define DIBUTTON_ARCADES_VIEW_DOWN_LINK 0x2107C4E8 /* Fallback scroll view down button */ +#define DIBUTTON_ARCADES_VIEW_LEFT_LINK 0x2107C4E4 /* Fallback scroll view left button */ +#define DIBUTTON_ARCADES_VIEW_RIGHT_LINK 0x2107C4EC /* Fallback scroll view right button */ +#define DIBUTTON_ARCADES_DEVICE 0x210044FE /* Show input device and controls */ +#define DIBUTTON_ARCADES_PAUSE 0x210044FC /* Start / Pause / Restart game */ + +/*--- Arcade - Platform Game + Character moves around on screen ---*/ +#define DIVIRTUAL_ARCADE_PLATFORM 0x22000000 +#define DIAXIS_ARCADEP_LATERAL 0x22008201 /* Left / right */ +#define DIAXIS_ARCADEP_MOVE 0x22010202 /* Up / down */ +#define DIBUTTON_ARCADEP_JUMP 0x22000401 /* Jump */ +#define DIBUTTON_ARCADEP_FIRE 0x22000402 /* Fire */ +#define DIBUTTON_ARCADEP_CROUCH 0x22000403 /* Crouch */ +#define DIBUTTON_ARCADEP_SPECIAL 0x22000404 /* Apply special move */ +#define DIBUTTON_ARCADEP_SELECT 0x22000405 /* Select special move */ +#define DIBUTTON_ARCADEP_MENU 0x220004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_ARCADEP_VIEW 0x22004601 /* Scroll view */ +#define DIBUTTON_ARCADEP_FIRESECONDARY 0x22004406 /* Alternative fire button */ +#define DIBUTTON_ARCADEP_LEFT_LINK 0x2200C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_ARCADEP_RIGHT_LINK 0x2200C4EC /* Fallback sidestep right button */ +#define DIBUTTON_ARCADEP_FORWARD_LINK 0x220144E0 /* Fallback move forward button */ +#define DIBUTTON_ARCADEP_BACK_LINK 0x220144E8 /* Fallback move back button */ +#define DIBUTTON_ARCADEP_VIEW_UP_LINK 0x2207C4E0 /* Fallback scroll view up button */ +#define DIBUTTON_ARCADEP_VIEW_DOWN_LINK 0x2207C4E8 /* Fallback scroll view down button */ +#define DIBUTTON_ARCADEP_VIEW_LEFT_LINK 0x2207C4E4 /* Fallback scroll view left button */ +#define DIBUTTON_ARCADEP_VIEW_RIGHT_LINK 0x2207C4EC /* Fallback scroll view right button */ +#define DIBUTTON_ARCADEP_DEVICE 0x220044FE /* Show input device and controls */ +#define DIBUTTON_ARCADEP_PAUSE 0x220044FC /* Start / Pause / Restart game */ + +/*--- CAD - 2D Object Control + Controls to select and move objects in 2D ---*/ +#define DIVIRTUAL_CAD_2DCONTROL 0x23000000 +#define DIAXIS_2DCONTROL_LATERAL 0x23008201 /* Move view left / right */ +#define DIAXIS_2DCONTROL_MOVE 0x23010202 /* Move view up / down */ +#define DIAXIS_2DCONTROL_INOUT 0x23018203 /* Zoom - in / out */ +#define DIBUTTON_2DCONTROL_SELECT 0x23000401 /* Select Object */ +#define DIBUTTON_2DCONTROL_SPECIAL1 0x23000402 /* Do first special operation */ +#define DIBUTTON_2DCONTROL_SPECIAL 0x23000403 /* Select special operation */ +#define DIBUTTON_2DCONTROL_SPECIAL2 0x23000404 /* Do second special operation */ +#define DIBUTTON_2DCONTROL_MENU 0x230004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_2DCONTROL_HATSWITCH 0x23004601 /* Hat switch */ +#define DIAXIS_2DCONTROL_ROTATEZ 0x23024204 /* Rotate view clockwise / counterclockwise */ +#define DIBUTTON_2DCONTROL_DISPLAY 0x23004405 /* Shows next on-screen display options */ +#define DIBUTTON_2DCONTROL_DEVICE 0x230044FE /* Show input device and controls */ +#define DIBUTTON_2DCONTROL_PAUSE 0x230044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D object control + Controls to select and move objects within a 3D environment ---*/ +#define DIVIRTUAL_CAD_3DCONTROL 0x24000000 +#define DIAXIS_3DCONTROL_LATERAL 0x24008201 /* Move view left / right */ +#define DIAXIS_3DCONTROL_MOVE 0x24010202 /* Move view up / down */ +#define DIAXIS_3DCONTROL_INOUT 0x24018203 /* Zoom - in / out */ +#define DIBUTTON_3DCONTROL_SELECT 0x24000401 /* Select Object */ +#define DIBUTTON_3DCONTROL_SPECIAL1 0x24000402 /* Do first special operation */ +#define DIBUTTON_3DCONTROL_SPECIAL 0x24000403 /* Select special operation */ +#define DIBUTTON_3DCONTROL_SPECIAL2 0x24000404 /* Do second special operation */ +#define DIBUTTON_3DCONTROL_MENU 0x240004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_3DCONTROL_HATSWITCH 0x24004601 /* Hat switch */ +#define DIAXIS_3DCONTROL_ROTATEX 0x24034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_3DCONTROL_ROTATEY 0x2402C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_3DCONTROL_ROTATEZ 0x24024206 /* Rotate view left / right */ +#define DIBUTTON_3DCONTROL_DISPLAY 0x24004405 /* Show next on-screen display options */ +#define DIBUTTON_3DCONTROL_DEVICE 0x240044FE /* Show input device and controls */ +#define DIBUTTON_3DCONTROL_PAUSE 0x240044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D Navigation - Fly through + Controls for 3D modeling ---*/ +#define DIVIRTUAL_CAD_FLYBY 0x25000000 +#define DIAXIS_CADF_LATERAL 0x25008201 /* move view left / right */ +#define DIAXIS_CADF_MOVE 0x25010202 /* move view up / down */ +#define DIAXIS_CADF_INOUT 0x25018203 /* in / out */ +#define DIBUTTON_CADF_SELECT 0x25000401 /* Select Object */ +#define DIBUTTON_CADF_SPECIAL1 0x25000402 /* do first special operation */ +#define DIBUTTON_CADF_SPECIAL 0x25000403 /* Select special operation */ +#define DIBUTTON_CADF_SPECIAL2 0x25000404 /* do second special operation */ +#define DIBUTTON_CADF_MENU 0x250004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_CADF_HATSWITCH 0x25004601 /* Hat switch */ +#define DIAXIS_CADF_ROTATEX 0x25034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_CADF_ROTATEY 0x2502C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_CADF_ROTATEZ 0x25024206 /* Rotate view left / right */ +#define DIBUTTON_CADF_DISPLAY 0x25004405 /* shows next on-screen display options */ +#define DIBUTTON_CADF_DEVICE 0x250044FE /* Show input device and controls */ +#define DIBUTTON_CADF_PAUSE 0x250044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D Model Control + Controls for 3D modeling ---*/ +#define DIVIRTUAL_CAD_MODEL 0x26000000 +#define DIAXIS_CADM_LATERAL 0x26008201 /* move view left / right */ +#define DIAXIS_CADM_MOVE 0x26010202 /* move view up / down */ +#define DIAXIS_CADM_INOUT 0x26018203 /* in / out */ +#define DIBUTTON_CADM_SELECT 0x26000401 /* Select Object */ +#define DIBUTTON_CADM_SPECIAL1 0x26000402 /* do first special operation */ +#define DIBUTTON_CADM_SPECIAL 0x26000403 /* Select special operation */ +#define DIBUTTON_CADM_SPECIAL2 0x26000404 /* do second special operation */ +#define DIBUTTON_CADM_MENU 0x260004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_CADM_HATSWITCH 0x26004601 /* Hat switch */ +#define DIAXIS_CADM_ROTATEX 0x26034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_CADM_ROTATEY 0x2602C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_CADM_ROTATEZ 0x26024206 /* Rotate view left / right */ +#define DIBUTTON_CADM_DISPLAY 0x26004405 /* shows next on-screen display options */ +#define DIBUTTON_CADM_DEVICE 0x260044FE /* Show input device and controls */ +#define DIBUTTON_CADM_PAUSE 0x260044FC /* Start / Pause / Restart game */ + +/*--- Control - Media Equipment + Remote ---*/ +#define DIVIRTUAL_REMOTE_CONTROL 0x27000000 +#define DIAXIS_REMOTE_SLIDER 0x27050201 /* Slider for adjustment: volume / color / bass / etc */ +#define DIBUTTON_REMOTE_MUTE 0x27000401 /* Set volume on current device to zero */ +#define DIBUTTON_REMOTE_SELECT 0x27000402 /* Next/previous: channel/ track / chapter / picture / station */ +#define DIBUTTON_REMOTE_PLAY 0x27002403 /* Start or pause entertainment on current device */ +#define DIBUTTON_REMOTE_CUE 0x27002404 /* Move through current media */ +#define DIBUTTON_REMOTE_REVIEW 0x27002405 /* Move through current media */ +#define DIBUTTON_REMOTE_CHANGE 0x27002406 /* Select next device */ +#define DIBUTTON_REMOTE_RECORD 0x27002407 /* Start recording the current media */ +#define DIBUTTON_REMOTE_MENU 0x270004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_REMOTE_SLIDER2 0x27054202 /* Slider for adjustment: volume */ +#define DIBUTTON_REMOTE_TV 0x27005C08 /* Select TV */ +#define DIBUTTON_REMOTE_CABLE 0x27005C09 /* Select cable box */ +#define DIBUTTON_REMOTE_CD 0x27005C0A /* Select CD player */ +#define DIBUTTON_REMOTE_VCR 0x27005C0B /* Select VCR */ +#define DIBUTTON_REMOTE_TUNER 0x27005C0C /* Select tuner */ +#define DIBUTTON_REMOTE_DVD 0x27005C0D /* Select DVD player */ +#define DIBUTTON_REMOTE_ADJUST 0x27005C0E /* Enter device adjustment menu */ +#define DIBUTTON_REMOTE_DIGIT0 0x2700540F /* Digit 0 */ +#define DIBUTTON_REMOTE_DIGIT1 0x27005410 /* Digit 1 */ +#define DIBUTTON_REMOTE_DIGIT2 0x27005411 /* Digit 2 */ +#define DIBUTTON_REMOTE_DIGIT3 0x27005412 /* Digit 3 */ +#define DIBUTTON_REMOTE_DIGIT4 0x27005413 /* Digit 4 */ +#define DIBUTTON_REMOTE_DIGIT5 0x27005414 /* Digit 5 */ +#define DIBUTTON_REMOTE_DIGIT6 0x27005415 /* Digit 6 */ +#define DIBUTTON_REMOTE_DIGIT7 0x27005416 /* Digit 7 */ +#define DIBUTTON_REMOTE_DIGIT8 0x27005417 /* Digit 8 */ +#define DIBUTTON_REMOTE_DIGIT9 0x27005418 /* Digit 9 */ +#define DIBUTTON_REMOTE_DEVICE 0x270044FE /* Show input device and controls */ +#define DIBUTTON_REMOTE_PAUSE 0x270044FC /* Start / Pause / Restart game */ + +/*--- Control- Web + Help or Browser ---*/ +#define DIVIRTUAL_BROWSER_CONTROL 0x28000000 +#define DIAXIS_BROWSER_LATERAL 0x28008201 /* Move on screen pointer */ +#define DIAXIS_BROWSER_MOVE 0x28010202 /* Move on screen pointer */ +#define DIBUTTON_BROWSER_SELECT 0x28000401 /* Select current item */ +#define DIAXIS_BROWSER_VIEW 0x28018203 /* Move view up/down */ +#define DIBUTTON_BROWSER_REFRESH 0x28000402 /* Refresh */ +#define DIBUTTON_BROWSER_MENU 0x280004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BROWSER_SEARCH 0x28004403 /* Use search tool */ +#define DIBUTTON_BROWSER_STOP 0x28004404 /* Cease current update */ +#define DIBUTTON_BROWSER_HOME 0x28004405 /* Go directly to "home" location */ +#define DIBUTTON_BROWSER_FAVORITES 0x28004406 /* Mark current site as favorite */ +#define DIBUTTON_BROWSER_NEXT 0x28004407 /* Select Next page */ +#define DIBUTTON_BROWSER_PREVIOUS 0x28004408 /* Select Previous page */ +#define DIBUTTON_BROWSER_HISTORY 0x28004409 /* Show/Hide History */ +#define DIBUTTON_BROWSER_PRINT 0x2800440A /* Print current page */ +#define DIBUTTON_BROWSER_DEVICE 0x280044FE /* Show input device and controls */ +#define DIBUTTON_BROWSER_PAUSE 0x280044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Giant Walking Robot + Walking tank with weapons ---*/ +#define DIVIRTUAL_DRIVING_MECHA 0x29000000 +#define DIAXIS_MECHA_STEER 0x29008201 /* Turns mecha left/right */ +#define DIAXIS_MECHA_TORSO 0x29010202 /* Tilts torso forward/backward */ +#define DIAXIS_MECHA_ROTATE 0x29020203 /* Turns torso left/right */ +#define DIAXIS_MECHA_THROTTLE 0x29038204 /* Engine Speed */ +#define DIBUTTON_MECHA_FIRE 0x29000401 /* Fire */ +#define DIBUTTON_MECHA_WEAPONS 0x29000402 /* Select next weapon group */ +#define DIBUTTON_MECHA_TARGET 0x29000403 /* Select closest enemy available target */ +#define DIBUTTON_MECHA_REVERSE 0x29000404 /* Toggles throttle in/out of reverse */ +#define DIBUTTON_MECHA_ZOOM 0x29000405 /* Zoom in/out targeting reticule */ +#define DIBUTTON_MECHA_JUMP 0x29000406 /* Fires jump jets */ +#define DIBUTTON_MECHA_MENU 0x290004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_MECHA_CENTER 0x29004407 /* Center torso to legs */ +#define DIHATSWITCH_MECHA_GLANCE 0x29004601 /* Look around */ +#define DIBUTTON_MECHA_VIEW 0x29004408 /* Cycle through view options */ +#define DIBUTTON_MECHA_FIRESECONDARY 0x29004409 /* Alternative fire button */ +#define DIBUTTON_MECHA_LEFT_LINK 0x2900C4E4 /* Fallback steer left button */ +#define DIBUTTON_MECHA_RIGHT_LINK 0x2900C4EC /* Fallback steer right button */ +#define DIBUTTON_MECHA_FORWARD_LINK 0x290144E0 /* Fallback tilt torso forward button */ +#define DIBUTTON_MECHA_BACK_LINK 0x290144E8 /* Fallback tilt toroso backward button */ +#define DIBUTTON_MECHA_ROTATE_LEFT_LINK 0x290244E4 /* Fallback rotate toroso right button */ +#define DIBUTTON_MECHA_ROTATE_RIGHT_LINK 0x290244EC /* Fallback rotate torso left button */ +#define DIBUTTON_MECHA_FASTER_LINK 0x2903C4E0 /* Fallback increase engine speed */ +#define DIBUTTON_MECHA_SLOWER_LINK 0x2903C4E8 /* Fallback decrease engine speed */ +#define DIBUTTON_MECHA_DEVICE 0x290044FE /* Show input device and controls */ +#define DIBUTTON_MECHA_PAUSE 0x290044FC /* Start / Pause / Restart game */ + +/* + * "ANY" semantics can be used as a last resort to get mappings for actions + * that match nothing in the chosen virtual genre. These semantics will be + * mapped at a lower priority that virtual genre semantics. Also, hardware + * vendors will not be able to provide sensible mappings for these unless + * they provide application specific mappings. + */ +#define DIAXIS_ANY_X_1 0xFF00C201 +#define DIAXIS_ANY_X_2 0xFF00C202 +#define DIAXIS_ANY_Y_1 0xFF014201 +#define DIAXIS_ANY_Y_2 0xFF014202 +#define DIAXIS_ANY_Z_1 0xFF01C201 +#define DIAXIS_ANY_Z_2 0xFF01C202 +#define DIAXIS_ANY_R_1 0xFF024201 +#define DIAXIS_ANY_R_2 0xFF024202 +#define DIAXIS_ANY_U_1 0xFF02C201 +#define DIAXIS_ANY_U_2 0xFF02C202 +#define DIAXIS_ANY_V_1 0xFF034201 +#define DIAXIS_ANY_V_2 0xFF034202 +#define DIAXIS_ANY_A_1 0xFF03C201 +#define DIAXIS_ANY_A_2 0xFF03C202 +#define DIAXIS_ANY_B_1 0xFF044201 +#define DIAXIS_ANY_B_2 0xFF044202 +#define DIAXIS_ANY_C_1 0xFF04C201 +#define DIAXIS_ANY_C_2 0xFF04C202 +#define DIAXIS_ANY_S_1 0xFF054201 +#define DIAXIS_ANY_S_2 0xFF054202 + +#define DIAXIS_ANY_1 0xFF004201 +#define DIAXIS_ANY_2 0xFF004202 +#define DIAXIS_ANY_3 0xFF004203 +#define DIAXIS_ANY_4 0xFF004204 + +#define DIPOV_ANY_1 0xFF004601 +#define DIPOV_ANY_2 0xFF004602 +#define DIPOV_ANY_3 0xFF004603 +#define DIPOV_ANY_4 0xFF004604 + +#define DIBUTTON_ANY(instance) ( 0xFF004400 | instance ) + + +#ifdef __cplusplus +}; +#endif + +#endif /* __DINPUT_INCLUDED__ */ + +/**************************************************************************** + * + * Definitions for non-IDirectInput (VJoyD) features defined more recently + * than the current sdk files + * + ****************************************************************************/ + +#ifdef _INC_MMSYSTEM +#ifndef MMNOJOY + +#ifndef __VJOYDX_INCLUDED__ +#define __VJOYDX_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure + * contains mini-driver specific data to be passed by VJoyD to the mini- + * driver instead of doing a poll. + */ +#define JOY_PASSDRIVERDATA 0x10000000l + +/* + * Informs the joystick driver that the configuration has been changed + * and should be reloaded from the registery. + * dwFlags is reserved and should be set to zero + */ +WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags ); + +#ifndef DIJ_RINGZERO +/* + * Invoke the joystick control panel directly, using the passed window handle + * as the parent of the dialog. This API is only supported for compatibility + * purposes; new applications should use the RunControlPanel method of a + * device interface for a game controller. + * The API is called by using the function pointer returned by + * GetProcAddress( hCPL, TEXT("ShowJoyCPL") ) where hCPL is a HMODULE returned + * by LoadLibrary( TEXT("joy.cpl") ). The typedef is provided to allow + * declaration and casting of an appropriately typed variable. + */ +void WINAPI ShowJoyCPL( HWND hWnd ); +typedef void (WINAPI* LPFNSHOWJOYCPL)( HWND hWnd ); +#endif /* DIJ_RINGZERO */ + + +/* + * Hardware Setting indicating that the device is a headtracker + */ +#define JOY_HWS_ISHEADTRACKER 0x02000000l + +/* + * Hardware Setting indicating that the VxD is used to replace + * the standard analog polling + */ +#define JOY_HWS_ISGAMEPORTDRIVER 0x04000000l + +/* + * Hardware Setting indicating that the driver needs a standard + * gameport in order to communicate with the device. + */ +#define JOY_HWS_ISANALOGPORTDRIVER 0x08000000l + +/* + * Hardware Setting indicating that VJoyD should not load this + * driver, it will be loaded externally and will register with + * VJoyD of it's own accord. + */ +#define JOY_HWS_AUTOLOAD 0x10000000l + +/* + * Hardware Setting indicating that the driver acquires any + * resources needed without needing a devnode through VJoyD. + */ +#define JOY_HWS_NODEVNODE 0x20000000l + + +/* + * Hardware Setting indicating that the device is a gameport bus + */ +#define JOY_HWS_ISGAMEPORTBUS 0x80000000l +#define JOY_HWS_GAMEPORTBUSBUSY 0x00000001l + +/* + * Usage Setting indicating that the settings are volatile and + * should be removed if still present on a reboot. + */ +#define JOY_US_VOLATILE 0x00000008L + +#ifdef __cplusplus +}; +#endif + +#endif /* __VJOYDX_INCLUDED__ */ + +#endif /* not MMNOJOY */ +#endif /* _INC_MMSYSTEM */ + +/**************************************************************************** + * + * Definitions for non-IDirectInput (VJoyD) features defined more recently + * than the current ddk files + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +#ifdef _INC_MMDDK +#ifndef MMNOJOYDEV + +#ifndef __VJOYDXD_INCLUDED__ +#define __VJOYDXD_INCLUDED__ +/* + * Poll type in which the do_other field of the JOYOEMPOLLDATA + * structure contains mini-driver specific data passed from an app. + */ +#define JOY_OEMPOLL_PASSDRIVERDATA 7 + +#endif /* __VJOYDXD_INCLUDED__ */ + +#endif /* not MMNOJOYDEV */ +#endif /* _INC_MMDDK */ + +#endif /* DIJ_RINGZERO */ + diff --git a/desmume/src/windows/directx/dinput8.lib b/desmume/src/windows/directx/dinput8.lib new file mode 100644 index 0000000000000000000000000000000000000000..a639c4ecb6ceb5d28475ae54e0ceac66d6acf01f GIT binary patch literal 173542 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