home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / dinput.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  92.8 KB  |  2,317 lines

  1. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  2. /****************************************************************************
  3.  *
  4.  *  Copyright (C) 1996-1999 Microsoft Corporation.  All Rights Reserved.
  5.  *
  6.  *  File:       dinput.h
  7.  *  Content:    DirectInput include file
  8.  *
  9.  ****************************************************************************/
  10.  
  11. #ifndef __DINPUT_INCLUDED__
  12. #define __DINPUT_INCLUDED__
  13.  
  14. #ifndef DIJ_RINGZERO
  15.  
  16. #ifdef _WIN32
  17. #define COM_NO_WINDOWS_H
  18. #include <objbase.h>
  19. #endif
  20.  
  21. #endif /* DIJ_RINGZERO */
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27.  
  28.  
  29.  
  30. /*
  31.  *  To build applications for older versions of DirectInput 
  32.  *
  33.  *  #define DIRECTINPUT_VERSION 0x0300
  34.  *  or
  35.  *  #define DIRECTINPUT_VERSION 0x0500
  36.  *
  37.  *  before #include <dinput.h>.  By default, #include <dinput.h>
  38.  *  will produce a DirectX 7-compatible header file.
  39.  *
  40.  */
  41.  
  42. #ifndef DIRECTINPUT_VERSION
  43. #define DIRECTINPUT_VERSION         0x0700
  44. #endif
  45.  
  46. #ifndef DIJ_RINGZERO
  47. /****************************************************************************
  48.  *
  49.  *      Class IDs
  50.  *
  51.  ****************************************************************************/
  52.  
  53. DEFINE_GUID(CLSID_DirectInput,      0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  54. DEFINE_GUID(CLSID_DirectInputDevice,0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  55.  
  56. /****************************************************************************
  57.  *
  58.  *      Interfaces
  59.  *
  60.  ****************************************************************************/
  61.  
  62. DEFINE_GUID(IID_IDirectInputA,     0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  63. DEFINE_GUID(IID_IDirectInputW,     0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  64. DEFINE_GUID(IID_IDirectInput2A,    0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  65. DEFINE_GUID(IID_IDirectInput2W,    0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  66. DEFINE_GUID(IID_IDirectInput7A,    0X9A4CB684,0X236D,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  67. DEFINE_GUID(IID_IDirectInput7W,    0X9A4CB685,0X236D,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  68. DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  69. DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  70. DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  71. DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  72.  
  73. DEFINE_GUID(IID_IDirectInputEffect,  0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  74.  
  75. DEFINE_GUID(IID_IDirectInputDevice7A,0X57D7C6BC,0X2356,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  76. DEFINE_GUID(IID_IDirectInputDevice7W,0X57D7C6BD,0X2356,0X11D3,0X8E,0X9D,0X00,0XC0,0X4F,0X68,0X44,0XAE);
  77.  
  78. /****************************************************************************
  79.  *
  80.  *      Predefined object types
  81.  *
  82.  ****************************************************************************/
  83.  
  84. DEFINE_GUID(GUID_XAxis,   0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  85. DEFINE_GUID(GUID_YAxis,   0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  86. DEFINE_GUID(GUID_ZAxis,   0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  87. DEFINE_GUID(GUID_RxAxis,  0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  88. DEFINE_GUID(GUID_RyAxis,  0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  89. DEFINE_GUID(GUID_RzAxis,  0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  90. DEFINE_GUID(GUID_Slider,  0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  91.  
  92. DEFINE_GUID(GUID_Button,  0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  93. DEFINE_GUID(GUID_Key,     0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  94.  
  95. DEFINE_GUID(GUID_POV,     0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  96.  
  97. DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  98.  
  99. /****************************************************************************
  100.  *
  101.  *      Predefined product GUIDs
  102.  *
  103.  ****************************************************************************/
  104.  
  105. DEFINE_GUID(GUID_SysMouse,   0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  106. DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  107. DEFINE_GUID(GUID_Joystick   ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  108. DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  109. DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  110. DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  111. DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);
  112.  
  113. /****************************************************************************
  114.  *
  115.  *      Predefined force feedback effects
  116.  *
  117.  ****************************************************************************/
  118.  
  119. DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  120. DEFINE_GUID(GUID_RampForce,     0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  121. DEFINE_GUID(GUID_Square,        0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  122. DEFINE_GUID(GUID_Sine,          0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  123. DEFINE_GUID(GUID_Triangle,      0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  124. DEFINE_GUID(GUID_SawtoothUp,    0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  125. DEFINE_GUID(GUID_SawtoothDown,  0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  126. DEFINE_GUID(GUID_Spring,        0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  127. DEFINE_GUID(GUID_Damper,        0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  128. DEFINE_GUID(GUID_Inertia,       0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  129. DEFINE_GUID(GUID_Friction,      0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  130. DEFINE_GUID(GUID_CustomForce,   0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);
  131.  
  132. #endif /* DIJ_RINGZERO */
  133.  
  134. /****************************************************************************
  135.  *
  136.  *      Interfaces and Structures...
  137.  *
  138.  ****************************************************************************/
  139.  
  140. #if(DIRECTINPUT_VERSION >= 0x0500)
  141.  
  142. /****************************************************************************
  143.  *
  144.  *      IDirectInputEffect
  145.  *
  146.  ****************************************************************************/
  147.  
  148. #define DIEFT_ALL                   0x00000000
  149.  
  150. #define DIEFT_CONSTANTFORCE         0x00000001
  151. #define DIEFT_RAMPFORCE             0x00000002
  152. #define DIEFT_PERIODIC              0x00000003
  153. #define DIEFT_CONDITION             0x00000004
  154. #define DIEFT_CUSTOMFORCE           0x00000005
  155. #define DIEFT_HARDWARE              0x000000FF
  156. #define DIEFT_FFATTACK              0x00000200
  157. #define DIEFT_FFFADE                0x00000400
  158. #define DIEFT_SATURATION            0x00000800
  159. #define DIEFT_POSNEGCOEFFICIENTS    0x00001000
  160. #define DIEFT_POSNEGSATURATION      0x00002000
  161. #define DIEFT_DEADBAND              0x00004000
  162. #define DIEFT_STARTDELAY            0x00008000
  163. #define DIEFT_GETTYPE(n)            LOBYTE(n)
  164.  
  165. #define DI_DEGREES                  100
  166. #define DI_FFNOMINALMAX             10000
  167. #define DI_SECONDS                  1000000
  168.  
  169. typedef struct DICONSTANTFORCE {
  170.     LONG  lMagnitude;
  171. } DICONSTANTFORCE, *LPDICONSTANTFORCE;
  172. typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;
  173.  
  174. typedef struct DIRAMPFORCE {
  175.     LONG  lStart;
  176.     LONG  lEnd;
  177. } DIRAMPFORCE, *LPDIRAMPFORCE;
  178. typedef const DIRAMPFORCE *LPCDIRAMPFORCE;
  179.  
  180. typedef struct DIPERIODIC {
  181.     DWORD dwMagnitude;
  182.     LONG  lOffset;
  183.     DWORD dwPhase;
  184.     DWORD dwPeriod;
  185. } DIPERIODIC, *LPDIPERIODIC;
  186. typedef const DIPERIODIC *LPCDIPERIODIC;
  187.  
  188. typedef struct DICONDITION {
  189.     LONG  lOffset;
  190.     LONG  lPositiveCoefficient;
  191.     LONG  lNegativeCoefficient;
  192.     DWORD dwPositiveSaturation;
  193.     DWORD dwNegativeSaturation;
  194.     LONG  lDeadBand;
  195. } DICONDITION, *LPDICONDITION;
  196. typedef const DICONDITION *LPCDICONDITION;
  197.  
  198. typedef struct DICUSTOMFORCE {
  199.     DWORD cChannels;
  200.     DWORD dwSamplePeriod;
  201.     DWORD cSamples;
  202.     LPLONG rglForceData;
  203. } DICUSTOMFORCE, *LPDICUSTOMFORCE;
  204. typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;
  205.  
  206.  
  207. typedef struct DIENVELOPE {
  208.     DWORD dwSize;                   /* sizeof(DIENVELOPE)   */
  209.     DWORD dwAttackLevel;
  210.     DWORD dwAttackTime;             /* Microseconds         */
  211.     DWORD dwFadeLevel;
  212.     DWORD dwFadeTime;               /* Microseconds         */
  213. } DIENVELOPE, *LPDIENVELOPE;
  214. typedef const DIENVELOPE *LPCDIENVELOPE;
  215.  
  216.  
  217. /* This structure is defined for DirectX 5.0 compatibility */
  218. typedef struct DIEFFECT_DX5 {
  219.     DWORD dwSize;                   /* sizeof(DIEFFECT_DX5) */
  220.     DWORD dwFlags;                  /* DIEFF_*              */
  221.     DWORD dwDuration;               /* Microseconds         */
  222.     DWORD dwSamplePeriod;           /* Microseconds         */
  223.     DWORD dwGain;
  224.     DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */
  225.     DWORD dwTriggerRepeatInterval;  /* Microseconds         */
  226.     DWORD cAxes;                    /* Number of axes       */
  227.     LPDWORD rgdwAxes;               /* Array of axes        */
  228.     LPLONG rglDirection;            /* Array of directions  */
  229.     LPDIENVELOPE lpEnvelope;        /* Optional             */
  230.     DWORD cbTypeSpecificParams;     /* Size of params       */
  231.     LPVOID lpvTypeSpecificParams;   /* Pointer to params    */
  232. } DIEFFECT_DX5, *LPDIEFFECT_DX5;
  233. typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;
  234.  
  235. typedef struct DIEFFECT {
  236.     DWORD dwSize;                   /* sizeof(DIEFFECT)     */
  237.     DWORD dwFlags;                  /* DIEFF_*              */
  238.     DWORD dwDuration;               /* Microseconds         */
  239.     DWORD dwSamplePeriod;           /* Microseconds         */
  240.     DWORD dwGain;
  241.     DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */
  242.     DWORD dwTriggerRepeatInterval;  /* Microseconds         */
  243.     DWORD cAxes;                    /* Number of axes       */
  244.     LPDWORD rgdwAxes;               /* Array of axes        */
  245.     LPLONG rglDirection;            /* Array of directions  */
  246.     LPDIENVELOPE lpEnvelope;        /* Optional             */
  247.     DWORD cbTypeSpecificParams;     /* Size of params       */
  248.     LPVOID lpvTypeSpecificParams;   /* Pointer to params    */
  249. #if(DIRECTINPUT_VERSION >= 0x0600)
  250.     DWORD  dwStartDelay;            /* Microseconds         */
  251. #endif /* DIRECTINPUT_VERSION >= 0x0600 */
  252. } DIEFFECT, *LPDIEFFECT;
  253. typedef DIEFFECT DIEFFECT_DX6;
  254. typedef LPDIEFFECT LPDIEFFECT_DX6;
  255. typedef const DIEFFECT *LPCDIEFFECT;
  256.  
  257.  
  258. #if(DIRECTINPUT_VERSION >= 0x0700)
  259. #ifndef DIJ_RINGZERO
  260. typedef struct DIFILEEFFECT{
  261.     DWORD       dwSize;
  262.     GUID        GuidEffect;
  263.     LPCDIEFFECT lpDiEffect;
  264.     CHAR        szFriendlyName[MAX_PATH];                    
  265. }DIFILEEFFECT, *LPDIFILEEFFECT;                                            
  266. typedef const DIFILEEFFECT *LPCDIFILEEFFECT;                                            
  267. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); 
  268. #endif /* DIJ_RINGZERO */
  269. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  270.  
  271. #define DIEFF_OBJECTIDS             0x00000001
  272. #define DIEFF_OBJECTOFFSETS         0x00000002
  273. #define DIEFF_CARTESIAN             0x00000010
  274. #define DIEFF_POLAR                 0x00000020
  275. #define DIEFF_SPHERICAL             0x00000040
  276.  
  277. #define DIEP_DURATION               0x00000001
  278. #define DIEP_SAMPLEPERIOD           0x00000002
  279. #define DIEP_GAIN                   0x00000004
  280. #define DIEP_TRIGGERBUTTON          0x00000008
  281. #define DIEP_TRIGGERREPEATINTERVAL  0x00000010
  282. #define DIEP_AXES                   0x00000020
  283. #define DIEP_DIRECTION              0x00000040
  284. #define DIEP_ENVELOPE               0x00000080
  285. #define DIEP_TYPESPECIFICPARAMS     0x00000100
  286. #if(DIRECTINPUT_VERSION >= 0x0600)
  287. #define DIEP_STARTDELAY             0x00000200
  288. #define DIEP_ALLPARAMS_DX5          0x000001FF
  289. #define DIEP_ALLPARAMS              0x000003FF
  290. #else /* DIRECTINPUT_VERSION < 0x0600 */
  291. #define DIEP_ALLPARAMS              0x000001FF
  292. #endif /* DIRECTINPUT_VERSION < 0x0600 */
  293. #define DIEP_START                  0x20000000
  294. #define DIEP_NORESTART              0x40000000
  295. #define DIEP_NODOWNLOAD             0x80000000
  296. #define DIEB_NOTRIGGER              0xFFFFFFFF
  297.  
  298. #define DIES_SOLO                   0x00000001
  299. #define DIES_NODOWNLOAD             0x80000000
  300.  
  301. #define DIEGES_PLAYING              0x00000001
  302. #define DIEGES_EMULATED             0x00000002
  303.  
  304. typedef struct DIEFFESCAPE {
  305.     DWORD   dwSize;
  306.     DWORD   dwCommand;
  307.     LPVOID  lpvInBuffer;
  308.     DWORD   cbInBuffer;
  309.     LPVOID  lpvOutBuffer;
  310.     DWORD   cbOutBuffer;
  311. } DIEFFESCAPE, *LPDIEFFESCAPE;
  312.  
  313. #ifndef DIJ_RINGZERO
  314.  
  315. #undef INTERFACE
  316. #define INTERFACE IDirectInputEffect
  317.  
  318. DECLARE_INTERFACE_(IDirectInputEffect, IUnknown)
  319. {
  320.     /*** IUnknown methods ***/
  321.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  322.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  323.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  324.  
  325.     /*** IDirectInputEffect methods ***/
  326.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  327.     STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;
  328.     STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE;
  329.     STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE;
  330.     STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE;
  331.     STDMETHOD(Stop)(THIS) PURE;
  332.     STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;
  333.     STDMETHOD(Download)(THIS) PURE;
  334.     STDMETHOD(Unload)(THIS) PURE;
  335.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  336. };
  337.  
  338. typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
  339.  
  340. #if !defined(__cplusplus) || defined(CINTERFACE)
  341. #define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  342. #define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p)
  343. #define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p)
  344. #define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  345. #define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a)
  346. #define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b)
  347. #define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b)
  348. #define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b)
  349. #define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p)
  350. #define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a)
  351. #define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p)
  352. #define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p)
  353. #define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  354. #else
  355. #define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  356. #define IDirectInputEffect_AddRef(p) (p)->AddRef()
  357. #define IDirectInputEffect_Release(p) (p)->Release()
  358. #define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  359. #define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a)
  360. #define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b)
  361. #define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b)
  362. #define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b)
  363. #define IDirectInputEffect_Stop(p) (p)->Stop()
  364. #define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a)
  365. #define IDirectInputEffect_Download(p) (p)->Download()
  366. #define IDirectInputEffect_Unload(p) (p)->Unload()
  367. #define IDirectInputEffect_Escape(p,a) (p)->Escape(a)
  368. #endif
  369.  
  370. #endif /* DIJ_RINGZERO */
  371.  
  372. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  373.  
  374. /****************************************************************************
  375.  *
  376.  *      IDirectInputDevice
  377.  *
  378.  ****************************************************************************/
  379.  
  380. #define DIDEVTYPE_DEVICE    1
  381. #define DIDEVTYPE_MOUSE     2
  382. #define DIDEVTYPE_KEYBOARD  3
  383. #define DIDEVTYPE_JOYSTICK  4
  384. #define DIDEVTYPE_HID       0x00010000
  385.  
  386. #define DIDEVTYPEMOUSE_UNKNOWN          1
  387. #define DIDEVTYPEMOUSE_TRADITIONAL      2
  388. #define DIDEVTYPEMOUSE_FINGERSTICK      3
  389. #define DIDEVTYPEMOUSE_TOUCHPAD         4
  390. #define DIDEVTYPEMOUSE_TRACKBALL        5
  391.  
  392. #define DIDEVTYPEKEYBOARD_UNKNOWN       0
  393. #define DIDEVTYPEKEYBOARD_PCXT          1
  394. #define DIDEVTYPEKEYBOARD_OLIVETTI      2
  395. #define DIDEVTYPEKEYBOARD_PCAT          3
  396. #define DIDEVTYPEKEYBOARD_PCENH         4
  397. #define DIDEVTYPEKEYBOARD_NOKIA1050     5
  398. #define DIDEVTYPEKEYBOARD_NOKIA9140     6
  399. #define DIDEVTYPEKEYBOARD_NEC98         7
  400. #define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8
  401. #define DIDEVTYPEKEYBOARD_NEC98106      9
  402. #define DIDEVTYPEKEYBOARD_JAPAN106     10
  403. #define DIDEVTYPEKEYBOARD_JAPANAX      11
  404. #define DIDEVTYPEKEYBOARD_J3100        12
  405.  
  406. #define DIDEVTYPEJOYSTICK_UNKNOWN       1
  407. #define DIDEVTYPEJOYSTICK_TRADITIONAL   2
  408. #define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3
  409. #define DIDEVTYPEJOYSTICK_GAMEPAD       4
  410. #define DIDEVTYPEJOYSTICK_RUDDER        5
  411. #define DIDEVTYPEJOYSTICK_WHEEL         6
  412. #define DIDEVTYPEJOYSTICK_HEADTRACKER   7
  413.  
  414. #define GET_DIDEVICE_TYPE(dwDevType)    LOBYTE(dwDevType)
  415. #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)
  416.  
  417. #if(DIRECTINPUT_VERSION >= 0x0500)
  418. /* This structure is defined for DirectX 3.0 compatibility */
  419. typedef struct DIDEVCAPS_DX3 {
  420.     DWORD   dwSize;
  421.     DWORD   dwFlags;
  422.     DWORD   dwDevType;
  423.     DWORD   dwAxes;
  424.     DWORD   dwButtons;
  425.     DWORD   dwPOVs;
  426. } DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;
  427. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  428.  
  429. typedef struct DIDEVCAPS {
  430.     DWORD   dwSize;
  431.     DWORD   dwFlags;
  432.     DWORD   dwDevType;
  433.     DWORD   dwAxes;
  434.     DWORD   dwButtons;
  435.     DWORD   dwPOVs;
  436. #if(DIRECTINPUT_VERSION >= 0x0500)
  437.     DWORD   dwFFSamplePeriod;
  438.     DWORD   dwFFMinTimeResolution;
  439.     DWORD   dwFirmwareRevision;
  440.     DWORD   dwHardwareRevision;
  441.     DWORD   dwFFDriverVersion;
  442. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  443. } DIDEVCAPS, *LPDIDEVCAPS;
  444.  
  445. #define DIDC_ATTACHED           0x00000001
  446. #define DIDC_POLLEDDEVICE       0x00000002
  447. #define DIDC_EMULATED           0x00000004
  448. #define DIDC_POLLEDDATAFORMAT   0x00000008
  449. #if(DIRECTINPUT_VERSION >= 0x0500)
  450. #define DIDC_FORCEFEEDBACK      0x00000100
  451. #define DIDC_FFATTACK           0x00000200
  452. #define DIDC_FFFADE             0x00000400
  453. #define DIDC_SATURATION         0x00000800
  454. #define DIDC_POSNEGCOEFFICIENTS 0x00001000
  455. #define DIDC_POSNEGSATURATION   0x00002000
  456. #define DIDC_DEADBAND           0x00004000
  457. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  458. #define DIDC_STARTDELAY         0x00008000
  459. #if(DIRECTINPUT_VERSION >= 0x050a)
  460. #define DIDC_ALIAS              0x00010000
  461. #define DIDC_PHANTOM            0x00020000
  462. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  463.  
  464. #define DIDFT_ALL           0x00000000
  465.  
  466. #define DIDFT_RELAXIS       0x00000001
  467. #define DIDFT_ABSAXIS       0x00000002
  468. #define DIDFT_AXIS          0x00000003
  469.  
  470. #define DIDFT_PSHBUTTON     0x00000004
  471. #define DIDFT_TGLBUTTON     0x00000008
  472. #define DIDFT_BUTTON        0x0000000C
  473.  
  474. #define DIDFT_POV           0x00000010
  475. #define DIDFT_COLLECTION    0x00000040
  476. #define DIDFT_NODATA        0x00000080
  477.  
  478. #define DIDFT_ANYINSTANCE   0x00FFFF00
  479. #define DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE
  480. #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)
  481. #define DIDFT_GETTYPE(n)     LOBYTE(n)
  482. #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)
  483. #define DIDFT_FFACTUATOR        0x01000000
  484. #define DIDFT_FFEFFECTTRIGGER   0x02000000
  485. #if(DIRECTINPUT_VERSION >= 0x050a)
  486. #define DIDFT_OUTPUT            0x10000000
  487. #define DIDFT_VENDORDEFINED     0x04000000
  488. #define DIDFT_ALIAS             0x08000000
  489. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  490.  
  491. #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)
  492. #define DIDFT_NOCOLLECTION      0x00FFFF00
  493.  
  494. #ifndef DIJ_RINGZERO
  495.  
  496. typedef struct _DIOBJECTDATAFORMAT {
  497.     const GUID *pguid;
  498.     DWORD   dwOfs;
  499.     DWORD   dwType;
  500.     DWORD   dwFlags;
  501. } DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;
  502. typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;
  503.  
  504. typedef struct _DIDATAFORMAT {
  505.     DWORD   dwSize;
  506.     DWORD   dwObjSize;
  507.     DWORD   dwFlags;
  508.     DWORD   dwDataSize;
  509.     DWORD   dwNumObjs;
  510.     LPDIOBJECTDATAFORMAT rgodf;
  511. } DIDATAFORMAT, *LPDIDATAFORMAT;
  512. typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
  513.  
  514. #define DIDF_ABSAXIS            0x00000001
  515. #define DIDF_RELAXIS            0x00000002
  516.  
  517. #ifdef __cplusplus
  518. extern "C" {
  519. #endif
  520. extern const DIDATAFORMAT c_dfDIMouse;
  521.  
  522. #if(DIRECTINPUT_VERSION >= 0x0700)
  523. extern const DIDATAFORMAT c_dfDIMouse2;
  524. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  525.  
  526. extern const DIDATAFORMAT c_dfDIKeyboard;
  527.  
  528. #if(DIRECTINPUT_VERSION >= 0x0500)
  529. extern const DIDATAFORMAT c_dfDIJoystick;
  530. extern const DIDATAFORMAT c_dfDIJoystick2;
  531. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  532.  
  533. #ifdef __cplusplus
  534. };
  535. #endif
  536.  
  537. #if(DIRECTINPUT_VERSION >= 0x0500)
  538. /* These structures are defined for DirectX 3.0 compatibility */
  539.  
  540. typedef struct DIDEVICEOBJECTINSTANCE_DX3A {
  541.     DWORD   dwSize;
  542.     GUID    guidType;
  543.     DWORD   dwOfs;
  544.     DWORD   dwType;
  545.     DWORD   dwFlags;
  546.     CHAR    tszName[MAX_PATH];
  547. } DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;
  548. typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
  549.     DWORD   dwSize;
  550.     GUID    guidType;
  551.     DWORD   dwOfs;
  552.     DWORD   dwType;
  553.     DWORD   dwFlags;
  554.     WCHAR   tszName[MAX_PATH];
  555. } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
  556. #ifdef UNICODE
  557. typedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3;
  558. typedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3;
  559. #else
  560. typedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3;
  561. typedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3;
  562. #endif // UNICODE
  563. typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;
  564. typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
  565. typedef const DIDEVICEOBJECTINSTANCE_DX3  *LPCDIDEVICEOBJECTINSTANCE_DX3;
  566. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  567.  
  568. typedef struct DIDEVICEOBJECTINSTANCEA {
  569.     DWORD   dwSize;
  570.     GUID    guidType;
  571.     DWORD   dwOfs;
  572.     DWORD   dwType;
  573.     DWORD   dwFlags;
  574.     CHAR    tszName[MAX_PATH];
  575. #if(DIRECTINPUT_VERSION >= 0x0500)
  576.     DWORD   dwFFMaxForce;
  577.     DWORD   dwFFForceResolution;
  578.     WORD    wCollectionNumber;
  579.     WORD    wDesignatorIndex;
  580.     WORD    wUsagePage;
  581.     WORD    wUsage;
  582.     DWORD   dwDimension;
  583.     WORD    wExponent;
  584.     WORD    wReportId;
  585. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  586. } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
  587. typedef struct DIDEVICEOBJECTINSTANCEW {
  588.     DWORD   dwSize;
  589.     GUID    guidType;
  590.     DWORD   dwOfs;
  591.     DWORD   dwType;
  592.     DWORD   dwFlags;
  593.     WCHAR   tszName[MAX_PATH];
  594. #if(DIRECTINPUT_VERSION >= 0x0500)
  595.     DWORD   dwFFMaxForce;
  596.     DWORD   dwFFForceResolution;
  597.     WORD    wCollectionNumber;
  598.     WORD    wDesignatorIndex;
  599.     WORD    wUsagePage;
  600.     WORD    wUsage;
  601.     DWORD   dwDimension;
  602.     WORD    wExponent;
  603.     WORD    wReportId;
  604. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  605. } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
  606. #ifdef UNICODE
  607. typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE;
  608. typedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE;
  609. #else
  610. typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE;
  611. typedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE;
  612. #endif // UNICODE
  613. typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
  614. typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
  615. typedef const DIDEVICEOBJECTINSTANCE  *LPCDIDEVICEOBJECTINSTANCE;
  616.  
  617. typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID);
  618. typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID);
  619. #ifdef UNICODE
  620. #define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKW
  621. #else
  622. #define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKA
  623. #endif // !UNICODE
  624.  
  625. #if(DIRECTINPUT_VERSION >= 0x0500)
  626. #define DIDOI_FFACTUATOR        0x00000001
  627. #define DIDOI_FFEFFECTTRIGGER   0x00000002
  628. #define DIDOI_POLLED            0x00008000
  629. #define DIDOI_ASPECTPOSITION    0x00000100
  630. #define DIDOI_ASPECTVELOCITY    0x00000200
  631. #define DIDOI_ASPECTACCEL       0x00000300
  632. #define DIDOI_ASPECTFORCE       0x00000400
  633. #define DIDOI_ASPECTMASK        0x00000F00
  634. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  635. #if(DIRECTINPUT_VERSION >= 0x050a)
  636. #define DIDOI_GUIDISUSAGE       0x00010000
  637. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  638.  
  639. typedef struct DIPROPHEADER {
  640.     DWORD   dwSize;
  641.     DWORD   dwHeaderSize;
  642.     DWORD   dwObj;
  643.     DWORD   dwHow;
  644. } DIPROPHEADER, *LPDIPROPHEADER;
  645. typedef const DIPROPHEADER *LPCDIPROPHEADER;
  646.  
  647. #define DIPH_DEVICE             0
  648. #define DIPH_BYOFFSET           1
  649. #define DIPH_BYID               2
  650. #if(DIRECTINPUT_VERSION >= 0x050a)
  651. #define DIPH_BYUSAGE            3
  652.  
  653. #define DIMAKEUSAGEDWORD(UsagePage, Usage) \
  654.                                 (DWORD)MAKELONG(Usage, UsagePage)
  655. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  656.  
  657. typedef struct DIPROPDWORD {
  658.     DIPROPHEADER diph;
  659.     DWORD   dwData;
  660. } DIPROPDWORD, *LPDIPROPDWORD;
  661. typedef const DIPROPDWORD *LPCDIPROPDWORD;
  662.  
  663. typedef struct DIPROPRANGE {
  664.     DIPROPHEADER diph;
  665.     LONG    lMin;
  666.     LONG    lMax;
  667. } DIPROPRANGE, *LPDIPROPRANGE;
  668. typedef const DIPROPRANGE *LPCDIPROPRANGE;
  669.  
  670. #define DIPROPRANGE_NOMIN       ((LONG)0x80000000)
  671. #define DIPROPRANGE_NOMAX       ((LONG)0x7FFFFFFF)
  672.  
  673. #if(DIRECTINPUT_VERSION >= 0x050a)
  674. typedef struct DIPROPCAL {
  675.     DIPROPHEADER diph;
  676.     LONG    lMin;
  677.     LONG    lCenter;
  678.     LONG    lMax;
  679. } DIPROPCAL, *LPDIPROPCAL;
  680. typedef const DIPROPCAL *LPCDIPROPCAL;
  681.  
  682. typedef struct DIPROPGUIDANDPATH {
  683.     DIPROPHEADER diph;
  684.     GUID    guidClass;
  685.     WCHAR   wszPath[MAX_PATH];
  686. } DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;
  687. typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;
  688.  
  689. typedef struct DIPROPSTRING {
  690.     DIPROPHEADER diph;
  691.     WCHAR   wsz[MAX_PATH];
  692. } DIPROPSTRING, *LPDIPROPSTRING;
  693. typedef const DIPROPSTRING *LPCDIPROPSTRING;
  694.  
  695. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  696. #ifdef __cplusplus
  697. #define MAKEDIPROP(prop)    (*(const GUID *)(prop))
  698. #else
  699. #define MAKEDIPROP(prop)    ((REFGUID)(prop))
  700. #endif
  701.  
  702. #define DIPROP_BUFFERSIZE       MAKEDIPROP(1)
  703.  
  704. #define DIPROP_AXISMODE         MAKEDIPROP(2)
  705.  
  706. #define DIPROPAXISMODE_ABS      0
  707. #define DIPROPAXISMODE_REL      1
  708.  
  709. #define DIPROP_GRANULARITY      MAKEDIPROP(3)
  710.  
  711. #define DIPROP_RANGE            MAKEDIPROP(4)
  712.  
  713. #define DIPROP_DEADZONE         MAKEDIPROP(5)
  714.  
  715. #define DIPROP_SATURATION       MAKEDIPROP(6)
  716.  
  717. #define DIPROP_FFGAIN           MAKEDIPROP(7)
  718.  
  719. #define DIPROP_FFLOAD           MAKEDIPROP(8)
  720.  
  721. #define DIPROP_AUTOCENTER       MAKEDIPROP(9)
  722.  
  723. #define DIPROPAUTOCENTER_OFF    0
  724. #define DIPROPAUTOCENTER_ON     1
  725.  
  726. #define DIPROP_CALIBRATIONMODE  MAKEDIPROP(10)
  727.  
  728. #define DIPROPCALIBRATIONMODE_COOKED    0
  729. #define DIPROPCALIBRATIONMODE_RAW       1
  730.  
  731. #if(DIRECTINPUT_VERSION >= 0x050a)
  732. #define DIPROP_CALIBRATION      MAKEDIPROP(11)
  733.  
  734. #define DIPROP_GUIDANDPATH      MAKEDIPROP(12)
  735.  
  736. #define DIPROP_INSTANCENAME     MAKEDIPROP(13)
  737.  
  738. #define DIPROP_PRODUCTNAME      MAKEDIPROP(14)
  739. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  740.  
  741. #define DIPROP_JOYSTICKID       MAKEDIPROP(15)
  742.  
  743. #define DIPROP_GETPORTDISPLAYNAME       MAKEDIPROP(16)
  744.  
  745.  
  746. #define DIPROP_ENABLEREPORTID       MAKEDIPROP(17)
  747.  
  748.  
  749. #define DIPROP_GETPHYSICALRANGE            MAKEDIPROP(18)
  750.  
  751. #define DIPROP_GETLOGICALRANGE            MAKEDIPROP(19)
  752.  
  753.  
  754. typedef struct DIDEVICEOBJECTDATA {
  755.     DWORD   dwOfs;
  756.     DWORD   dwData;
  757.     DWORD   dwTimeStamp;
  758.     DWORD   dwSequence;
  759. } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
  760. typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
  761.  
  762. #define DIGDD_PEEK          0x00000001
  763.  
  764. #define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \
  765.                         ((int)((dwSequence1) - (dwSequence2)) cmp 0)
  766. #define DISCL_EXCLUSIVE     0x00000001
  767. #define DISCL_NONEXCLUSIVE  0x00000002
  768. #define DISCL_FOREGROUND    0x00000004
  769. #define DISCL_BACKGROUND    0x00000008
  770. #define DISCL_NOWINKEY      0x00000010
  771.  
  772. #if(DIRECTINPUT_VERSION >= 0x0500)
  773. /* These structures are defined for DirectX 3.0 compatibility */
  774.  
  775. typedef struct DIDEVICEINSTANCE_DX3A {
  776.     DWORD   dwSize;
  777.     GUID    guidInstance;
  778.     GUID    guidProduct;
  779.     DWORD   dwDevType;
  780.     CHAR    tszInstanceName[MAX_PATH];
  781.     CHAR    tszProductName[MAX_PATH];
  782. } DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;
  783. typedef struct DIDEVICEINSTANCE_DX3W {
  784.     DWORD   dwSize;
  785.     GUID    guidInstance;
  786.     GUID    guidProduct;
  787.     DWORD   dwDevType;
  788.     WCHAR   tszInstanceName[MAX_PATH];
  789.     WCHAR   tszProductName[MAX_PATH];
  790. } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
  791. #ifdef UNICODE
  792. typedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3;
  793. typedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3;
  794. #else
  795. typedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3;
  796. typedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3;
  797. #endif // UNICODE
  798. typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;
  799. typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
  800. typedef const DIDEVICEINSTANCE_DX3  *LPCDIDEVICEINSTANCE_DX3;
  801. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  802.  
  803. typedef struct DIDEVICEINSTANCEA {
  804.     DWORD   dwSize;
  805.     GUID    guidInstance;
  806.     GUID    guidProduct;
  807.     DWORD   dwDevType;
  808.     CHAR    tszInstanceName[MAX_PATH];
  809.     CHAR    tszProductName[MAX_PATH];
  810. #if(DIRECTINPUT_VERSION >= 0x0500)
  811.     GUID    guidFFDriver;
  812.     WORD    wUsagePage;
  813.     WORD    wUsage;
  814. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  815. } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
  816. typedef struct DIDEVICEINSTANCEW {
  817.     DWORD   dwSize;
  818.     GUID    guidInstance;
  819.     GUID    guidProduct;
  820.     DWORD   dwDevType;
  821.     WCHAR   tszInstanceName[MAX_PATH];
  822.     WCHAR   tszProductName[MAX_PATH];
  823. #if(DIRECTINPUT_VERSION >= 0x0500)
  824.     GUID    guidFFDriver;
  825.     WORD    wUsagePage;
  826.     WORD    wUsage;
  827. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  828. } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
  829. #ifdef UNICODE
  830. typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;
  831. typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE;
  832. #else
  833. typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;
  834. typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE;
  835. #endif // UNICODE
  836. typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
  837. typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
  838. typedef const DIDEVICEINSTANCE  *LPCDIDEVICEINSTANCE;
  839.  
  840. #undef INTERFACE
  841. #define INTERFACE IDirectInputDeviceW
  842.  
  843. DECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown)
  844. {
  845.     /*** IUnknown methods ***/
  846.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  847.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  848.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  849.  
  850.     /*** IDirectInputDeviceW methods ***/
  851.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  852.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  853.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  854.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  855.     STDMETHOD(Acquire)(THIS) PURE;
  856.     STDMETHOD(Unacquire)(THIS) PURE;
  857.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  858.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  859.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  860.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  861.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  862.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  863.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  864.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  865.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  866. };
  867.  
  868. typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
  869.  
  870. #undef INTERFACE
  871. #define INTERFACE IDirectInputDeviceA
  872.  
  873. DECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown)
  874. {
  875.     /*** IUnknown methods ***/
  876.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  877.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  878.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  879.  
  880.     /*** IDirectInputDeviceA methods ***/
  881.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  882.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  883.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  884.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  885.     STDMETHOD(Acquire)(THIS) PURE;
  886.     STDMETHOD(Unacquire)(THIS) PURE;
  887.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  888.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  889.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  890.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  891.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  892.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  893.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  894.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  895.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  896. };
  897.  
  898. typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
  899.  
  900. #ifdef UNICODE
  901. #define IID_IDirectInputDevice IID_IDirectInputDeviceW
  902. #define IDirectInputDevice IDirectInputDeviceW
  903. #define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl
  904. #else
  905. #define IID_IDirectInputDevice IID_IDirectInputDeviceA
  906. #define IDirectInputDevice IDirectInputDeviceA
  907. #define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl
  908. #endif
  909. typedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE;
  910.  
  911. #if !defined(__cplusplus) || defined(CINTERFACE)
  912. #define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  913. #define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p)
  914. #define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p)
  915. #define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  916. #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  917. #define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  918. #define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  919. #define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p)
  920. #define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  921. #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  922. #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  923. #define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  924. #define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  925. #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  926. #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  927. #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  928. #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  929. #define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  930. #else
  931. #define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  932. #define IDirectInputDevice_AddRef(p) (p)->AddRef()
  933. #define IDirectInputDevice_Release(p) (p)->Release()
  934. #define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a)
  935. #define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  936. #define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b)
  937. #define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b)
  938. #define IDirectInputDevice_Acquire(p) (p)->Acquire()
  939. #define IDirectInputDevice_Unacquire(p) (p)->Unacquire()
  940. #define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  941. #define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  942. #define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a)
  943. #define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a)
  944. #define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  945. #define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  946. #define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  947. #define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  948. #define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  949. #endif
  950.  
  951. #endif /* DIJ_RINGZERO */
  952.  
  953.  
  954. #if(DIRECTINPUT_VERSION >= 0x0500)
  955.  
  956. #define DISFFC_RESET            0x00000001
  957. #define DISFFC_STOPALL          0x00000002
  958. #define DISFFC_PAUSE            0x00000004
  959. #define DISFFC_CONTINUE         0x00000008
  960. #define DISFFC_SETACTUATORSON   0x00000010
  961. #define DISFFC_SETACTUATORSOFF  0x00000020
  962.  
  963. #define DIGFFS_EMPTY            0x00000001
  964. #define DIGFFS_STOPPED          0x00000002
  965. #define DIGFFS_PAUSED           0x00000004
  966. #define DIGFFS_ACTUATORSON      0x00000010
  967. #define DIGFFS_ACTUATORSOFF     0x00000020
  968. #define DIGFFS_POWERON          0x00000040
  969. #define DIGFFS_POWEROFF         0x00000080
  970. #define DIGFFS_SAFETYSWITCHON   0x00000100
  971. #define DIGFFS_SAFETYSWITCHOFF  0x00000200
  972. #define DIGFFS_USERFFSWITCHON   0x00000400
  973. #define DIGFFS_USERFFSWITCHOFF  0x00000800
  974. #define DIGFFS_DEVICELOST       0x80000000
  975.  
  976. #ifndef DIJ_RINGZERO
  977.  
  978. typedef struct DIEFFECTINFOA {
  979.     DWORD   dwSize;
  980.     GUID    guid;
  981.     DWORD   dwEffType;
  982.     DWORD   dwStaticParams;
  983.     DWORD   dwDynamicParams;
  984.     CHAR    tszName[MAX_PATH];
  985. } DIEFFECTINFOA, *LPDIEFFECTINFOA;
  986. typedef struct DIEFFECTINFOW {
  987.     DWORD   dwSize;
  988.     GUID    guid;
  989.     DWORD   dwEffType;
  990.     DWORD   dwStaticParams;
  991.     DWORD   dwDynamicParams;
  992.     WCHAR   tszName[MAX_PATH];
  993. } DIEFFECTINFOW, *LPDIEFFECTINFOW;
  994. #ifdef UNICODE
  995. typedef DIEFFECTINFOW DIEFFECTINFO;
  996. typedef LPDIEFFECTINFOW LPDIEFFECTINFO;
  997. #else
  998. typedef DIEFFECTINFOA DIEFFECTINFO;
  999. typedef LPDIEFFECTINFOA LPDIEFFECTINFO;
  1000. #endif // UNICODE
  1001. typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;
  1002. typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
  1003. typedef const DIEFFECTINFO  *LPCDIEFFECTINFO;
  1004.  
  1005. #define DISDD_CONTINUE          0x00000001
  1006.  
  1007. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
  1008. typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
  1009. #ifdef UNICODE
  1010. #define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKW
  1011. #else
  1012. #define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKA
  1013. #endif // !UNICODE
  1014. typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
  1015.  
  1016. #undef INTERFACE
  1017. #define INTERFACE IDirectInputDevice2W
  1018.  
  1019. DECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW)
  1020. {
  1021.     /*** IUnknown methods ***/
  1022.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1023.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1024.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1025.  
  1026.     /*** IDirectInputDeviceW methods ***/
  1027.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1028.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  1029.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1030.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1031.     STDMETHOD(Acquire)(THIS) PURE;
  1032.     STDMETHOD(Unacquire)(THIS) PURE;
  1033.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1034.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1035.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1036.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1037.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1038.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  1039.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  1040.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1041.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1042.  
  1043.     /*** IDirectInputDevice2W methods ***/
  1044.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1045.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;
  1046.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;
  1047.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1048.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1049.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1050.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1051.     STDMETHOD(Poll)(THIS) PURE;
  1052.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1053. };
  1054.  
  1055. typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
  1056.  
  1057. #undef INTERFACE
  1058. #define INTERFACE IDirectInputDevice2A
  1059.  
  1060. DECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA)
  1061. {
  1062.     /*** IUnknown methods ***/
  1063.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1064.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1065.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1066.  
  1067.     /*** IDirectInputDeviceA methods ***/
  1068.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1069.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  1070.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1071.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1072.     STDMETHOD(Acquire)(THIS) PURE;
  1073.     STDMETHOD(Unacquire)(THIS) PURE;
  1074.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1075.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1076.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1077.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1078.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1079.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  1080.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  1081.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1082.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1083.  
  1084.     /*** IDirectInputDevice2A methods ***/
  1085.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1086.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;
  1087.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;
  1088.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1089.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1090.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1091.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1092.     STDMETHOD(Poll)(THIS) PURE;
  1093.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1094. };
  1095.  
  1096. typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
  1097.  
  1098. #ifdef UNICODE
  1099. #define IID_IDirectInputDevice2 IID_IDirectInputDevice2W
  1100. #define IDirectInputDevice2 IDirectInputDevice2W
  1101. #define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl
  1102. #else
  1103. #define IID_IDirectInputDevice2 IID_IDirectInputDevice2A
  1104. #define IDirectInputDevice2 IDirectInputDevice2A
  1105. #define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl
  1106. #endif
  1107. typedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2;
  1108.  
  1109. #if !defined(__cplusplus) || defined(CINTERFACE)
  1110. #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1111. #define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)
  1112. #define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p)
  1113. #define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  1114. #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  1115. #define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  1116. #define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  1117. #define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p)
  1118. #define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  1119. #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  1120. #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1121. #define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  1122. #define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  1123. #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1124. #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1125. #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  1126. #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1127. #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  1128. #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1129. #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
  1130. #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
  1131. #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
  1132. #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1133. #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1134. #define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  1135. #define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p)
  1136. #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1137. #else
  1138. #define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1139. #define IDirectInputDevice2_AddRef(p) (p)->AddRef()
  1140. #define IDirectInputDevice2_Release(p) (p)->Release()
  1141. #define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a)
  1142. #define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  1143. #define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b)
  1144. #define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b)
  1145. #define IDirectInputDevice2_Acquire(p) (p)->Acquire()
  1146. #define IDirectInputDevice2_Unacquire(p) (p)->Unacquire()
  1147. #define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  1148. #define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  1149. #define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a)
  1150. #define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a)
  1151. #define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1152. #define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  1153. #define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  1154. #define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1155. #define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  1156. #define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
  1157. #define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
  1158. #define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
  1159. #define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
  1160. #define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
  1161. #define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1162. #define IDirectInputDevice2_Escape(p,a) (p)->Escape(a)
  1163. #define IDirectInputDevice2_Poll(p) (p)->Poll()
  1164. #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
  1165. #endif
  1166.  
  1167. #endif /* DIJ_RINGZERO */
  1168.  
  1169. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  1170.  
  1171. #if(DIRECTINPUT_VERSION >= 0x0700)
  1172. #define DIFEF_DEFAULT               0x00000000
  1173. #define DIFEF_INCLUDENONSTANDARD    0x00000001
  1174. #define DIFEF_MODIFYIFNEEDED        0x00000010
  1175.  
  1176. #ifndef DIJ_RINGZERO
  1177.  
  1178. #undef INTERFACE
  1179. #define INTERFACE IDirectInputDevice7W
  1180.  
  1181. DECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W)
  1182. {
  1183.     /*** IUnknown methods ***/
  1184.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1185.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1186.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1187.  
  1188.     /*** IDirectInputDevice2W methods ***/
  1189.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1190.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;
  1191.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1192.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1193.     STDMETHOD(Acquire)(THIS) PURE;
  1194.     STDMETHOD(Unacquire)(THIS) PURE;
  1195.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1196.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1197.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1198.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1199.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1200.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;
  1201.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;
  1202.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1203.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1204.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1205.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;
  1206.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;
  1207.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1208.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1209.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1210.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1211.     STDMETHOD(Poll)(THIS) PURE;
  1212.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1213.  
  1214.     /*** IDirectInputDevice7W methods ***/
  1215.     STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;
  1216.     STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;
  1217. };
  1218.  
  1219. typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
  1220.  
  1221. #undef INTERFACE
  1222. #define INTERFACE IDirectInputDevice7A
  1223.  
  1224. DECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A)
  1225. {
  1226.     /*** IUnknown methods ***/
  1227.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1228.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1229.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1230.  
  1231.     /*** IDirectInputDevice2A methods ***/
  1232.     STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;
  1233.     STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;
  1234.     STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;
  1235.     STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;
  1236.     STDMETHOD(Acquire)(THIS) PURE;
  1237.     STDMETHOD(Unacquire)(THIS) PURE;
  1238.     STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;
  1239.     STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1240.     STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;
  1241.     STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;
  1242.     STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;
  1243.     STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;
  1244.     STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;
  1245.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1246.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;
  1247.     STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;
  1248.     STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;
  1249.     STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;
  1250.     STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;
  1251.     STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;
  1252.     STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;
  1253.     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
  1254.     STDMETHOD(Poll)(THIS) PURE;
  1255.     STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;
  1256.  
  1257.     /*** IDirectInputDevice7A methods ***/
  1258.     STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;
  1259.     STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;
  1260. };
  1261.  
  1262. typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
  1263.  
  1264. #ifdef UNICODE
  1265. #define IID_IDirectInputDevice7 IID_IDirectInputDevice7W
  1266. #define IDirectInputDevice7 IDirectInputDevice7W
  1267. #define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl
  1268. #else
  1269. #define IID_IDirectInputDevice7 IID_IDirectInputDevice7A
  1270. #define IDirectInputDevice7 IDirectInputDevice7A
  1271. #define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl
  1272. #endif
  1273. typedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7;
  1274.  
  1275. #if !defined(__cplusplus) || defined(CINTERFACE)
  1276. #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1277. #define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)
  1278. #define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p)
  1279. #define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)
  1280. #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)
  1281. #define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)
  1282. #define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)
  1283. #define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p)
  1284. #define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p)
  1285. #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)
  1286. #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)
  1287. #define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)
  1288. #define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)
  1289. #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
  1290. #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)
  1291. #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)
  1292. #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1293. #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)
  1294. #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)
  1295. #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)
  1296. #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)
  1297. #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)
  1298. #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)
  1299. #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)
  1300. #define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a)
  1301. #define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p)
  1302. #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)
  1303. #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)
  1304. #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)
  1305. #else
  1306. #define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1307. #define IDirectInputDevice7_AddRef(p) (p)->AddRef()
  1308. #define IDirectInputDevice7_Release(p) (p)->Release()
  1309. #define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a)
  1310. #define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)
  1311. #define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b)
  1312. #define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b)
  1313. #define IDirectInputDevice7_Acquire(p) (p)->Acquire()
  1314. #define IDirectInputDevice7_Unacquire(p) (p)->Unacquire()
  1315. #define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)
  1316. #define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)
  1317. #define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a)
  1318. #define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a)
  1319. #define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
  1320. #define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)
  1321. #define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)
  1322. #define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1323. #define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c)
  1324. #define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)
  1325. #define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)
  1326. #define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)
  1327. #define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)
  1328. #define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)
  1329. #define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)
  1330. #define IDirectInputDevice7_Escape(p,a) (p)->Escape(a)
  1331. #define IDirectInputDevice7_Poll(p) (p)->Poll()
  1332. #define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)
  1333. #define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)
  1334. #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)
  1335. #endif
  1336.  
  1337. #endif /* DIJ_RINGZERO */
  1338.  
  1339. #endif /* DIRECTINPUT_VERSION >= 0x0700 */
  1340.  
  1341. /****************************************************************************
  1342.  *
  1343.  *      Mouse
  1344.  *
  1345.  ****************************************************************************/
  1346.  
  1347. #ifndef DIJ_RINGZERO
  1348.  
  1349. typedef struct _DIMOUSESTATE {
  1350.     LONG    lX;
  1351.     LONG    lY;
  1352.     LONG    lZ;
  1353.     BYTE    rgbButtons[4];
  1354. } DIMOUSESTATE, *LPDIMOUSESTATE;
  1355.  
  1356. #if DIRECTINPUT_VERSION >= 0x0700
  1357. typedef struct _DIMOUSESTATE2 {
  1358.     LONG    lX;
  1359.     LONG    lY;
  1360.     LONG    lZ;
  1361.     BYTE    rgbButtons[8];
  1362. } DIMOUSESTATE2, *LPDIMOUSESTATE2;
  1363. #endif
  1364.  
  1365.  
  1366. #define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)
  1367. #define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)
  1368. #define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)
  1369. #define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
  1370. #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
  1371. #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
  1372. #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
  1373. #if (DIRECTINPUT_VERSION >= 0x0700)
  1374. #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
  1375. #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
  1376. #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
  1377. #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
  1378. #endif
  1379. #endif /* DIJ_RINGZERO */
  1380.  
  1381. /****************************************************************************
  1382.  *
  1383.  *      Keyboard
  1384.  *
  1385.  ****************************************************************************/
  1386.  
  1387. #ifndef DIJ_RINGZERO
  1388.  
  1389. /****************************************************************************
  1390.  *
  1391.  *      DirectInput keyboard scan codes
  1392.  *
  1393.  ****************************************************************************/
  1394.  
  1395. #define DIK_ESCAPE          0x01
  1396. #define DIK_1               0x02
  1397. #define DIK_2               0x03
  1398. #define DIK_3               0x04
  1399. #define DIK_4               0x05
  1400. #define DIK_5               0x06
  1401. #define DIK_6               0x07
  1402. #define DIK_7               0x08
  1403. #define DIK_8               0x09
  1404. #define DIK_9               0x0A
  1405. #define DIK_0               0x0B
  1406. #define DIK_MINUS           0x0C    /* - on main keyboard */
  1407. #define DIK_EQUALS          0x0D
  1408. #define DIK_BACK            0x0E    /* backspace */
  1409. #define DIK_TAB             0x0F
  1410. #define DIK_Q               0x10
  1411. #define DIK_W               0x11
  1412. #define DIK_E               0x12
  1413. #define DIK_R               0x13
  1414. #define DIK_T               0x14
  1415. #define DIK_Y               0x15
  1416. #define DIK_U               0x16
  1417. #define DIK_I               0x17
  1418. #define DIK_O               0x18
  1419. #define DIK_P               0x19
  1420. #define DIK_LBRACKET        0x1A
  1421. #define DIK_RBRACKET        0x1B
  1422. #define DIK_RETURN          0x1C    /* Enter on main keyboard */
  1423. #define DIK_LCONTROL        0x1D
  1424. #define DIK_A               0x1E
  1425. #define DIK_S               0x1F
  1426. #define DIK_D               0x20
  1427. #define DIK_F               0x21
  1428. #define DIK_G               0x22
  1429. #define DIK_H               0x23
  1430. #define DIK_J               0x24
  1431. #define DIK_K               0x25
  1432. #define DIK_L               0x26
  1433. #define DIK_SEMICOLON       0x27
  1434. #define DIK_APOSTROPHE      0x28
  1435. #define DIK_GRAVE           0x29    /* accent grave */
  1436. #define DIK_LSHIFT          0x2A
  1437. #define DIK_BACKSLASH       0x2B
  1438. #define DIK_Z               0x2C
  1439. #define DIK_X               0x2D
  1440. #define DIK_C               0x2E
  1441. #define DIK_V               0x2F
  1442. #define DIK_B               0x30
  1443. #define DIK_N               0x31
  1444. #define DIK_M               0x32
  1445. #define DIK_COMMA           0x33
  1446. #define DIK_PERIOD          0x34    /* . on main keyboard */
  1447. #define DIK_SLASH           0x35    /* / on main keyboard */
  1448. #define DIK_RSHIFT          0x36
  1449. #define DIK_MULTIPLY        0x37    /* * on numeric keypad */
  1450. #define DIK_LMENU           0x38    /* left Alt */
  1451. #define DIK_SPACE           0x39
  1452. #define DIK_CAPITAL         0x3A
  1453. #define DIK_F1              0x3B
  1454. #define DIK_F2              0x3C
  1455. #define DIK_F3              0x3D
  1456. #define DIK_F4              0x3E
  1457. #define DIK_F5              0x3F
  1458. #define DIK_F6              0x40
  1459. #define DIK_F7              0x41
  1460. #define DIK_F8              0x42
  1461. #define DIK_F9              0x43
  1462. #define DIK_F10             0x44
  1463. #define DIK_NUMLOCK         0x45
  1464. #define DIK_SCROLL          0x46    /* Scroll Lock */
  1465. #define DIK_NUMPAD7         0x47
  1466. #define DIK_NUMPAD8         0x48
  1467. #define DIK_NUMPAD9         0x49
  1468. #define DIK_SUBTRACT        0x4A    /* - on numeric keypad */
  1469. #define DIK_NUMPAD4         0x4B
  1470. #define DIK_NUMPAD5         0x4C
  1471. #define DIK_NUMPAD6         0x4D
  1472. #define DIK_ADD             0x4E    /* + on numeric keypad */
  1473. #define DIK_NUMPAD1         0x4F
  1474. #define DIK_NUMPAD2         0x50
  1475. #define DIK_NUMPAD3         0x51
  1476. #define DIK_NUMPAD0         0x52
  1477. #define DIK_DECIMAL         0x53    /* . on numeric keypad */
  1478. #define DIK_OEM_102         0x56    /* < > | on UK/Germany keyboards */
  1479. #define DIK_F11             0x57
  1480. #define DIK_F12             0x58
  1481.  
  1482. #define DIK_F13             0x64    /*                     (NEC PC98) */
  1483. #define DIK_F14             0x65    /*                     (NEC PC98) */
  1484. #define DIK_F15             0x66    /*                     (NEC PC98) */
  1485.  
  1486. #define DIK_KANA            0x70    /* (Japanese keyboard)            */
  1487. #define DIK_ABNT_C1         0x73    /* / ? on Portugese (Brazilian) keyboards */
  1488. #define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
  1489. #define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
  1490. #define DIK_YEN             0x7D    /* (Japanese keyboard)            */
  1491. #define DIK_ABNT_C2         0x7E    /* Numpad . on Portugese (Brazilian) keyboards */
  1492. #define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
  1493. #define DIK_PREVTRACK       0x90    /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
  1494. #define DIK_AT              0x91    /*                     (NEC PC98) */
  1495. #define DIK_COLON           0x92    /*                     (NEC PC98) */
  1496. #define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */
  1497. #define DIK_KANJI           0x94    /* (Japanese keyboard)            */
  1498. #define DIK_STOP            0x95    /*                     (NEC PC98) */
  1499. #define DIK_AX              0x96    /*                     (Japan AX) */
  1500. #define DIK_UNLABELED       0x97    /*                        (J3100) */
  1501. #define DIK_NEXTTRACK       0x99    /* Next Track */
  1502. #define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
  1503. #define DIK_RCONTROL        0x9D
  1504. #define DIK_MUTE            0xA0    /* Mute */
  1505. #define DIK_CALCULATOR      0xA1    /* Calculator */
  1506. #define DIK_PLAYPAUSE       0xA2    /* Play / Pause */
  1507. #define DIK_MEDIASTOP       0xA4    /* Media Stop */
  1508. #define DIK_VOLUMEDOWN      0xAE    /* Volume - */
  1509. #define DIK_VOLUMEUP        0xB0    /* Volume + */
  1510. #define DIK_WEBHOME         0xB2    /* Web home */
  1511. #define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
  1512. #define DIK_DIVIDE          0xB5    /* / on numeric keypad */
  1513. #define DIK_SYSRQ           0xB7
  1514. #define DIK_RMENU           0xB8    /* right Alt */
  1515. #define DIK_PAUSE           0xC5    /* Pause */
  1516. #define DIK_HOME            0xC7    /* Home on arrow keypad */
  1517. #define DIK_UP              0xC8    /* UpArrow on arrow keypad */
  1518. #define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */
  1519. #define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */
  1520. #define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */
  1521. #define DIK_END             0xCF    /* End on arrow keypad */
  1522. #define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */
  1523. #define DIK_NEXT            0xD1    /* PgDn on arrow keypad */
  1524. #define DIK_INSERT          0xD2    /* Insert on arrow keypad */
  1525. #define DIK_DELETE          0xD3    /* Delete on arrow keypad */
  1526. #define DIK_LWIN            0xDB    /* Left Windows key */
  1527. #define DIK_RWIN            0xDC    /* Right Windows key */
  1528. #define DIK_APPS            0xDD    /* AppMenu key */
  1529. #define DIK_POWER           0xDE    /* System Power */
  1530. #define DIK_SLEEP           0xDF    /* System Sleep */
  1531. #define DIK_WAKE            0xE3    /* System Wake */
  1532. #define DIK_WEBSEARCH       0xE5    /* Web Search */
  1533. #define DIK_WEBFAVORITES    0xE6    /* Web Favorites */
  1534. #define DIK_WEBREFRESH      0xE7    /* Web Refresh */
  1535. #define DIK_WEBSTOP         0xE8    /* Web Stop */
  1536. #define DIK_WEBFORWARD      0xE9    /* Web Forward */
  1537. #define DIK_WEBBACK         0xEA    /* Web Back */
  1538. #define DIK_MYCOMPUTER      0xEB    /* My Computer */
  1539. #define DIK_MAIL            0xEC    /* Mail */
  1540. #define DIK_MEDIASELECT     0xED    /* Media Select */
  1541.  
  1542. /*
  1543.  *  Alternate names for keys, to facilitate transition from DOS.
  1544.  */
  1545. #define DIK_BACKSPACE       DIK_BACK            /* backspace */
  1546. #define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */
  1547. #define DIK_LALT            DIK_LMENU           /* left Alt */
  1548. #define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */
  1549. #define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */
  1550. #define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */
  1551. #define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */
  1552. #define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */
  1553. #define DIK_RALT            DIK_RMENU           /* right Alt */
  1554. #define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */
  1555. #define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */
  1556. #define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */
  1557. #define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */
  1558. #define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */
  1559. #define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */
  1560.  
  1561. /*
  1562.  *  Alternate names for keys originally not used on US keyboards.
  1563.  */
  1564. #define DIK_CIRCUMFLEX      DIK_PREVTRACK       /* Japanese keyboard */
  1565.  
  1566. #endif /* DIJ_RINGZERO */
  1567.  
  1568. /****************************************************************************
  1569.  *
  1570.  *      Joystick
  1571.  *
  1572.  ****************************************************************************/
  1573.  
  1574. #ifndef DIJ_RINGZERO
  1575.  
  1576. typedef struct DIJOYSTATE {
  1577.     LONG    lX;                     /* x-axis position              */
  1578.     LONG    lY;                     /* y-axis position              */
  1579.     LONG    lZ;                     /* z-axis position              */
  1580.     LONG    lRx;                    /* x-axis rotation              */
  1581.     LONG    lRy;                    /* y-axis rotation              */
  1582.     LONG    lRz;                    /* z-axis rotation              */
  1583.     LONG    rglSlider[2];           /* extra axes positions         */
  1584.     DWORD   rgdwPOV[4];             /* POV directions               */
  1585.     BYTE    rgbButtons[32];         /* 32 buttons                   */
  1586. } DIJOYSTATE, *LPDIJOYSTATE;
  1587.  
  1588. typedef struct DIJOYSTATE2 {
  1589.     LONG    lX;                     /* x-axis position              */
  1590.     LONG    lY;                     /* y-axis position              */
  1591.     LONG    lZ;                     /* z-axis position              */
  1592.     LONG    lRx;                    /* x-axis rotation              */
  1593.     LONG    lRy;                    /* y-axis rotation              */
  1594.     LONG    lRz;                    /* z-axis rotation              */
  1595.     LONG    rglSlider[2];           /* extra axes positions         */
  1596.     DWORD   rgdwPOV[4];             /* POV directions               */
  1597.     BYTE    rgbButtons[128];        /* 128 buttons                  */
  1598.     LONG    lVX;                    /* x-axis velocity              */
  1599.     LONG    lVY;                    /* y-axis velocity              */
  1600.     LONG    lVZ;                    /* z-axis velocity              */
  1601.     LONG    lVRx;                   /* x-axis angular velocity      */
  1602.     LONG    lVRy;                   /* y-axis angular velocity      */
  1603.     LONG    lVRz;                   /* z-axis angular velocity      */
  1604.     LONG    rglVSlider[2];          /* extra axes velocities        */
  1605.     LONG    lAX;                    /* x-axis acceleration          */
  1606.     LONG    lAY;                    /* y-axis acceleration          */
  1607.     LONG    lAZ;                    /* z-axis acceleration          */
  1608.     LONG    lARx;                   /* x-axis angular acceleration  */
  1609.     LONG    lARy;                   /* y-axis angular acceleration  */
  1610.     LONG    lARz;                   /* z-axis angular acceleration  */
  1611.     LONG    rglASlider[2];          /* extra axes accelerations     */
  1612.     LONG    lFX;                    /* x-axis force                 */
  1613.     LONG    lFY;                    /* y-axis force                 */
  1614.     LONG    lFZ;                    /* z-axis force                 */
  1615.     LONG    lFRx;                   /* x-axis torque                */
  1616.     LONG    lFRy;                   /* y-axis torque                */
  1617.     LONG    lFRz;                   /* z-axis torque                */
  1618.     LONG    rglFSlider[2];          /* extra axes forces            */
  1619. } DIJOYSTATE2, *LPDIJOYSTATE2;
  1620.  
  1621. #define DIJOFS_X            FIELD_OFFSET(DIJOYSTATE, lX)
  1622. #define DIJOFS_Y            FIELD_OFFSET(DIJOYSTATE, lY)
  1623. #define DIJOFS_Z            FIELD_OFFSET(DIJOYSTATE, lZ)
  1624. #define DIJOFS_RX           FIELD_OFFSET(DIJOYSTATE, lRx)
  1625. #define DIJOFS_RY           FIELD_OFFSET(DIJOYSTATE, lRy)
  1626. #define DIJOFS_RZ           FIELD_OFFSET(DIJOYSTATE, lRz)
  1627. #define DIJOFS_SLIDER(n)   (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
  1628.                                                         (n) * sizeof(LONG))
  1629. #define DIJOFS_POV(n)      (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
  1630.                                                         (n) * sizeof(DWORD))
  1631. #define DIJOFS_BUTTON(n)   (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
  1632. #define DIJOFS_BUTTON0      DIJOFS_BUTTON(0)
  1633. #define DIJOFS_BUTTON1      DIJOFS_BUTTON(1)
  1634. #define DIJOFS_BUTTON2      DIJOFS_BUTTON(2)
  1635. #define DIJOFS_BUTTON3      DIJOFS_BUTTON(3)
  1636. #define DIJOFS_BUTTON4      DIJOFS_BUTTON(4)
  1637. #define DIJOFS_BUTTON5      DIJOFS_BUTTON(5)
  1638. #define DIJOFS_BUTTON6      DIJOFS_BUTTON(6)
  1639. #define DIJOFS_BUTTON7      DIJOFS_BUTTON(7)
  1640. #define DIJOFS_BUTTON8      DIJOFS_BUTTON(8)
  1641. #define DIJOFS_BUTTON9      DIJOFS_BUTTON(9)
  1642. #define DIJOFS_BUTTON10     DIJOFS_BUTTON(10)
  1643. #define DIJOFS_BUTTON11     DIJOFS_BUTTON(11)
  1644. #define DIJOFS_BUTTON12     DIJOFS_BUTTON(12)
  1645. #define DIJOFS_BUTTON13     DIJOFS_BUTTON(13)
  1646. #define DIJOFS_BUTTON14     DIJOFS_BUTTON(14)
  1647. #define DIJOFS_BUTTON15     DIJOFS_BUTTON(15)
  1648. #define DIJOFS_BUTTON16     DIJOFS_BUTTON(16)
  1649. #define DIJOFS_BUTTON17     DIJOFS_BUTTON(17)
  1650. #define DIJOFS_BUTTON18     DIJOFS_BUTTON(18)
  1651. #define DIJOFS_BUTTON19     DIJOFS_BUTTON(19)
  1652. #define DIJOFS_BUTTON20     DIJOFS_BUTTON(20)
  1653. #define DIJOFS_BUTTON21     DIJOFS_BUTTON(21)
  1654. #define DIJOFS_BUTTON22     DIJOFS_BUTTON(22)
  1655. #define DIJOFS_BUTTON23     DIJOFS_BUTTON(23)
  1656. #define DIJOFS_BUTTON24     DIJOFS_BUTTON(24)
  1657. #define DIJOFS_BUTTON25     DIJOFS_BUTTON(25)
  1658. #define DIJOFS_BUTTON26     DIJOFS_BUTTON(26)
  1659. #define DIJOFS_BUTTON27     DIJOFS_BUTTON(27)
  1660. #define DIJOFS_BUTTON28     DIJOFS_BUTTON(28)
  1661. #define DIJOFS_BUTTON29     DIJOFS_BUTTON(29)
  1662. #define DIJOFS_BUTTON30     DIJOFS_BUTTON(30)
  1663. #define DIJOFS_BUTTON31     DIJOFS_BUTTON(31)
  1664.  
  1665.  
  1666. #endif /* DIJ_RINGZERO */
  1667.  
  1668. /****************************************************************************
  1669.  *
  1670.  *  IDirectInput
  1671.  *
  1672.  ****************************************************************************/
  1673.  
  1674. #ifndef DIJ_RINGZERO
  1675.  
  1676. #define DIENUM_STOP             0
  1677. #define DIENUM_CONTINUE         1
  1678.  
  1679. typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID);
  1680. typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID);
  1681. #ifdef UNICODE
  1682. #define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKW
  1683. #else
  1684. #define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKA
  1685. #endif // !UNICODE
  1686.  
  1687. #define DIEDFL_ALLDEVICES       0x00000000
  1688. #define DIEDFL_ATTACHEDONLY     0x00000001
  1689. #if(DIRECTINPUT_VERSION >= 0x0500)
  1690. #define DIEDFL_FORCEFEEDBACK    0x00000100
  1691. #endif /* DIRECTINPUT_VERSION >= 0x0500 */
  1692. #if(DIRECTINPUT_VERSION >= 0x050a)
  1693. #define DIEDFL_INCLUDEALIASES   0x00010000
  1694. #define DIEDFL_INCLUDEPHANTOMS  0x00020000
  1695. #endif /* DIRECTINPUT_VERSION >= 0x050a */
  1696.  
  1697. #undef INTERFACE
  1698. #define INTERFACE IDirectInputW
  1699.  
  1700. DECLARE_INTERFACE_(IDirectInputW, IUnknown)
  1701. {
  1702.     /*** IUnknown methods ***/
  1703.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1704.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1705.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1706.  
  1707.     /*** IDirectInputW methods ***/
  1708.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1709.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1710.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1711.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1712.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1713. };
  1714.  
  1715. typedef struct IDirectInputW *LPDIRECTINPUTW;
  1716.  
  1717. #undef INTERFACE
  1718. #define INTERFACE IDirectInputA
  1719.  
  1720. DECLARE_INTERFACE_(IDirectInputA, IUnknown)
  1721. {
  1722.     /*** IUnknown methods ***/
  1723.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1724.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1725.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1726.  
  1727.     /*** IDirectInputA methods ***/
  1728.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1729.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1730.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1731.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1732.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1733. };
  1734.  
  1735. typedef struct IDirectInputA *LPDIRECTINPUTA;
  1736.  
  1737. #ifdef UNICODE
  1738. #define IID_IDirectInput IID_IDirectInputW
  1739. #define IDirectInput IDirectInputW
  1740. #define IDirectInputVtbl IDirectInputWVtbl
  1741. #else
  1742. #define IID_IDirectInput IID_IDirectInputA
  1743. #define IDirectInput IDirectInputA
  1744. #define IDirectInputVtbl IDirectInputAVtbl
  1745. #endif
  1746. typedef struct IDirectInput *LPDIRECTINPUT;
  1747.  
  1748. #if !defined(__cplusplus) || defined(CINTERFACE)
  1749. #define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1750. #define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p)
  1751. #define IDirectInput_Release(p) (p)->lpVtbl->Release(p)
  1752. #define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1753. #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1754. #define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1755. #define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1756. #define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1757. #else
  1758. #define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1759. #define IDirectInput_AddRef(p) (p)->AddRef()
  1760. #define IDirectInput_Release(p) (p)->Release()
  1761. #define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1762. #define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1763. #define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1764. #define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1765. #define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b)
  1766. #endif
  1767.  
  1768. #undef INTERFACE
  1769. #define INTERFACE IDirectInput2W
  1770.  
  1771. DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW)
  1772. {
  1773.     /*** IUnknown methods ***/
  1774.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1775.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1776.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1777.  
  1778.     /*** IDirectInputW methods ***/
  1779.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1780.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1781.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1782.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1783.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1784.  
  1785.     /*** IDirectInput2W methods ***/
  1786.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;
  1787. };
  1788.  
  1789. typedef struct IDirectInput2W *LPDIRECTINPUT2W;
  1790.  
  1791. #undef INTERFACE
  1792. #define INTERFACE IDirectInput2A
  1793.  
  1794. DECLARE_INTERFACE_(IDirectInput2A, IDirectInputA)
  1795. {
  1796.     /*** IUnknown methods ***/
  1797.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1798.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1799.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1800.  
  1801.     /*** IDirectInputA methods ***/
  1802.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1803.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1804.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1805.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1806.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1807.  
  1808.     /*** IDirectInput2A methods ***/
  1809.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;
  1810. };
  1811.  
  1812. typedef struct IDirectInput2A *LPDIRECTINPUT2A;
  1813.  
  1814. #ifdef UNICODE
  1815. #define IID_IDirectInput2 IID_IDirectInput2W
  1816. #define IDirectInput2 IDirectInput2W
  1817. #define IDirectInput2Vtbl IDirectInput2WVtbl
  1818. #else
  1819. #define IID_IDirectInput2 IID_IDirectInput2A
  1820. #define IDirectInput2 IDirectInput2A
  1821. #define IDirectInput2Vtbl IDirectInput2AVtbl
  1822. #endif
  1823. typedef struct IDirectInput2 *LPDIRECTINPUT2;
  1824.  
  1825. #if !defined(__cplusplus) || defined(CINTERFACE)
  1826. #define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1827. #define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p)
  1828. #define IDirectInput2_Release(p) (p)->lpVtbl->Release(p)
  1829. #define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1830. #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1831. #define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1832. #define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1833. #define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1834. #define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
  1835. #else
  1836. #define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1837. #define IDirectInput2_AddRef(p) (p)->AddRef()
  1838. #define IDirectInput2_Release(p) (p)->Release()
  1839. #define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1840. #define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1841. #define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1842. #define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1843. #define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b)
  1844. #define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
  1845. #endif
  1846.  
  1847.  
  1848. #undef INTERFACE
  1849. #define INTERFACE IDirectInput7W
  1850.  
  1851. DECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W)
  1852. {
  1853.     /*** IUnknown methods ***/
  1854.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1855.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1856.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1857.  
  1858.     /*** IDirectInput2W methods ***/
  1859.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;
  1860.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;
  1861.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1862.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1863.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1864.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;
  1865.  
  1866.     /*** IDirectInput7W methods ***/
  1867.     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;
  1868. };
  1869.  
  1870. typedef struct IDirectInput7W *LPDIRECTINPUT7W;
  1871.  
  1872. #undef INTERFACE
  1873. #define INTERFACE IDirectInput7A
  1874.  
  1875. DECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A)
  1876. {
  1877.     /*** IUnknown methods ***/
  1878.     STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
  1879.     STDMETHOD_(ULONG,AddRef)(THIS) PURE;
  1880.     STDMETHOD_(ULONG,Release)(THIS) PURE;
  1881.  
  1882.     /*** IDirectInput2A methods ***/
  1883.     STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;
  1884.     STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;
  1885.     STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;
  1886.     STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;
  1887.     STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;
  1888.     STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;
  1889.  
  1890.     /*** IDirectInput7A methods ***/
  1891.     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;
  1892. };
  1893.  
  1894. typedef struct IDirectInput7A *LPDIRECTINPUT7A;
  1895.  
  1896. #ifdef UNICODE
  1897. #define IID_IDirectInput7 IID_IDirectInput7W
  1898. #define IDirectInput7 IDirectInput7W
  1899. #define IDirectInput7Vtbl IDirectInput7WVtbl
  1900. #else
  1901. #define IID_IDirectInput7 IID_IDirectInput7A
  1902. #define IDirectInput7 IDirectInput7A
  1903. #define IDirectInput7Vtbl IDirectInput7AVtbl
  1904. #endif
  1905. typedef struct IDirectInput7 *LPDIRECTINPUT7;
  1906.  
  1907. #if !defined(__cplusplus) || defined(CINTERFACE)
  1908. #define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
  1909. #define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p)
  1910. #define IDirectInput7_Release(p) (p)->lpVtbl->Release(p)
  1911. #define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)
  1912. #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)
  1913. #define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)
  1914. #define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)
  1915. #define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
  1916. #define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)
  1917. #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)
  1918. #else
  1919. #define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
  1920. #define IDirectInput7_AddRef(p) (p)->AddRef()
  1921. #define IDirectInput7_Release(p) (p)->Release()
  1922. #define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)
  1923. #define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)
  1924. #define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)
  1925. #define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)
  1926. #define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b)
  1927. #define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)
  1928. #define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)
  1929. #endif
  1930.  
  1931. extern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter);
  1932. extern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter);
  1933. #ifdef UNICODE
  1934. #define DirectInputCreate  DirectInputCreateW
  1935. #else
  1936. #define DirectInputCreate  DirectInputCreateA
  1937. #endif // !UNICODE
  1938.  
  1939. extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);
  1940. #endif /* DIJ_RINGZERO */
  1941.  
  1942.  
  1943. /****************************************************************************
  1944.  *
  1945.  *  Return Codes
  1946.  *
  1947.  ****************************************************************************/
  1948.  
  1949. /*
  1950.  *  The operation completed successfully.
  1951.  */
  1952. #define DI_OK                           S_OK
  1953.  
  1954. /*
  1955.  *  The device exists but is not currently attached.
  1956.  */
  1957. #define DI_NOTATTACHED                  S_FALSE
  1958.  
  1959. /*
  1960.  *  The device buffer overflowed.  Some input was lost.
  1961.  */
  1962. #define DI_BUFFEROVERFLOW               S_FALSE
  1963.  
  1964. /*
  1965.  *  The change in device properties had no effect.
  1966.  */
  1967. #define DI_PROPNOEFFECT                 S_FALSE
  1968.  
  1969. /*
  1970.  *  The operation had no effect.
  1971.  */
  1972. #define DI_NOEFFECT                     S_FALSE
  1973.  
  1974. /*
  1975.  *  The device is a polled device.  As a result, device buffering
  1976.  *  will not collect any data and event notifications will not be
  1977.  *  signalled until GetDeviceState is called.
  1978.  */
  1979. #define DI_POLLEDDEVICE                 ((HRESULT)0x00000002L)
  1980.  
  1981. /*
  1982.  *  The parameters of the effect were successfully updated by
  1983.  *  IDirectInputEffect::SetParameters, but the effect was not
  1984.  *  downloaded because the device is not exclusively acquired
  1985.  *  or because the DIEP_NODOWNLOAD flag was passed.
  1986.  */
  1987. #define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003L)
  1988.  
  1989. /*
  1990.  *  The parameters of the effect were successfully updated by
  1991.  *  IDirectInputEffect::SetParameters, but in order to change
  1992.  *  the parameters, the effect needed to be restarted.
  1993.  */
  1994. #define DI_EFFECTRESTARTED              ((HRESULT)0x00000004L)
  1995.  
  1996. /*
  1997.  *  The parameters of the effect were successfully updated by
  1998.  *  IDirectInputEffect::SetParameters, but some of them were
  1999.  *  beyond the capabilities of the device and were truncated.
  2000.  */
  2001. #define DI_TRUNCATED                    ((HRESULT)0x00000008L)
  2002.  
  2003. /*
  2004.  *  Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.
  2005.  */
  2006. #define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000CL)
  2007.  
  2008. /*
  2009.  *  The application requires a newer version of DirectInput.
  2010.  */
  2011. #define DIERR_OLDDIRECTINPUTVERSION     \
  2012.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
  2013.  
  2014. /*
  2015.  *  The application was written for an unsupported prerelease version
  2016.  *  of DirectInput.
  2017.  */
  2018. #define DIERR_BETADIRECTINPUTVERSION    \
  2019.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)
  2020.  
  2021. /*
  2022.  *  The object could not be created due to an incompatible driver version
  2023.  *  or mismatched or incomplete driver components.
  2024.  */
  2025. #define DIERR_BADDRIVERVER              \
  2026.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)
  2027.  
  2028. /*
  2029.  * The device or device instance or effect is not registered with DirectInput.
  2030.  */
  2031. #define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG
  2032.  
  2033. /*
  2034.  * The requested object does not exist.
  2035.  */
  2036. #define DIERR_NOTFOUND                  \
  2037.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
  2038.  
  2039. /*
  2040.  * The requested object does not exist.
  2041.  */
  2042. #define DIERR_OBJECTNOTFOUND            \
  2043.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)
  2044.  
  2045. /*
  2046.  * An invalid parameter was passed to the returning function,
  2047.  * or the object was not in a state that admitted the function
  2048.  * to be called.
  2049.  */
  2050. #define DIERR_INVALIDPARAM              E_INVALIDARG
  2051.  
  2052. /*
  2053.  * The specified interface is not supported by the object
  2054.  */
  2055. #define DIERR_NOINTERFACE               E_NOINTERFACE
  2056.  
  2057. /*
  2058.  * An undetermined error occured inside the DInput subsystem
  2059.  */
  2060. #define DIERR_GENERIC                   E_FAIL
  2061.  
  2062. /*
  2063.  * The DInput subsystem couldn't allocate sufficient memory to complete the
  2064.  * caller's request.
  2065.  */
  2066. #define DIERR_OUTOFMEMORY               E_OUTOFMEMORY
  2067.  
  2068. /*
  2069.  * The function called is not supported at this time
  2070.  */
  2071. #define DIERR_UNSUPPORTED               E_NOTIMPL
  2072.  
  2073. /*
  2074.  * This object has not been initialized
  2075.  */
  2076. #define DIERR_NOTINITIALIZED            \
  2077.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)
  2078.  
  2079. /*
  2080.  * This object is already initialized
  2081.  */
  2082. #define DIERR_ALREADYINITIALIZED        \
  2083.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)
  2084.  
  2085. /*
  2086.  * This object does not support aggregation
  2087.  */
  2088. #define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION
  2089.  
  2090. /*
  2091.  * Another app has a higher priority level, preventing this call from
  2092.  * succeeding.
  2093.  */
  2094. #define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED
  2095.  
  2096. /*
  2097.  * Access to the device has been lost.  It must be re-acquired.
  2098.  */
  2099. #define DIERR_INPUTLOST                 \
  2100.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)
  2101.  
  2102. /*
  2103.  * The operation cannot be performed while the device is acquired.
  2104.  */
  2105. #define DIERR_ACQUIRED                  \
  2106.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)
  2107.  
  2108. /*
  2109.  * The operation cannot be performed unless the device is acquired.
  2110.  */
  2111. #define DIERR_NOTACQUIRED               \
  2112.     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)
  2113.  
  2114. /*
  2115.  * The specified property cannot be changed.
  2116.  */
  2117. #define DIERR_READONLY                  E_ACCESSDENIED
  2118.  
  2119. /*
  2120.  * The device already has an event notification associated with it.
  2121.  */
  2122. #define DIERR_HANDLEEXISTS              E_ACCESSDENIED
  2123.  
  2124. /*
  2125.  * Data is not yet available.
  2126.  */
  2127. #ifndef E_PENDING
  2128. #define E_PENDING                       0x8000000AL
  2129. #endif
  2130.  
  2131. /*
  2132.  * Unable to IDirectInputJoyConfig_Acquire because the user
  2133.  * does not have sufficient privileges to change the joystick
  2134.  * configuration.
  2135.  */
  2136. #define DIERR_INSUFFICIENTPRIVS         0x80040200L
  2137.  
  2138. /*
  2139.  * The device is full.
  2140.  */
  2141. #define DIERR_DEVICEFULL                0x80040201L
  2142.  
  2143. /*
  2144.  * Not all the requested information fit into the buffer.
  2145.  */
  2146. #define DIERR_MOREDATA                  0x80040202L
  2147.  
  2148. /*
  2149.  * The effect is not downloaded.
  2150.  */
  2151. #define DIERR_NOTDOWNLOADED             0x80040203L
  2152.  
  2153. /*
  2154.  *  The device cannot be reinitialized because there are still effects
  2155.  *  attached to it.
  2156.  */
  2157. #define DIERR_HASEFFECTS                0x80040204L
  2158.  
  2159. /*
  2160.  *  The operation cannot be performed unless the device is acquired
  2161.  *  in DISCL_EXCLUSIVE mode.
  2162.  */
  2163. #define DIERR_NOTEXCLUSIVEACQUIRED      0x80040205L
  2164.  
  2165. /*
  2166.  *  The effect could not be downloaded because essential information
  2167.  *  is missing.  For example, no axes have been associated with the
  2168.  *  effect, or no type-specific information has been created.
  2169.  */
  2170. #define DIERR_INCOMPLETEEFFECT          0x80040206L
  2171.  
  2172. /*
  2173.  *  Attempted to read buffered device data from a device that is
  2174.  *  not buffered.
  2175.  */
  2176. #define DIERR_NOTBUFFERED               0x80040207L
  2177.  
  2178. /*
  2179.  *  An attempt was made to modify parameters of an effect while it is
  2180.  *  playing.  Not all hardware devices support altering the parameters
  2181.  *  of an effect while it is playing.
  2182.  */
  2183. #define DIERR_EFFECTPLAYING             0x80040208L
  2184.  
  2185. /*
  2186.  *  The operation could not be completed because the device is not
  2187.  *  plugged in.
  2188.  */
  2189. #define DIERR_UNPLUGGED                 0x80040209L
  2190.  
  2191. /*
  2192.  *  SendDeviceData failed because more information was requested
  2193.  *  to be sent than can be sent to the device.  Some devices have
  2194.  *  restrictions on how much data can be sent to them.  (For example,
  2195.  *  there might be a limit on the number of buttons that can be
  2196.  *  pressed at once.)
  2197.  */
  2198. #define DIERR_REPORTFULL                0x8004020AL
  2199.  
  2200. #ifdef __cplusplus
  2201. };
  2202. #endif
  2203.  
  2204. #endif  /* __DINPUT_INCLUDED__ */
  2205.  
  2206. /****************************************************************************
  2207.  *
  2208.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  2209.  *  than the current sdk files
  2210.  *
  2211.  ****************************************************************************/
  2212.  
  2213. #ifdef _INC_MMSYSTEM
  2214. #ifndef MMNOJOY
  2215.  
  2216. #ifndef __VJOYDX_INCLUDED__
  2217. #define __VJOYDX_INCLUDED__
  2218.  
  2219. #ifdef __cplusplus
  2220. extern "C" {
  2221. #endif
  2222.  
  2223. /*
  2224.  * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure
  2225.  * contains mini-driver specific data to be passed by VJoyD to the mini-
  2226.  * driver instead of doing a poll.
  2227.  */
  2228. #define JOY_PASSDRIVERDATA          0x10000000l
  2229.  
  2230. /*
  2231.  * Informs the joystick driver that the configuration has been changed
  2232.  * and should be reloaded from the registery.
  2233.  * dwFlags is reserved and should be set to zero
  2234.  */
  2235. WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags );
  2236.  
  2237.  
  2238. /*
  2239.  * Hardware Setting indicating that the device is a headtracker
  2240.  */
  2241. #define JOY_HWS_ISHEADTRACKER       0x02000000l
  2242.  
  2243. /*
  2244.  * Hardware Setting indicating that the VxD is used to replace
  2245.  * the standard analog polling
  2246.  */
  2247. #define JOY_HWS_ISGAMEPORTDRIVER    0x04000000l
  2248.  
  2249. /*
  2250.  * Hardware Setting indicating that the driver needs a standard
  2251.  * gameport in order to communicate with the device.
  2252.  */
  2253. #define JOY_HWS_ISANALOGPORTDRIVER  0x08000000l
  2254.  
  2255. /*
  2256.  * Hardware Setting indicating that VJoyD should not load this
  2257.  * driver, it will be loaded externally and will register with
  2258.  * VJoyD of it's own accord.
  2259.  */
  2260. #define JOY_HWS_AUTOLOAD            0x10000000l
  2261.  
  2262. /*
  2263.  * Hardware Setting indicating that the driver acquires any
  2264.  * resources needed without needing a devnode through VJoyD.
  2265.  */
  2266. #define JOY_HWS_NODEVNODE           0x20000000l
  2267.  
  2268.  
  2269. /*
  2270.  * Hardware Setting indicating that the device is a gameport bus
  2271.  */
  2272. #define JOY_HWS_ISGAMEPORTBUS       0x80000000l
  2273. #define JOY_HWS_GAMEPORTBUSBUSY     0x00000001l
  2274.  
  2275. /*
  2276.  * Usage Setting indicating that the settings are volatile and
  2277.  * should be removed if still present on a reboot.
  2278.  */
  2279. #define JOY_US_VOLATILE             0x00000008L
  2280.  
  2281. #ifdef __cplusplus
  2282. };
  2283. #endif
  2284.  
  2285. #endif  /* __VJOYDX_INCLUDED__ */
  2286.  
  2287. #endif  /* not MMNOJOY */
  2288. #endif  /* _INC_MMSYSTEM */
  2289.  
  2290. /****************************************************************************
  2291.  *
  2292.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  2293.  *  than the current ddk files
  2294.  *
  2295.  ****************************************************************************/
  2296.  
  2297. #ifndef DIJ_RINGZERO
  2298.  
  2299. #ifdef _INC_MMDDK
  2300. #ifndef MMNOJOYDEV
  2301.  
  2302. #ifndef __VJOYDXD_INCLUDED__
  2303. #define __VJOYDXD_INCLUDED__
  2304. /*
  2305.  * Poll type in which the do_other field of the JOYOEMPOLLDATA
  2306.  * structure contains mini-driver specific data passed from an app.
  2307.  */
  2308. #define JOY_OEMPOLL_PASSDRIVERDATA  7
  2309.  
  2310. #endif  /* __VJOYDXD_INCLUDED__ */
  2311.  
  2312. #endif  /* not MMNOJOYDEV */
  2313. #endif  /* _INC_MMDDK */
  2314.  
  2315. #endif /* DIJ_RINGZERO */
  2316. #pragma option pop /*P_O_Pop*/
  2317.