From de208bf1f541acb899d0ae5e6de9310b4196556b Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <nathbap...@gmail.com>
Date: Fri, 19 Mar 2021 15:26:23 +0530
Subject: [PATCH 1/2] headers: Revert import of dinput.h in previous commit.

Signed-off-by: Biswapriyo Nath <nathbap...@gmail.com>
---
 mingw-w64-headers/include/dinput.h | 882 +++++++++++++++++------------
 mingw-w64-headers/wine-import.sh   |   1 -
 2 files changed, 516 insertions(+), 367 deletions(-)

diff --git a/mingw-w64-headers/include/dinput.h 
b/mingw-w64-headers/include/dinput.h
index a8e58b7..57d06a8 100644
--- a/mingw-w64-headers/include/dinput.h
+++ b/mingw-w64-headers/include/dinput.h
@@ -1,5 +1,3 @@
-#include <_mingw_unicode.h>
-#undef INTERFACE
 /*
  * Copyright (C) the Wine project
  *
@@ -23,7 +21,9 @@
 
 #define COM_NO_WINDOWS_H
 #include <objbase.h>
+#include <_mingw_dxhelper.h>
 
+#define DIRECTINPUT_HEADER_VERSION     0x0800
 #ifndef DIRECTINPUT_VERSION
 #define DIRECTINPUT_VERSION    0x0800
 #endif
@@ -96,49 +96,75 @@ typedef struct IDirectInput2A *LPDIRECTINPUT2A;
 typedef struct IDirectInput2W *LPDIRECTINPUT2W;
 typedef struct IDirectInput7A *LPDIRECTINPUT7A;
 typedef struct IDirectInput7W *LPDIRECTINPUT7W;
+#if DIRECTINPUT_VERSION >= 0x0800
 typedef struct IDirectInput8A *LPDIRECTINPUT8A;
 typedef struct IDirectInput8W *LPDIRECTINPUT8W;
+#endif /* DI8 */
 typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;
 typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;
+#if DIRECTINPUT_VERSION >= 0x0500
 typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;
 typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;
+#endif /* DI5 */
+#if DIRECTINPUT_VERSION >= 0x0700
 typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;
 typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;
+#endif /* DI7 */
+#if DIRECTINPUT_VERSION >= 0x0800
 typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;
 typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;
+#endif /* DI8 */
+#if DIRECTINPUT_VERSION >= 0x0500
 typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;
+#endif /* DI5 */
 typedef struct SysKeyboardA *LPSYSKEYBOARDA;
 typedef struct SysMouseA *LPSYSMOUSEA;
 
-#define IID_IDirectInput __MINGW_NAME_AW(IID_IDirectInput)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUT)
-#define IID_IDirectInput2 __MINGW_NAME_AW(IID_IDirectInput2)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUT2)
-#define IID_IDirectInput7 __MINGW_NAME_AW(IID_IDirectInput7)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUT7)
-#define IID_IDirectInput8 __MINGW_NAME_AW(IID_IDirectInput8)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUT8)
-#define IID_IDirectInputDevice __MINGW_NAME_AW(IID_IDirectInputDevice)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUTDEVICE)
-#define IID_IDirectInputDevice2 __MINGW_NAME_AW(IID_IDirectInputDevice2)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUTDEVICE2)
-#define IID_IDirectInputDevice7 __MINGW_NAME_AW(IID_IDirectInputDevice7)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUTDEVICE7)
-#define IID_IDirectInputDevice8 __MINGW_NAME_AW(IID_IDirectInputDevice8)
-__MINGW_TYPEDEF_AW(LPDIRECTINPUTDEVICE8)
+#define IID_IDirectInput WINELIB_NAME_AW(IID_IDirectInput)
+#define IDirectInput WINELIB_NAME_AW(IDirectInput)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT)
+#define IID_IDirectInput2 WINELIB_NAME_AW(IID_IDirectInput2)
+#define IDirectInput2 WINELIB_NAME_AW(IDirectInput2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT2)
+#define IID_IDirectInput7 WINELIB_NAME_AW(IID_IDirectInput7)
+#define IDirectInput7 WINELIB_NAME_AW(IDirectInput7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT7)
+#if DIRECTINPUT_VERSION >= 0x0800
+#define IID_IDirectInput8 WINELIB_NAME_AW(IID_IDirectInput8)
+#define IDirectInput8 WINELIB_NAME_AW(IDirectInput8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUT8)
+#endif /* DI8 */
+#define IID_IDirectInputDevice WINELIB_NAME_AW(IID_IDirectInputDevice)
+#define IDirectInputDevice WINELIB_NAME_AW(IDirectInputDevice)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE)
+#if DIRECTINPUT_VERSION >= 0x0500
+#define IID_IDirectInputDevice2 WINELIB_NAME_AW(IID_IDirectInputDevice2)
+#define IDirectInputDevice2 WINELIB_NAME_AW(IDirectInputDevice2)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE2)
+#endif /* DI5 */
+#if DIRECTINPUT_VERSION >= 0x0700
+#define IID_IDirectInputDevice7 WINELIB_NAME_AW(IID_IDirectInputDevice7)
+#define IDirectInputDevice7 WINELIB_NAME_AW(IDirectInputDevice7)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE7)
+#endif /* DI7 */
+#if DIRECTINPUT_VERSION >= 0x0800
+#define IID_IDirectInputDevice8 WINELIB_NAME_AW(IID_IDirectInputDevice8)
+#define IDirectInputDevice8 WINELIB_NAME_AW(IDirectInputDevice8)
+DECL_WINELIB_TYPE_AW(LPDIRECTINPUTDEVICE8)
+#endif /* DI8 */
 
 #define DI_OK                           S_OK
 #define DI_NOTATTACHED                  S_FALSE
 #define DI_BUFFEROVERFLOW               S_FALSE
 #define DI_PROPNOEFFECT                 S_FALSE
 #define DI_NOEFFECT                     S_FALSE
-#define DI_POLLEDDEVICE                 ((HRESULT)0x00000002)
-#define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003)
-#define DI_EFFECTRESTARTED              ((HRESULT)0x00000004)
-#define DI_TRUNCATED                    ((HRESULT)0x00000008)
-#define DI_SETTINGSNOTSAVED             ((HRESULT)0x0000000B)
-#define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000C)
-#define DI_WRITEPROTECT                 ((HRESULT)0x00000013)
+#define DI_POLLEDDEVICE                 ((HRESULT)0x00000002L)
+#define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003L)
+#define DI_EFFECTRESTARTED              ((HRESULT)0x00000004L)
+#define DI_TRUNCATED                    ((HRESULT)0x00000008L)
+#define DI_SETTINGSNOTSAVED             ((HRESULT)0x0000000BL)
+#define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000CL)
+#define DI_WRITEPROTECT                 ((HRESULT)0x00000013L)
 
 #define DIERR_OLDDIRECTINPUTVERSION     \
     MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)
@@ -171,20 +197,20 @@ __MINGW_TYPEDEF_AW(LPDIRECTINPUTDEVICE8)
 #define DIERR_READONLY                  E_ACCESSDENIED
 #define DIERR_HANDLEEXISTS              E_ACCESSDENIED
 #ifndef E_PENDING
-#define E_PENDING                       __MSABI_LONG(0x8000000A)
+#define E_PENDING                       0x8000000AL
 #endif
-#define DIERR_INSUFFICIENTPRIVS         __MSABI_LONG(0x80040200)
-#define DIERR_DEVICEFULL                __MSABI_LONG(0x80040201)
-#define DIERR_MOREDATA                  __MSABI_LONG(0x80040202)
-#define DIERR_NOTDOWNLOADED             __MSABI_LONG(0x80040203)
-#define DIERR_HASEFFECTS                __MSABI_LONG(0x80040204)
-#define DIERR_NOTEXCLUSIVEACQUIRED      __MSABI_LONG(0x80040205)
-#define DIERR_INCOMPLETEEFFECT          __MSABI_LONG(0x80040206)
-#define DIERR_NOTBUFFERED               __MSABI_LONG(0x80040207)
-#define DIERR_EFFECTPLAYING             __MSABI_LONG(0x80040208)
-#define DIERR_UNPLUGGED                 __MSABI_LONG(0x80040209)
-#define DIERR_REPORTFULL                __MSABI_LONG(0x8004020A)
-#define DIERR_MAPFILEFAIL               __MSABI_LONG(0x8004020B)
+#define DIERR_INSUFFICIENTPRIVS         0x80040200L
+#define DIERR_DEVICEFULL                0x80040201L
+#define DIERR_MOREDATA                  0x80040202L
+#define DIERR_NOTDOWNLOADED             0x80040203L
+#define DIERR_HASEFFECTS                0x80040204L
+#define DIERR_NOTEXCLUSIVEACQUIRED      0x80040205L
+#define DIERR_INCOMPLETEEFFECT          0x80040206L
+#define DIERR_NOTBUFFERED               0x80040207L
+#define DIERR_EFFECTPLAYING             0x80040208L
+#define DIERR_UNPLUGGED                 0x80040209L
+#define DIERR_REPORTFULL                0x8004020AL
+#define DIERR_MAPFILEFAIL               0x8004020BL
 
 #define DIENUM_STOP                     0
 #define DIENUM_CONTINUE                 1
@@ -341,9 +367,9 @@ typedef struct DIDEVICEOBJECTINSTANCE_DX3W {
 } DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;
 typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;
 
-__MINGW_TYPEDEF_AW(DIDEVICEOBJECTINSTANCE_DX3)
-__MINGW_TYPEDEF_AW(LPDIDEVICEOBJECTINSTANCE_DX3)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE_DX3)
 
 typedef struct DIDEVICEOBJECTINSTANCEA {
     DWORD      dwSize;
@@ -352,6 +378,7 @@ typedef struct DIDEVICEOBJECTINSTANCEA {
     DWORD      dwType;
     DWORD      dwFlags;
     CHAR       tszName[MAX_PATH];
+#if(DIRECTINPUT_VERSION >= 0x0500)
     DWORD      dwFFMaxForce;
     DWORD      dwFFForceResolution;
     WORD       wCollectionNumber;
@@ -361,6 +388,7 @@ typedef struct DIDEVICEOBJECTINSTANCEA {
     DWORD      dwDimension;
     WORD       wExponent;
     WORD       wReserved;
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 } DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;
 typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;
 
@@ -371,6 +399,7 @@ typedef struct DIDEVICEOBJECTINSTANCEW {
     DWORD      dwType;
     DWORD      dwFlags;
     WCHAR      tszName[MAX_PATH];
+#if(DIRECTINPUT_VERSION >= 0x0500)
     DWORD      dwFFMaxForce;
     DWORD      dwFFForceResolution;
     WORD       wCollectionNumber;
@@ -380,12 +409,13 @@ typedef struct DIDEVICEOBJECTINSTANCEW {
     DWORD      dwDimension;
     WORD       wExponent;
     WORD       wReserved;
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 } DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;
 typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;
 
-__MINGW_TYPEDEF_AW(DIDEVICEOBJECTINSTANCE)
-__MINGW_TYPEDEF_AW(LPDIDEVICEOBJECTINSTANCE)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(DIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEOBJECTINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEOBJECTINSTANCE)
 
 typedef struct DIDEVICEINSTANCE_DX3A {
     DWORD   dwSize;
@@ -406,9 +436,9 @@ typedef struct DIDEVICEINSTANCE_DX3W {
 } DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;
 typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;
 
-__MINGW_TYPEDEF_AW(DIDEVICEINSTANCE_DX3)
-__MINGW_TYPEDEF_AW(LPDIDEVICEINSTANCE_DX3)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE_DX3)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE_DX3)
 
 typedef struct DIDEVICEINSTANCEA {
     DWORD      dwSize;
@@ -417,9 +447,11 @@ typedef struct DIDEVICEINSTANCEA {
     DWORD      dwDevType;
     CHAR       tszInstanceName[MAX_PATH];
     CHAR       tszProductName[MAX_PATH];
+#if(DIRECTINPUT_VERSION >= 0x0500)
     GUID       guidFFDriver;
     WORD       wUsagePage;
     WORD       wUsage;
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 } DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;
 typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;
 
@@ -430,19 +462,21 @@ typedef struct DIDEVICEINSTANCEW {
     DWORD      dwDevType;
     WCHAR      tszInstanceName[MAX_PATH];
     WCHAR      tszProductName[MAX_PATH];
+#if(DIRECTINPUT_VERSION >= 0x0500)
     GUID       guidFFDriver;
     WORD       wUsagePage;
     WORD       wUsage;
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 } DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;
 typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;
 
-__MINGW_TYPEDEF_AW(DIDEVICEINSTANCE)
-__MINGW_TYPEDEF_AW(LPDIDEVICEINSTANCE)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(DIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEINSTANCE)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEINSTANCE)
 
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA,LPVOID);
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW,LPVOID);
-__MINGW_TYPEDEF_AW(LPDIENUMDEVICESCALLBACK)
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESCALLBACK)
 
 #define DIEDBS_MAPPEDPRI1              0x00000001
 #define DIEDBS_MAPPEDPRI2              0x00000002
@@ -457,17 +491,21 @@ __MINGW_TYPEDEF_AW(LPDIENUMDEVICESCALLBACK)
 #define DIEDBSFL_NONGAMINGDEVICES      0x00004000
 #define DIEDBSFL_VALID                 0x00007110
 
+#if DIRECTINPUT_VERSION >= 0x0800
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA,LPDIRECTINPUTDEVICE8A,DWORD,DWORD,LPVOID);
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW,LPDIRECTINPUTDEVICE8W,DWORD,DWORD,LPVOID);
-__MINGW_TYPEDEF_AW(LPDIENUMDEVICESBYSEMANTICSCB)
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICESBYSEMANTICSCB)
+#endif
 
 typedef WINBOOL (CALLBACK *LPDICONFIGUREDEVICESCALLBACK)(LPUNKNOWN,LPVOID);
 
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA,LPVOID);
 typedef WINBOOL (CALLBACK 
*LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW,LPVOID);
-__MINGW_TYPEDEF_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
+DECL_WINELIB_TYPE_AW(LPDIENUMDEVICEOBJECTSCALLBACK)
 
+#if DIRECTINPUT_VERSION >= 0x0500
 typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);
+#endif
 
 #define DIK_ESCAPE          0x01
 #define DIK_1               0x02
@@ -552,15 +590,18 @@ typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEF
 #define DIK_NUMPAD3         0x51
 #define DIK_NUMPAD0         0x52
 #define DIK_DECIMAL         0x53    /* . on numeric keypad */
+#define DIK_OEM_102         0x56    /* < > | on UK/Germany keyboards */
 #define DIK_F11             0x57
 #define DIK_F12             0x58
 #define DIK_F13             0x64    /*                     (NEC PC98) */
 #define DIK_F14             0x65    /*                     (NEC PC98) */
 #define DIK_F15             0x66    /*                     (NEC PC98) */
 #define DIK_KANA            0x70    /* (Japanese keyboard)            */
+#define DIK_ABNT_C1         0x73    /* / ? on Portugese (Brazilian) keyboards 
*/
 #define DIK_CONVERT         0x79    /* (Japanese keyboard)            */
 #define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */
 #define DIK_YEN             0x7D    /* (Japanese keyboard)            */
+#define DIK_ABNT_C2         0x7E    /* Numpad . on Portugese (Brazilian) 
keyboards */
 #define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */
 #define DIK_CIRCUMFLEX      0x90    /* (Japanese keyboard)            */
 #define DIK_AT              0x91    /*                     (NEC PC98) */
@@ -570,8 +611,16 @@ typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEF
 #define DIK_STOP            0x95    /*                     (NEC PC98) */
 #define DIK_AX              0x96    /*                     (Japan AX) */
 #define DIK_UNLABELED       0x97    /*                        (J3100) */
+#define DIK_NEXTTRACK       0x99    /* Next Track */
 #define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */
 #define DIK_RCONTROL        0x9D
+#define DIK_MUTE           0xA0    /* Mute */
+#define DIK_CALCULATOR      0xA1    /* Calculator */
+#define DIK_PLAYPAUSE       0xA2    /* Play / Pause */
+#define DIK_MEDIASTOP       0xA4    /* Media Stop */
+#define DIK_VOLUMEDOWN      0xAE    /* Volume - */
+#define DIK_VOLUMEUP        0xB0    /* Volume + */
+#define DIK_WEBHOME         0xB2    /* Web home */
 #define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */
 #define DIK_DIVIDE          0xB5    /* / on numeric keypad */
 #define DIK_SYSRQ           0xB7
@@ -592,6 +641,17 @@ typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEF
 #define DIK_APPS            0xDD    /* AppMenu key */
 #define DIK_POWER           0xDE
 #define DIK_SLEEP           0xDF
+#define DIK_WAKE            0xE3    /* System Wake */
+#define DIK_WEBSEARCH       0xE5    /* Web Search */
+#define DIK_WEBFAVORITES    0xE6    /* Web Favorites */
+#define DIK_WEBREFRESH      0xE7    /* Web Refresh */
+#define DIK_WEBSTOP         0xE8    /* Web Stop */
+#define DIK_WEBFORWARD      0xE9    /* Web Forward */
+#define DIK_WEBBACK         0xEA    /* Web Back */
+#define DIK_MYCOMPUTER      0xEB    /* My Computer */
+#define DIK_MAIL            0xEC    /* Mail */
+#define DIK_MEDIASELECT     0xED    /* Media Select */
+
 #define DIK_BACKSPACE       DIK_BACK            /* backspace */
 #define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */
 #define DIK_LALT            DIK_LMENU           /* left Alt */
@@ -608,147 +668,6 @@ typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEF
 #define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */
 #define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */
 
-/* New DirectInput8 style keyboard constants */
-
-#define DIKEYBOARD_ESCAPE               (DIK_ESCAPE | 0x81000400)
-#define DIKEYBOARD_1                    (DIK_1 | 0x81000400)
-#define DIKEYBOARD_2                    (DIK_2 | 0x81000400)
-#define DIKEYBOARD_3                    (DIK_3 | 0x81000400)
-#define DIKEYBOARD_4                    (DIK_4 | 0x81000400)
-#define DIKEYBOARD_5                    (DIK_5 | 0x81000400)
-#define DIKEYBOARD_6                    (DIK_6 | 0x81000400)
-#define DIKEYBOARD_7                    (DIK_7 | 0x81000400)
-#define DIKEYBOARD_8                    (DIK_8 | 0x81000400)
-#define DIKEYBOARD_9                    (DIK_9 | 0x81000400)
-#define DIKEYBOARD_0                    (DIK_0 | 0x81000400)
-#define DIKEYBOARD_MINUS                (DIK_MINUS | 0x81000400)
-#define DIKEYBOARD_EQUALS               (DIK_EQUALS | 0x81000400)
-#define DIKEYBOARD_BACK                 (DIK_BACK | 0x81000400)
-#define DIKEYBOARD_TAB                  (DIK_TAB | 0x81000400)
-#define DIKEYBOARD_Q                    (DIK_Q | 0x81000400)
-#define DIKEYBOARD_W                    (DIK_W | 0x81000400)
-#define DIKEYBOARD_E                    (DIK_E | 0x81000400)
-#define DIKEYBOARD_R                    (DIK_R | 0x81000400)
-#define DIKEYBOARD_T                    (DIK_T | 0x81000400)
-#define DIKEYBOARD_Y                    (DIK_Y | 0x81000400)
-#define DIKEYBOARD_U                    (DIK_U | 0x81000400)
-#define DIKEYBOARD_I                    (DIK_I | 0x81000400)
-#define DIKEYBOARD_O                    (DIK_O | 0x81000400)
-#define DIKEYBOARD_P                    (DIK_P | 0x81000400)
-#define DIKEYBOARD_LBRACKET             (DIK_LBRACKET | 0x81000400)
-#define DIKEYBOARD_RBRACKET             (DIK_RBRACKET | 0x81000400)
-#define DIKEYBOARD_RETURN               (DIK_RETURN | 0x81000400)
-#define DIKEYBOARD_LCONTROL             (DIK_LCONTROL | 0x81000400)
-#define DIKEYBOARD_A                    (DIK_A | 0x81000400)
-#define DIKEYBOARD_S                    (DIK_S | 0x81000400)
-#define DIKEYBOARD_D                    (DIK_D | 0x81000400)
-#define DIKEYBOARD_F                    (DIK_F | 0x81000400)
-#define DIKEYBOARD_G                    (DIK_G | 0x81000400)
-#define DIKEYBOARD_H                    (DIK_H | 0x81000400)
-#define DIKEYBOARD_J                    (DIK_J | 0x81000400)
-#define DIKEYBOARD_K                    (DIK_K | 0x81000400)
-#define DIKEYBOARD_L                    (DIK_L | 0x81000400)
-#define DIKEYBOARD_SEMICOLON            (DIK_SEMICOLON | 0x81000400)
-#define DIKEYBOARD_APOSTROPHE           (DIK_APOSTROPHE | 0x81000400)
-#define DIKEYBOARD_GRAVE                (DIK_GRAVE | 0x81000400)
-#define DIKEYBOARD_LSHIFT               (DIK_LSHIFT | 0x81000400)
-#define DIKEYBOARD_BACKSLASH            (DIK_BACKSLASH | 0x81000400)
-#define DIKEYBOARD_Z                    (DIK_Z | 0x81000400)
-#define DIKEYBOARD_X                    (DIK_X | 0x81000400)
-#define DIKEYBOARD_C                    (DIK_C | 0x81000400)
-#define DIKEYBOARD_V                    (DIK_V | 0x81000400)
-#define DIKEYBOARD_B                    (DIK_B | 0x81000400)
-#define DIKEYBOARD_N                    (DIK_N | 0x81000400)
-#define DIKEYBOARD_M                    (DIK_M | 0x81000400)
-#define DIKEYBOARD_COMMA                (DIK_COMMA | 0x81000400)
-#define DIKEYBOARD_PERIOD               (DIK_PERIOD | 0x81000400)
-#define DIKEYBOARD_SLASH                (DIK_SLASH | 0x81000400)
-#define DIKEYBOARD_RSHIFT               (DIK_RSHIFT | 0x81000400)
-#define DIKEYBOARD_MULTIPLY             (DIK_MULTIPLY | 0x81000400)
-#define DIKEYBOARD_LMENU                (DIK_LMENU | 0x81000400)
-#define DIKEYBOARD_SPACE                (DIK_SPACE | 0x81000400)
-#define DIKEYBOARD_CAPITAL              (DIK_CAPITAL | 0x81000400)
-#define DIKEYBOARD_F1                   (DIK_F1 | 0x81000400)
-#define DIKEYBOARD_F2                   (DIK_F2 | 0x81000400)
-#define DIKEYBOARD_F3                   (DIK_F3 | 0x81000400)
-#define DIKEYBOARD_F4                   (DIK_F4 | 0x81000400)
-#define DIKEYBOARD_F5                   (DIK_F5 | 0x81000400)
-#define DIKEYBOARD_F6                   (DIK_F6 | 0x81000400)
-#define DIKEYBOARD_F7                   (DIK_F7 | 0x81000400)
-#define DIKEYBOARD_F8                   (DIK_F8 | 0x81000400)
-#define DIKEYBOARD_F9                   (DIK_F9 | 0x81000400)
-#define DIKEYBOARD_F10                  (DIK_F10 | 0x81000400)
-#define DIKEYBOARD_NUMLOCK              (DIK_NUMLOCK | 0x81000400)
-#define DIKEYBOARD_SCROLL               (DIK_SCROLL | 0x81000400)
-#define DIKEYBOARD_NUMPAD7              (DIK_NUMPAD7 | 0x81000400)
-#define DIKEYBOARD_NUMPAD8              (DIK_NUMPAD8 | 0x81000400)
-#define DIKEYBOARD_NUMPAD9              (DIK_NUMPAD9 | 0x81000400)
-#define DIKEYBOARD_SUBTRACT             (DIK_SUBTRACT | 0x81000400)
-#define DIKEYBOARD_NUMPAD4              (DIK_NUMPAD4 | 0x81000400)
-#define DIKEYBOARD_NUMPAD5              (DIK_NUMPAD5 | 0x81000400)
-#define DIKEYBOARD_NUMPAD6              (DIK_NUMPAD6 | 0x81000400)
-#define DIKEYBOARD_ADD                  (DIK_ADD | 0x81000400)
-#define DIKEYBOARD_NUMPAD1              (DIK_NUMPAD1 | 0x81000400)
-#define DIKEYBOARD_NUMPAD2              (DIK_NUMPAD2 | 0x81000400)
-#define DIKEYBOARD_NUMPAD3              (DIK_NUMPAD3 | 0x81000400)
-#define DIKEYBOARD_NUMPAD0              (DIK_NUMPAD0 | 0x81000400)
-#define DIKEYBOARD_DECIMAL              (DIK_DECIMAL | 0x81000400)
-#define DIKEYBOARD_F11                  (DIK_F11 | 0x81000400)
-#define DIKEYBOARD_F12                  (DIK_F12 | 0x81000400)
-#define DIKEYBOARD_F13                  (DIK_F13 | 0x81000400)
-#define DIKEYBOARD_F14                  (DIK_F14 | 0x81000400)
-#define DIKEYBOARD_F15                  (DIK_F15 | 0x81000400)
-#define DIKEYBOARD_KANA                 (DIK_KANA | 0x81000400)
-#define DIKEYBOARD_CONVERT              (DIK_CONVERT | 0x81000400)
-#define DIKEYBOARD_NOCONVERT            (DIK_NOCONVERT | 0x81000400)
-#define DIKEYBOARD_YEN                  (DIK_YEN | 0x81000400)
-#define DIKEYBOARD_NUMPADEQUALS         (DIK_NUMPADEQUALS | 0x81000400)
-#define DIKEYBOARD_CIRCUMFLEX           (DIK_CIRCUMFLEX | 0x81000400)
-#define DIKEYBOARD_AT                   (DIK_AT | 0x81000400)
-#define DIKEYBOARD_COLON                (DIK_COLON | 0x81000400)
-#define DIKEYBOARD_UNDERLINE            (DIK_UNDERLINE | 0x81000400)
-#define DIKEYBOARD_KANJI                (DIK_KANJI | 0x81000400)
-#define DIKEYBOARD_STOP                 (DIK_STOP | 0x81000400)
-#define DIKEYBOARD_AX                   (DIK_AX | 0x81000400)
-#define DIKEYBOARD_UNLABELED            (DIK_UNLABELED | 0x81000400)
-#define DIKEYBOARD_NUMPADENTER          (DIK_NUMPADENTER | 0x81000400)
-#define DIKEYBOARD_RCONTROL             (DIK_RCONTROL | 0x81000400)
-#define DIKEYBOARD_NUMPADCOMMA          (DIK_NUMPADCOMMA | 0x81000400)
-#define DIKEYBOARD_DIVIDE               (DIK_DIVIDE | 0x81000400)
-#define DIKEYBOARD_SYSRQ                (DIK_SYSRQ | 0x81000400)
-#define DIKEYBOARD_RMENU                (DIK_RMENU | 0x81000400)
-#define DIKEYBOARD_PAUSE                (DIK_PAUSE | 0x81000400)
-#define DIKEYBOARD_HOME                 (DIK_HOME | 0x81000400)
-#define DIKEYBOARD_UP                   (DIK_UP | 0x81000400)
-#define DIKEYBOARD_PRIOR                (DIK_PRIOR | 0x81000400)
-#define DIKEYBOARD_LEFT                 (DIK_LEFT | 0x81000400)
-#define DIKEYBOARD_RIGHT                (DIK_RIGHT | 0x81000400)
-#define DIKEYBOARD_END                  (DIK_END | 0x81000400)
-#define DIKEYBOARD_DOWN                 (DIK_DOWN | 0x81000400)
-#define DIKEYBOARD_NEXT                 (DIK_NEXT | 0x81000400)
-#define DIKEYBOARD_INSERT               (DIK_INSERT | 0x81000400)
-#define DIKEYBOARD_DELETE               (DIK_DELETE | 0x81000400)
-#define DIKEYBOARD_LWIN                 (DIK_LWIN | 0x81000400)
-#define DIKEYBOARD_RWIN                 (DIK_RWIN | 0x81000400)
-#define DIKEYBOARD_APPS                 (DIK_APPS | 0x81000400)
-#define DIKEYBOARD_POWER                (DIK_POWER | 0x81000400)
-#define DIKEYBOARD_SLEEP                (DIK_SLEEP | 0x81000400)
-#define DIKEYBOARD_BACKSPACE            (DIK_BACKSPACE | 0x81000400)
-#define DIKEYBOARD_NUMPADSTAR           (DIK_NUMPADSTAR | 0x81000400)
-#define DIKEYBOARD_LALT                 (DIK_LALT | 0x81000400)
-#define DIKEYBOARD_CAPSLOCK             (DIK_CAPSLOCK | 0x81000400)
-#define DIKEYBOARD_NUMPADMINUS          (DIK_NUMPADMINUS | 0x81000400)
-#define DIKEYBOARD_NUMPADPLUS           (DIK_NUMPADPLUS | 0x81000400)
-#define DIKEYBOARD_NUMPADPERIOD         (DIK_NUMPADPERIOD | 0x81000400)
-#define DIKEYBOARD_NUMPADSLASH          (DIK_NUMPADSLASH | 0x81000400)
-#define DIKEYBOARD_RALT                 (DIK_RALT | 0x81000400)
-#define DIKEYBOARD_UPARROW              (DIK_UPARROW | 0x81000400)
-#define DIKEYBOARD_PGUP                 (DIK_PGUP | 0x81000400)
-#define DIKEYBOARD_LEFTARROW            (DIK_LEFTARROW | 0x81000400)
-#define DIKEYBOARD_RIGHTARROW           (DIK_RIGHTARROW | 0x81000400)
-#define DIKEYBOARD_DOWNARROW            (DIK_DOWNARROW | 0x81000400)
-#define DIKEYBOARD_PGDN                 (DIK_PGDN | 0x81000400)
-
 #define DIDFT_ALL              0x00000000
 #define DIDFT_RELAXIS          0x00000001
 #define DIDFT_ABSAXIS          0x00000002
@@ -766,14 +685,17 @@ typedef WINBOOL (CALLBACK 
*LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEF
 #define DIDFT_GETINSTANCE(n)   LOWORD((n) >> 8)
 #define DIDFT_FFACTUATOR       0x01000000
 #define DIDFT_FFEFFECTTRIGGER  0x02000000
+#if DIRECTINPUT_VERSION >= 0x050a
 #define DIDFT_OUTPUT           0x10000000
 #define DIDFT_VENDORDEFINED    0x04000000
 #define DIDFT_ALIAS            0x08000000
+#endif /* DI5a */
 #ifndef DIDFT_OPTIONAL
 #define DIDFT_OPTIONAL         0x80000000
 #endif
 #define DIDFT_ENUMCOLLECTION(n)        ((WORD)(n) << 8)
 #define DIDFT_NOCOLLECTION     0x00FFFF00
+
 #define DIDF_ABSAXIS           0x00000001
 #define DIDF_RELAXIS           0x00000002
 
@@ -794,7 +716,9 @@ typedef struct DIDEVICEOBJECTDATA {
     DWORD      dwData;
     DWORD      dwTimeStamp;
     DWORD      dwSequence;
+#if(DIRECTINPUT_VERSION >= 0x0800)
     UINT_PTR   uAppData;
+#endif /* DIRECTINPUT_VERSION >= 0x0800 */
 } DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
 typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;
 
@@ -816,6 +740,7 @@ typedef struct _DIDATAFORMAT {
 } DIDATAFORMAT, *LPDIDATAFORMAT;
 typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
 
+#if DIRECTINPUT_VERSION >= 0x0500
 #define DIDOI_FFACTUATOR       0x00000001
 #define DIDOI_FFEFFECTTRIGGER  0x00000002
 #define DIDOI_POLLED           0x00008000
@@ -824,7 +749,10 @@ typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
 #define DIDOI_ASPECTACCEL      0x00000300
 #define DIDOI_ASPECTFORCE      0x00000400
 #define DIDOI_ASPECTMASK       0x00000F00
+#endif /* DI5 */
+#if DIRECTINPUT_VERSION >= 0x050a
 #define DIDOI_GUIDISUSAGE      0x00010000
+#endif /* DI5a */
 
 typedef struct DIPROPHEADER {
     DWORD      dwSize;
@@ -837,9 +765,11 @@ typedef const DIPROPHEADER *LPCDIPROPHEADER;
 #define DIPH_DEVICE    0
 #define DIPH_BYOFFSET  1
 #define DIPH_BYID      2
+#if DIRECTINPUT_VERSION >= 0x050a
 #define DIPH_BYUSAGE   3
 
 #define DIMAKEUSAGEDWORD(UsagePage, Usage) (DWORD)MAKELONG(Usage, UsagePage)
+#endif /* DI5a */
 
 typedef struct DIPROPDWORD {
        DIPROPHEADER    diph;
@@ -857,6 +787,7 @@ typedef const DIPROPRANGE *LPCDIPROPRANGE;
 #define DIPROPRANGE_NOMIN      ((LONG)0x80000000)
 #define DIPROPRANGE_NOMAX      ((LONG)0x7FFFFFFF)
 
+#if DIRECTINPUT_VERSION >= 0x050a
 typedef struct DIPROPCAL {
        DIPROPHEADER diph;
        LONG    lMin;
@@ -865,6 +796,13 @@ typedef struct DIPROPCAL {
 } DIPROPCAL, *LPDIPROPCAL;
 typedef const DIPROPCAL *LPCDIPROPCAL;
 
+typedef struct DIPROPCALPOV {
+       DIPROPHEADER    diph;
+       LONG            lMin[5];
+       LONG            lMax[5];
+} DIPROPCALPOV, *LPDIPROPCALPOV;
+typedef const DIPROPCALPOV *LPCDIPROPCALPOV;
+
 typedef struct DIPROPGUIDANDPATH {
        DIPROPHEADER diph;
        GUID    guidClass;
@@ -877,12 +815,15 @@ typedef struct DIPROPSTRING {
         WCHAR        wsz[MAX_PATH];
 } DIPROPSTRING, *LPDIPROPSTRING;
 typedef const DIPROPSTRING *LPCDIPROPSTRING;
+#endif /* DI5a */
 
+#if DIRECTINPUT_VERSION >= 0x0800
 typedef struct DIPROPPOINTER {
-        DIPROPHEADER diph;
-        UINT_PTR uData;
+       DIPROPHEADER diph;
+       UINT_PTR     uData;
 } DIPROPPOINTER, *LPDIPROPPOINTER;
 typedef const DIPROPPOINTER *LPCDIPROPPOINTER;
+#endif /* DI8 */
 
 /* special property GUIDs */
 #ifdef __cplusplus
@@ -912,20 +853,47 @@ typedef const DIPROPPOINTER *LPCDIPROPPOINTER;
 #define DIPROPCALIBRATIONMODE_COOKED   0
 #define DIPROPCALIBRATIONMODE_RAW      1
 
+#if DIRECTINPUT_VERSION >= 0x050a
 #define DIPROP_CALIBRATION     MAKEDIPROP(11)
 #define DIPROP_GUIDANDPATH     MAKEDIPROP(12)
+#define DIPROP_INSTANCENAME    MAKEDIPROP(13)
+#define DIPROP_PRODUCTNAME     MAKEDIPROP(14)
+#endif
+
+#if DIRECTINPUT_VERSION >= 0x5B2
+#define DIPROP_JOYSTICKID      MAKEDIPROP(15)
+#define DIPROP_GETPORTDISPLAYNAME      MAKEDIPROP(16)
+#endif
+
+#if DIRECTINPUT_VERSION >= 0x0700
+#define DIPROP_PHYSICALRANGE   MAKEDIPROP(18)
+#define DIPROP_LOGICALRANGE    MAKEDIPROP(19)
+#endif
+
+#if(DIRECTINPUT_VERSION >= 0x0800)
+#define DIPROP_KEYNAME         MAKEDIPROP(20)
+#define DIPROP_CPOINTS         MAKEDIPROP(21)
+#define DIPROP_APPDATA         MAKEDIPROP(22)
+#define DIPROP_SCANCODE                MAKEDIPROP(23)
+#define DIPROP_VIDPID          MAKEDIPROP(24)
+#define DIPROP_USERNAME                MAKEDIPROP(25)
+#define DIPROP_TYPENAME                MAKEDIPROP(26)
 
-#define DIPROP_INSTANCENAME     MAKEDIPROP(13)
-#define DIPROP_PRODUCTNAME      MAKEDIPROP(14)
-#define DIPROP_JOYSTICKID       MAKEDIPROP(15)
+#define MAXCPOINTSNUM          8
+
+typedef struct _CPOINT {
+    LONG       lP;
+    DWORD      dwLog;
+} CPOINT, *PCPOINT;
+
+typedef struct DIPROPCPOINTS {
+    DIPROPHEADER diph;
+    DWORD      dwCPointsNum;
+    CPOINT     cp[MAXCPOINTSNUM];
+} DIPROPCPOINTS, *LPDIPROPCPOINTS;
+typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS;
+#endif /* DI8 */
 
-#define DIPROP_KEYNAME     MAKEDIPROP(20)
-#define DIPROP_CPOINTS     MAKEDIPROP(21)
-#define DIPROP_APPDATA     MAKEDIPROP(22)
-#define DIPROP_SCANCODE    MAKEDIPROP(23)
-#define DIPROP_VIDPID      MAKEDIPROP(24)
-#define DIPROP_USERNAME    MAKEDIPROP(25)
-#define DIPROP_TYPENAME    MAKEDIPROP(26)
 
 typedef struct DIDEVCAPS_DX3 {
     DWORD      dwSize;
@@ -943,11 +911,13 @@ typedef struct DIDEVCAPS {
     DWORD      dwAxes;
     DWORD      dwButtons;
     DWORD      dwPOVs;
+#if(DIRECTINPUT_VERSION >= 0x0500)
     DWORD      dwFFSamplePeriod;
     DWORD      dwFFMinTimeResolution;
     DWORD      dwFirmwareRevision;
     DWORD      dwHardwareRevision;
     DWORD      dwFFDriverVersion;
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 } DIDEVCAPS,*LPDIDEVCAPS;
 
 #define DIDC_ATTACHED          0x00000001
@@ -974,6 +944,7 @@ typedef struct DIDEVCAPS {
 #define DISCL_BACKGROUND       0x00000008
 #define DISCL_NOWINKEY          0x00000010
 
+#if (DIRECTINPUT_VERSION >= 0x0500)
 /* Device FF flags */
 #define DISFFC_RESET            0x00000001
 #define DISFFC_STOPALL          0x00000002
@@ -981,7 +952,7 @@ typedef struct DIDEVCAPS {
 #define DISFFC_CONTINUE         0x00000008
 #define DISFFC_SETACTUATORSON   0x00000010
 #define DISFFC_SETACTUATORSOFF  0x00000020
-  
+
 #define DIGFFS_EMPTY            0x00000001
 #define DIGFFS_STOPPED          0x00000002
 #define DIGFFS_PAUSED           0x00000004
@@ -997,7 +968,7 @@ typedef struct DIDEVCAPS {
 
 /* Effect flags */
 #define DIEFT_ALL              0x00000000
-                                                                               
 
+
 #define DIEFT_CONSTANTFORCE    0x00000001
 #define DIEFT_RAMPFORCE                0x00000002
 #define DIEFT_PERIODIC         0x00000003
@@ -1012,7 +983,7 @@ typedef struct DIDEVCAPS {
 #define DIEFT_DEADBAND         0x00004000
 #define DIEFT_STARTDELAY       0x00008000
 #define DIEFT_GETTYPE(n)       LOBYTE(n)
-                                                                               
 
+
 #define DIEFF_OBJECTIDS         0x00000001
 #define DIEFF_OBJECTOFFSETS     0x00000002
 #define DIEFF_CARTESIAN         0x00000010
@@ -1028,9 +999,13 @@ typedef struct DIDEVCAPS {
 #define DIEP_DIRECTION          0x00000040
 #define DIEP_ENVELOPE           0x00000080
 #define DIEP_TYPESPECIFICPARAMS 0x00000100
+#if(DIRECTINPUT_VERSION >= 0x0600)
 #define DIEP_STARTDELAY         0x00000200
 #define DIEP_ALLPARAMS_DX5      0x000001FF
 #define DIEP_ALLPARAMS          0x000003FF
+#else
+#define DIEP_ALLPARAMS          0x000001FF
+#endif /* DIRECTINPUT_VERSION >= 0x0600 */
 #define DIEP_START              0x20000000
 #define DIEP_NORESTART          0x40000000
 #define DIEP_NODOWNLOAD         0x80000000
@@ -1123,7 +1098,9 @@ typedef struct DIEFFECT {
        LPDIENVELOPE            lpEnvelope;
        DWORD                   cbTypeSpecificParams;
        LPVOID                  lpvTypeSpecificParams;
+#if(DIRECTINPUT_VERSION >= 0x0600)
        DWORD                   dwStartDelay;
+#endif /* DIRECTINPUT_VERSION >= 0x0600 */
 } DIEFFECT, *LPDIEFFECT;
 typedef const DIEFFECT *LPCDIEFFECT;
 typedef DIEFFECT DIEFFECT_DX6;
@@ -1149,9 +1126,9 @@ typedef struct DIEFFECTINFOW {
 } DIEFFECTINFOW, *LPDIEFFECTINFOW;
 typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;
 
-__MINGW_TYPEDEF_AW(DIEFFECTINFO)
-__MINGW_TYPEDEF_AW(LPDIEFFECTINFO)
-__MINGW_TYPEDEF_AW(LPCDIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(DIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPDIEFFECTINFO)
+DECL_WINELIB_TYPE_AW(LPCDIEFFECTINFO)
 
 typedef WINBOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);
 typedef WINBOOL (CALLBACK *LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);
@@ -1253,8 +1230,10 @@ typedef struct DIJOYSTATE2 {
 #define DIJOFS_BUTTON29                DIJOFS_BUTTON(29)
 #define DIJOFS_BUTTON30                DIJOFS_BUTTON(30)
 #define DIJOFS_BUTTON31                DIJOFS_BUTTON(31)
+#endif /* DIRECTINPUT_VERSION >= 0x0500 */
 
 /* DInput 7 structures, types */
+#if(DIRECTINPUT_VERSION >= 0x0700)
 typedef struct DIFILEEFFECT {
   DWORD       dwSize;
   GUID        GuidEffect;
@@ -1264,13 +1243,15 @@ typedef struct DIFILEEFFECT {
 
 typedef const DIFILEEFFECT *LPCDIFILEEFFECT;
 typedef WINBOOL (CALLBACK *LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , 
LPVOID);
+#endif /* DIRECTINPUT_VERSION >= 0x0700 */
 
 /* DInput 8 structures and types */
+#if DIRECTINPUT_VERSION >= 0x0800
 typedef struct _DIACTIONA {
        UINT_PTR        uAppData;
        DWORD           dwSemantic;
        DWORD           dwFlags;
-       union {
+       __GNU_EXTENSION union {
                LPCSTR  lptszActionName;
                UINT    uResIdString;
        } DUMMYUNIONNAME;
@@ -1284,7 +1265,7 @@ typedef struct _DIACTIONW {
        UINT_PTR        uAppData;
        DWORD           dwSemantic;
        DWORD           dwFlags;
-       union {
+       __GNU_EXTENSION union {
                LPCWSTR lptszActionName;
                UINT    uResIdString;
        } DUMMYUNIONNAME;
@@ -1294,9 +1275,9 @@ typedef struct _DIACTIONW {
 } DIACTIONW, *LPDIACTIONW;
 typedef const DIACTIONW *LPCDIACTIONW;
 
-__MINGW_TYPEDEF_AW(DIACTION)
-__MINGW_TYPEDEF_AW(LPDIACTION)
-__MINGW_TYPEDEF_AW(LPCDIACTION)
+DECL_WINELIB_TYPE_AW(DIACTION)
+DECL_WINELIB_TYPE_AW(LPDIACTION)
+DECL_WINELIB_TYPE_AW(LPCDIACTION)
 
 #define DIA_FORCEFEEDBACK      0x00000001
 #define DIA_APPMAPPED          0x00000002
@@ -1348,9 +1329,9 @@ typedef struct _DIACTIONFORMATW {
 } DIACTIONFORMATW, *LPDIACTIONFORMATW;
 typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;
 
-__MINGW_TYPEDEF_AW(DIACTIONFORMAT)
-__MINGW_TYPEDEF_AW(LPDIACTIONFORMAT)
-__MINGW_TYPEDEF_AW(LPCDIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(DIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPDIACTIONFORMAT)
+DECL_WINELIB_TYPE_AW(LPCDIACTIONFORMAT)
 
 #define DIAFTS_NEWDEVICELOW    0xFFFFFFFF
 #define DIAFTS_NEWDEVICEHIGH   0xFFFFFFFF
@@ -1411,9 +1392,9 @@ typedef struct _DICONFIGUREDEVICESPARAMSW {
 } DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;
 typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;
 
-__MINGW_TYPEDEF_AW(DICONFIGUREDEVICESPARAMS)
-__MINGW_TYPEDEF_AW(LPDICONFIGUREDEVICESPARAMS)
-__MINGW_TYPEDEF_AW(LPCDICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(DICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPDICONFIGUREDEVICESPARAMS)
+DECL_WINELIB_TYPE_AW(LPCDICONFIGUREDEVICESPARAMS)
 
 #define DIDIFT_CONFIGURATION   0x00000001
 #define DIDIFT_OVERLAY         0x00000002
@@ -1451,9 +1432,9 @@ typedef struct _DIDEVICEIMAGEINFOW {
 } DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;
 typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;
 
-__MINGW_TYPEDEF_AW(DIDEVICEIMAGEINFO)
-__MINGW_TYPEDEF_AW(LPDIDEVICEIMAGEINFO)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFO)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFO)
 
 typedef struct _DIDEVICEIMAGEINFOHEADERA {
        DWORD   dwSize;
@@ -1481,14 +1462,18 @@ typedef struct _DIDEVICEIMAGEINFOHEADERW {
 } DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;
 typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;
 
-__MINGW_TYPEDEF_AW(DIDEVICEIMAGEINFOHEADER)
-__MINGW_TYPEDEF_AW(LPDIDEVICEIMAGEINFOHEADER)
-__MINGW_TYPEDEF_AW(LPCDIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(DIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPDIDEVICEIMAGEINFOHEADER)
+DECL_WINELIB_TYPE_AW(LPCDIDEVICEIMAGEINFOHEADER)
+
+#endif /* DI8 */
 
 
 /*****************************************************************************
  * IDirectInputEffect interface
  */
+#if (DIRECTINPUT_VERSION >= 0x0500)
+#undef INTERFACE
 #define INTERFACE IDirectInputEffect
 DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
 {
@@ -1508,7 +1493,6 @@ DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
     STDMETHOD(Unload)(THIS) PURE;
     STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -1544,10 +1528,13 @@ DECLARE_INTERFACE_(IDirectInputEffect,IUnknown)
 #define IDirectInputEffect_Escape(p,a)            (p)->Escape(a)
 #endif
 
+#endif /* DI5 */
+
 
 /*****************************************************************************
  * IDirectInputDeviceA interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDeviceA
 DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)
 {
@@ -1572,11 +1559,11 @@ DECLARE_INTERFACE_(IDirectInputDeviceA,IUnknown)
     STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
     STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID 
rguid) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInputDeviceW interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDeviceW
 DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
 {
@@ -1601,7 +1588,6 @@ DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
     STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
     STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion, REFGUID 
rguid) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -1648,9 +1634,11 @@ DECLARE_INTERFACE_(IDirectInputDeviceW,IUnknown)
 #endif
 
 
+#if (DIRECTINPUT_VERSION >= 0x0500)
 /*****************************************************************************
  * IDirectInputDevice2A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice2A
 DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)
 {
@@ -1685,11 +1673,11 @@ 
DECLARE_INTERFACE_(IDirectInputDevice2A,IDirectInputDeviceA)
     STDMETHOD(Poll)(THIS) PURE;
     STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA 
rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInputDevice2W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice2W
 DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
 {
@@ -1724,7 +1712,6 @@ 
DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
     STDMETHOD(Poll)(THIS) PURE;
     STDMETHOD(SendDeviceData)(THIS_ DWORD cbObjectData, LPCDIDEVICEOBJECTDATA 
rgdod, LPDWORD pdwInOut, DWORD fl) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -1789,10 +1776,13 @@ 
DECLARE_INTERFACE_(IDirectInputDevice2W,IDirectInputDeviceW)
 #define IDirectInputDevice2_Poll(p)                           (p)->Poll()
 #define IDirectInputDevice2_SendDeviceData(p,a,b,c,d)         
(p)->SendDeviceData(a,b,c,d)
 #endif
+#endif /* DI5 */
 
+#if DIRECTINPUT_VERSION >= 0x0700
 /*****************************************************************************
  * IDirectInputDevice7A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice7A
 DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)
 {
@@ -1830,11 +1820,11 @@ 
DECLARE_INTERFACE_(IDirectInputDevice7A,IDirectInputDevice2A)
     STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR 
lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
     STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR lpszFileName,DWORD 
dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInputDevice7W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice7W
 DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
 {
@@ -1872,7 +1862,6 @@ 
DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
     STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR 
lpszFileName,LPDIENUMEFFECTSINFILECALLBACK pec,LPVOID pvRef,DWORD dwFlags) PURE;
     STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR lpszFileName,DWORD 
dwEntries,LPDIFILEEFFECT rgDiFileEft,DWORD dwFlags) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -1944,10 +1933,13 @@ 
DECLARE_INTERFACE_(IDirectInputDevice7W,IDirectInputDevice2W)
 #define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) 
(p)->WriteEffectToFile(a,b,c,d)
 #endif
 
+#endif /* DI7 */
 
+#if DIRECTINPUT_VERSION >= 0x0800
 /*****************************************************************************
  * IDirectInputDevice8A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice8A
 DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)
 {
@@ -1989,11 +1981,11 @@ 
DECLARE_INTERFACE_(IDirectInputDevice8A,IDirectInputDevice7A)
     STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA lpdiaf, LPCSTR 
lpszUserName, DWORD dwFlags) PURE;
     STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA 
lpdiDevImageInfoHeader) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInputDevice8W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputDevice8W
 DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
 {
@@ -2035,7 +2027,6 @@ 
DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
     STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW lpdiaf, LPCWSTR 
lpszUserName, DWORD dwFlags) PURE;
     STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW 
lpdiDevImageInfoHeader) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -2115,6 +2106,8 @@ 
DECLARE_INTERFACE_(IDirectInputDevice8W,IDirectInputDevice7W)
 #define IDirectInputDevice8_GetImageInfo(p,a)       (p)->GetImageInfo(a)
 #endif
 
+#endif /* DI8 */
+
 /* "Standard" Mouse report... */
 typedef struct DIMOUSESTATE {
   LONG lX;
@@ -2123,6 +2116,7 @@ typedef struct DIMOUSESTATE {
   BYTE rgbButtons[4];
 } DIMOUSESTATE;
 
+#if DIRECTINPUT_VERSION >= 0x0700
 /* "Standard" Mouse report for DInput 7... */
 typedef struct DIMOUSESTATE2 {
   LONG lX;
@@ -2130,6 +2124,7 @@ typedef struct DIMOUSESTATE2 {
   LONG lZ;
   BYTE rgbButtons[8];
 } DIMOUSESTATE2;
+#endif /* DI7 */
 
 #define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)
 #define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)
@@ -2138,147 +2133,52 @@ typedef struct DIMOUSESTATE2 {
 #define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
 #define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
 #define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
+#if DIRECTINPUT_VERSION >= 0x0700
 #define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
 #define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
 #define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
 #define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
-
-/* New DirectInput8 mouse definitions */
-
-#define DIMOUSE_XAXISAB            (0x82000200 | DIMOFS_X)
-#define DIMOUSE_YAXISAB            (0x82000200 | DIMOFS_Y)
-#define DIMOUSE_XAXIS              (0x82000300 | DIMOFS_X)
-#define DIMOUSE_YAXIS              (0x82000300 | DIMOFS_Y)
-#define DIMOUSE_WHEEL              (0x82000300 | DIMOFS_Z)
-#define DIMOUSE_BUTTON0            (0x82000400 | DIMOFS_BUTTON0)
-#define DIMOUSE_BUTTON1            (0x82000400 | DIMOFS_BUTTON1)
-#define DIMOUSE_BUTTON2            (0x82000400 | DIMOFS_BUTTON2)
-#define DIMOUSE_BUTTON3            (0x82000400 | DIMOFS_BUTTON3)
-#define DIMOUSE_BUTTON4            (0x82000400 | DIMOFS_BUTTON4)
-#define DIMOUSE_BUTTON5            (0x82000400 | DIMOFS_BUTTON5)
-#define DIMOUSE_BUTTON6            (0x82000400 | DIMOFS_BUTTON6)
-#define DIMOUSE_BUTTON7            (0x82000400 | DIMOFS_BUTTON7)
+#endif /* DI7 */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 extern const DIDATAFORMAT c_dfDIMouse;
+#if DIRECTINPUT_VERSION >= 0x0700
 extern const DIDATAFORMAT c_dfDIMouse2; /* DX 7 */
+#endif /* DI7 */
 extern const DIDATAFORMAT c_dfDIKeyboard;
+#if DIRECTINPUT_VERSION >= 0x0500
 extern const DIDATAFORMAT c_dfDIJoystick;
 extern const DIDATAFORMAT c_dfDIJoystick2;
+#endif /* DI5 */
 #ifdef __cplusplus
 };
 #endif
 
-#define DIAXIS_ANY_X_1             0xFF00C201
-#define DIAXIS_ANY_X_2             0xFF00C202
-#define DIAXIS_ANY_Y_1             0xFF014201
-#define DIAXIS_ANY_Y_2             0xFF014202
-#define DIAXIS_ANY_Z_1             0xFF01C201
-#define DIAXIS_ANY_Z_2             0xFF01C202
-#define DIAXIS_ANY_R_1             0xFF024201
-#define DIAXIS_ANY_R_2             0xFF024202
-#define DIAXIS_ANY_U_1             0xFF02C201
-#define DIAXIS_ANY_U_2             0xFF02C202
-#define DIAXIS_ANY_V_1             0xFF034201
-#define DIAXIS_ANY_V_2             0xFF034202
-#define DIAXIS_ANY_A_1             0xFF03C201
-#define DIAXIS_ANY_A_2             0xFF03C202
-#define DIAXIS_ANY_B_1             0xFF044201
-#define DIAXIS_ANY_B_2             0xFF044202
-#define DIAXIS_ANY_C_1             0xFF04C201
-#define DIAXIS_ANY_C_2             0xFF04C202
-#define DIAXIS_ANY_S_1             0xFF054201
-#define DIAXIS_ANY_S_2             0xFF054202
-#define DIAXIS_ANY_1               0xFF004201
-#define DIAXIS_ANY_2               0xFF004202
-#define DIAXIS_ANY_3               0xFF004203
-#define DIAXIS_ANY_4               0xFF004204
-#define DIPOV_ANY_1                0xFF004601
-#define DIPOV_ANY_2                0xFF004602
-#define DIPOV_ANY_3                0xFF004603
-#define DIPOV_ANY_4                0xFF004604
-#define DIBUTTON_ANY(instance)     (0xFF004400 | (instance))
-
-#define DIVIRTUAL_FLYING_HELICOPTER        0x06000000
-#define DIBUTTON_FLYINGH_MENU              0x060004fd
-#define DIBUTTON_FLYINGH_FIRE              0x06001401
-#define DIBUTTON_FLYINGH_WEAPONS           0x06001402
-#define DIBUTTON_FLYINGH_TARGET            0x06001403
-#define DIBUTTON_FLYINGH_DEVICE            0x060044fe
-#define DIBUTTON_FLYINGH_PAUSE             0x060044fc
-#define DIHATSWITCH_FLYINGH_GLANCE         0x06004601
-#define DIBUTTON_FLYINGH_FIRESECONDARY     0x06004c07
-#define DIBUTTON_FLYINGH_COUNTER           0x06005404
-#define DIBUTTON_FLYINGH_VIEW              0x06006405
-#define DIBUTTON_FLYINGH_GEAR              0x06006406
-#define DIAXIS_FLYINGH_BANK                0x06008a01
-#define DIAXIS_FLYINGH_PITCH               0x06010a02
-#define DIAXIS_FLYINGH_COLLECTIVE          0x06018a03
-#define DIAXIS_FLYINGH_TORQUE              0x06025a04
-#define DIAXIS_FLYINGH_THROTTLE            0x0603da05
-#define DIBUTTON_FLYINGH_FASTER_LINK       0x0603dce0
-#define DIBUTTON_FLYINGH_SLOWER_LINK       0x0603dce8
-#define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK  0x0607c4e4
-#define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK 0x0607c4ec
-#define DIBUTTON_FLYINGH_GLANCE_UP_LINK    0x0607c4e0
-#define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK  0x0607c4e8
-
-#define DIVIRTUAL_SPACESIM                  0x07000000
-#define DIBUTTON_SPACESIM_FIRE              0x07000401
-#define DIBUTTON_SPACESIM_WEAPONS           0x07000402
-#define DIBUTTON_SPACESIM_TARGET            0x07000403
-#define DIBUTTON_SPACESIM_MENU              0x070004fd
-#define DIBUTTON_SPACESIM_VIEW              0x07004404
-#define DIBUTTON_SPACESIM_DISPLAY           0x07004405
-#define DIBUTTON_SPACESIM_RAISE             0x07004406
-#define DIBUTTON_SPACESIM_LOWER             0x07004407
-#define DIBUTTON_SPACESIM_GEAR              0x07004408
-#define DIBUTTON_SPACESIM_FIRESECONDARY     0x07004409
-#define DIBUTTON_SPACESIM_PAUSE             0x070044fc
-#define DIBUTTON_SPACESIM_DEVICE            0x070044fe
-#define DIHATSWITCH_SPACESIM_GLANCE         0x07004601
-#define DIBUTTON_SPACESIM_LEFT_LINK         0x0700c4e4
-#define DIBUTTON_SPACESIM_RIGHT_LINK        0x0700c4ec
-#define DIAXIS_SPACESIM_LATERAL             0x07008201
-#define DIAXIS_SPACESIM_MOVE                0x07010202
-#define DIBUTTON_SPACESIM_FORWARD_LINK      0x070144e0
-#define DIBUTTON_SPACESIM_BACKWARD_LINK     0x070144e8
-#define DIAXIS_SPACESIM_CLIMB               0x0701c204
-#define DIAXIS_SPACESIM_ROTATE              0x07024205
-#define DIBUTTON_SPACESIM_TURN_LEFT_LINK    0x070244e4
-#define DIBUTTON_SPACESIM_TURN_RIGHT_LINK   0x070244ec
-#define DIAXIS_SPACESIM_THROTTLE            0x07038203
-#define DIBUTTON_SPACESIM_FASTER_LINK       0x0703c4e0
-#define DIBUTTON_SPACESIM_SLOWER_LINK       0x0703c4e8
-#define DIBUTTON_SPACESIM_GLANCE_UP_LINK    0x0707c4e0
-#define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK  0x0707c4e4
-#define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK  0x0707c4e8
-#define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK 0x0707c4ec
-
-/*****************************************************************************
- * IDirectInputA interface
- */
-#define INTERFACE IDirectInputA
-DECLARE_INTERFACE_(IDirectInputA,IUnknown)
-{
-    /*** IUnknown methods ***/
-    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) 
PURE;
-    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
-    STDMETHOD_(ULONG,Release)(THIS) PURE;
-    /*** IDirectInputA methods ***/
-    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA 
*lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
-    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA 
lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
-    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
-    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
-    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
-};
-#undef INTERFACE
+/*****************************************************************************
+ * IDirectInputA interface
+ */
+#undef INTERFACE
+#define INTERFACE IDirectInputA
+DECLARE_INTERFACE_(IDirectInputA,IUnknown)
+{
+    /*** IUnknown methods ***/
+    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) 
PURE;
+    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+    STDMETHOD_(ULONG,Release)(THIS) PURE;
+    /*** IDirectInputA methods ***/
+    STDMETHOD(CreateDevice)(THIS_ REFGUID rguid, LPDIRECTINPUTDEVICEA 
*lplpDirectInputDevice, LPUNKNOWN pUnkOuter) PURE;
+    STDMETHOD(EnumDevices)(THIS_ DWORD dwDevType, LPDIENUMDEVICESCALLBACKA 
lpCallback, LPVOID pvRef, DWORD dwFlags) PURE;
+    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID rguidInstance) PURE;
+    STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
+    STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
+};
 
 /*****************************************************************************
  * IDirectInputW interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInputW
 DECLARE_INTERFACE_(IDirectInputW,IUnknown)
 {
@@ -2293,7 +2193,6 @@ DECLARE_INTERFACE_(IDirectInputW,IUnknown)
     STDMETHOD(RunControlPanel)(THIS_ HWND hwndOwner, DWORD dwFlags) PURE;
     STDMETHOD(Initialize)(THIS_ HINSTANCE hinst, DWORD dwVersion) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -2322,6 +2221,7 @@ DECLARE_INTERFACE_(IDirectInputW,IUnknown)
 /*****************************************************************************
  * IDirectInput2A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput2A
 DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)
 {
@@ -2338,11 +2238,11 @@ DECLARE_INTERFACE_(IDirectInput2A,IDirectInputA)
     /*** IDirectInput2A methods ***/
     STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCSTR pszName, LPGUID 
pguidInstance) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInput2W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput2W
 DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
 {
@@ -2359,7 +2259,6 @@ DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
     /*** IDirectInput2W methods ***/
     STDMETHOD(FindDevice)(THIS_ REFGUID rguid, LPCWSTR pszName, LPGUID 
pguidInstance) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -2392,6 +2291,7 @@ DECLARE_INTERFACE_(IDirectInput2W,IDirectInputW)
 /*****************************************************************************
  * IDirectInput7A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput7A
 DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)
 {
@@ -2410,11 +2310,11 @@ DECLARE_INTERFACE_(IDirectInput7A,IDirectInput2A)
     /*** IDirectInput7A methods ***/
     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, 
LPUNKNOWN lpUnknownOuter) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInput7W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput7W
 DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
 {
@@ -2433,7 +2333,6 @@ DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
     /*** IDirectInput7W methods ***/
     STDMETHOD(CreateDeviceEx)(THIS_ REFGUID rguid, REFIID riid, LPVOID *pvOut, 
LPUNKNOWN lpUnknownOuter) PURE;
 };
-#undef INTERFACE
 
 #if !defined(__cplusplus) || defined(CINTERFACE)
 /*** IUnknown methods ***/
@@ -2468,9 +2367,11 @@ DECLARE_INTERFACE_(IDirectInput7W,IDirectInput2W)
 #endif
 
 
+#if DIRECTINPUT_VERSION >= 0x0800
 /*****************************************************************************
  * IDirectInput8A interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput8A
 DECLARE_INTERFACE_(IDirectInput8A,IUnknown)
 {
@@ -2488,11 +2389,11 @@ DECLARE_INTERFACE_(IDirectInput8A,IUnknown)
     STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR ptszUserName, 
LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, 
LPVOID pvRef, DWORD dwFlags) PURE;
     STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK 
lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID 
pvRefData) PURE;
 };
-#undef INTERFACE
 
 /*****************************************************************************
  * IDirectInput8W interface
  */
+#undef INTERFACE
 #define INTERFACE IDirectInput8W
 DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
 {
@@ -2542,6 +2443,7 @@ DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
 #define IDirectInput8_ConfigureDevices(p,a,b,c,d) 
(p)->ConfigureDevices(a,b,c,d)
 #endif
 
+#endif /* DI8 */
 
 /* Export functions */
 
@@ -2549,13 +2451,261 @@ DECLARE_INTERFACE_(IDirectInput8W,IUnknown)
 extern "C" {
 #endif
 
+#if DIRECTINPUT_VERSION >= 0x0800
 HRESULT WINAPI DirectInput8Create(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
-
+#else /* DI < 8 */
 HRESULT WINAPI DirectInputCreateA(HINSTANCE,DWORD,LPDIRECTINPUTA *,LPUNKNOWN);
 HRESULT WINAPI DirectInputCreateW(HINSTANCE,DWORD,LPDIRECTINPUTW *,LPUNKNOWN);
-#define DirectInputCreate __MINGW_NAME_AW(DirectInputCreate)
+#define DirectInputCreate WINELIB_NAME_AW(DirectInputCreate)
 
 HRESULT WINAPI DirectInputCreateEx(HINSTANCE,DWORD,REFIID,LPVOID *,LPUNKNOWN);
+#endif /* DI8 */
+
+
+/* New DirectInput8 style keyboard constants */
+
+#define DIKEYBOARD_ESCAPE               (DIK_ESCAPE | 0x81000400)
+#define DIKEYBOARD_1                    (DIK_1 | 0x81000400)
+#define DIKEYBOARD_2                    (DIK_2 | 0x81000400)
+#define DIKEYBOARD_3                    (DIK_3 | 0x81000400)
+#define DIKEYBOARD_4                    (DIK_4 | 0x81000400)
+#define DIKEYBOARD_5                    (DIK_5 | 0x81000400)
+#define DIKEYBOARD_6                    (DIK_6 | 0x81000400)
+#define DIKEYBOARD_7                    (DIK_7 | 0x81000400)
+#define DIKEYBOARD_8                    (DIK_8 | 0x81000400)
+#define DIKEYBOARD_9                    (DIK_9 | 0x81000400)
+#define DIKEYBOARD_0                    (DIK_0 | 0x81000400)
+#define DIKEYBOARD_MINUS                (DIK_MINUS | 0x81000400)
+#define DIKEYBOARD_EQUALS               (DIK_EQUALS | 0x81000400)
+#define DIKEYBOARD_BACK                 (DIK_BACK | 0x81000400)
+#define DIKEYBOARD_TAB                  (DIK_TAB | 0x81000400)
+#define DIKEYBOARD_Q                    (DIK_Q | 0x81000400)
+#define DIKEYBOARD_W                    (DIK_W | 0x81000400)
+#define DIKEYBOARD_E                    (DIK_E | 0x81000400)
+#define DIKEYBOARD_R                    (DIK_R | 0x81000400)
+#define DIKEYBOARD_T                    (DIK_T | 0x81000400)
+#define DIKEYBOARD_Y                    (DIK_Y | 0x81000400)
+#define DIKEYBOARD_U                    (DIK_U | 0x81000400)
+#define DIKEYBOARD_I                    (DIK_I | 0x81000400)
+#define DIKEYBOARD_O                    (DIK_O | 0x81000400)
+#define DIKEYBOARD_P                    (DIK_P | 0x81000400)
+#define DIKEYBOARD_LBRACKET             (DIK_LBRACKET | 0x81000400)
+#define DIKEYBOARD_RBRACKET             (DIK_RBRACKET | 0x81000400)
+#define DIKEYBOARD_RETURN               (DIK_RETURN | 0x81000400)
+#define DIKEYBOARD_LCONTROL             (DIK_LCONTROL | 0x81000400)
+#define DIKEYBOARD_A                    (DIK_A | 0x81000400)
+#define DIKEYBOARD_S                    (DIK_S | 0x81000400)
+#define DIKEYBOARD_D                    (DIK_D | 0x81000400)
+#define DIKEYBOARD_F                    (DIK_F | 0x81000400)
+#define DIKEYBOARD_G                    (DIK_G | 0x81000400)
+#define DIKEYBOARD_H                    (DIK_H | 0x81000400)
+#define DIKEYBOARD_J                    (DIK_J | 0x81000400)
+#define DIKEYBOARD_K                    (DIK_K | 0x81000400)
+#define DIKEYBOARD_L                    (DIK_L | 0x81000400)
+#define DIKEYBOARD_SEMICOLON            (DIK_SEMICOLON | 0x81000400)
+#define DIKEYBOARD_APOSTROPHE           (DIK_APOSTROPHE | 0x81000400)
+#define DIKEYBOARD_GRAVE                (DIK_GRAVE | 0x81000400)
+#define DIKEYBOARD_LSHIFT               (DIK_LSHIFT | 0x81000400)
+#define DIKEYBOARD_BACKSLASH            (DIK_BACKSLASH | 0x81000400)
+#define DIKEYBOARD_Z                    (DIK_Z | 0x81000400)
+#define DIKEYBOARD_X                    (DIK_X | 0x81000400)
+#define DIKEYBOARD_C                    (DIK_C | 0x81000400)
+#define DIKEYBOARD_V                    (DIK_V | 0x81000400)
+#define DIKEYBOARD_B                    (DIK_B | 0x81000400)
+#define DIKEYBOARD_N                    (DIK_N | 0x81000400)
+#define DIKEYBOARD_M                    (DIK_M | 0x81000400)
+#define DIKEYBOARD_COMMA                (DIK_COMMA | 0x81000400)
+#define DIKEYBOARD_PERIOD               (DIK_PERIOD | 0x81000400)
+#define DIKEYBOARD_SLASH                (DIK_SLASH | 0x81000400)
+#define DIKEYBOARD_RSHIFT               (DIK_RSHIFT | 0x81000400)
+#define DIKEYBOARD_MULTIPLY             (DIK_MULTIPLY | 0x81000400)
+#define DIKEYBOARD_LMENU                (DIK_LMENU | 0x81000400)
+#define DIKEYBOARD_SPACE                (DIK_SPACE | 0x81000400)
+#define DIKEYBOARD_CAPITAL              (DIK_CAPITAL | 0x81000400)
+#define DIKEYBOARD_F1                   (DIK_F1 | 0x81000400)
+#define DIKEYBOARD_F2                   (DIK_F2 | 0x81000400)
+#define DIKEYBOARD_F3                   (DIK_F3 | 0x81000400)
+#define DIKEYBOARD_F4                   (DIK_F4 | 0x81000400)
+#define DIKEYBOARD_F5                   (DIK_F5 | 0x81000400)
+#define DIKEYBOARD_F6                   (DIK_F6 | 0x81000400)
+#define DIKEYBOARD_F7                   (DIK_F7 | 0x81000400)
+#define DIKEYBOARD_F8                   (DIK_F8 | 0x81000400)
+#define DIKEYBOARD_F9                   (DIK_F9 | 0x81000400)
+#define DIKEYBOARD_F10                  (DIK_F10 | 0x81000400)
+#define DIKEYBOARD_NUMLOCK              (DIK_NUMLOCK | 0x81000400)
+#define DIKEYBOARD_SCROLL               (DIK_SCROLL | 0x81000400)
+#define DIKEYBOARD_NUMPAD7              (DIK_NUMPAD7 | 0x81000400)
+#define DIKEYBOARD_NUMPAD8              (DIK_NUMPAD8 | 0x81000400)
+#define DIKEYBOARD_NUMPAD9              (DIK_NUMPAD9 | 0x81000400)
+#define DIKEYBOARD_SUBTRACT             (DIK_SUBTRACT | 0x81000400)
+#define DIKEYBOARD_NUMPAD4              (DIK_NUMPAD4 | 0x81000400)
+#define DIKEYBOARD_NUMPAD5              (DIK_NUMPAD5 | 0x81000400)
+#define DIKEYBOARD_NUMPAD6              (DIK_NUMPAD6 | 0x81000400)
+#define DIKEYBOARD_ADD                  (DIK_ADD | 0x81000400)
+#define DIKEYBOARD_NUMPAD1              (DIK_NUMPAD1 | 0x81000400)
+#define DIKEYBOARD_NUMPAD2              (DIK_NUMPAD2 | 0x81000400)
+#define DIKEYBOARD_NUMPAD3              (DIK_NUMPAD3 | 0x81000400)
+#define DIKEYBOARD_NUMPAD0              (DIK_NUMPAD0 | 0x81000400)
+#define DIKEYBOARD_DECIMAL              (DIK_DECIMAL | 0x81000400)
+#define DIKEYBOARD_F11                  (DIK_F11 | 0x81000400)
+#define DIKEYBOARD_F12                  (DIK_F12 | 0x81000400)
+#define DIKEYBOARD_F13                  (DIK_F13 | 0x81000400)
+#define DIKEYBOARD_F14                  (DIK_F14 | 0x81000400)
+#define DIKEYBOARD_F15                  (DIK_F15 | 0x81000400)
+#define DIKEYBOARD_KANA                 (DIK_KANA | 0x81000400)
+#define DIKEYBOARD_CONVERT              (DIK_CONVERT | 0x81000400)
+#define DIKEYBOARD_NOCONVERT            (DIK_NOCONVERT | 0x81000400)
+#define DIKEYBOARD_YEN                  (DIK_YEN | 0x81000400)
+#define DIKEYBOARD_NUMPADEQUALS         (DIK_NUMPADEQUALS | 0x81000400)
+#define DIKEYBOARD_CIRCUMFLEX           (DIK_CIRCUMFLEX | 0x81000400)
+#define DIKEYBOARD_AT                   (DIK_AT | 0x81000400)
+#define DIKEYBOARD_COLON                (DIK_COLON | 0x81000400)
+#define DIKEYBOARD_UNDERLINE            (DIK_UNDERLINE | 0x81000400)
+#define DIKEYBOARD_KANJI                (DIK_KANJI | 0x81000400)
+#define DIKEYBOARD_STOP                 (DIK_STOP | 0x81000400)
+#define DIKEYBOARD_AX                   (DIK_AX | 0x81000400)
+#define DIKEYBOARD_UNLABELED            (DIK_UNLABELED | 0x81000400)
+#define DIKEYBOARD_NUMPADENTER          (DIK_NUMPADENTER | 0x81000400)
+#define DIKEYBOARD_RCONTROL             (DIK_RCONTROL | 0x81000400)
+#define DIKEYBOARD_NUMPADCOMMA          (DIK_NUMPADCOMMA | 0x81000400)
+#define DIKEYBOARD_DIVIDE               (DIK_DIVIDE | 0x81000400)
+#define DIKEYBOARD_SYSRQ                (DIK_SYSRQ | 0x81000400)
+#define DIKEYBOARD_RMENU                (DIK_RMENU | 0x81000400)
+#define DIKEYBOARD_PAUSE                (DIK_PAUSE | 0x81000400)
+#define DIKEYBOARD_HOME                 (DIK_HOME | 0x81000400)
+#define DIKEYBOARD_UP                   (DIK_UP | 0x81000400)
+#define DIKEYBOARD_PRIOR                (DIK_PRIOR | 0x81000400)
+#define DIKEYBOARD_LEFT                 (DIK_LEFT | 0x81000400)
+#define DIKEYBOARD_RIGHT                (DIK_RIGHT | 0x81000400)
+#define DIKEYBOARD_END                  (DIK_END | 0x81000400)
+#define DIKEYBOARD_DOWN                 (DIK_DOWN | 0x81000400)
+#define DIKEYBOARD_NEXT                 (DIK_NEXT | 0x81000400)
+#define DIKEYBOARD_INSERT               (DIK_INSERT | 0x81000400)
+#define DIKEYBOARD_DELETE               (DIK_DELETE | 0x81000400)
+#define DIKEYBOARD_LWIN                 (DIK_LWIN | 0x81000400)
+#define DIKEYBOARD_RWIN                 (DIK_RWIN | 0x81000400)
+#define DIKEYBOARD_APPS                 (DIK_APPS | 0x81000400)
+#define DIKEYBOARD_POWER                (DIK_POWER | 0x81000400)
+#define DIKEYBOARD_SLEEP                (DIK_SLEEP | 0x81000400)
+#define DIKEYBOARD_BACKSPACE            (DIK_BACKSPACE | 0x81000400)
+#define DIKEYBOARD_NUMPADSTAR           (DIK_NUMPADSTAR | 0x81000400)
+#define DIKEYBOARD_LALT                 (DIK_LALT | 0x81000400)
+#define DIKEYBOARD_CAPSLOCK             (DIK_CAPSLOCK | 0x81000400)
+#define DIKEYBOARD_NUMPADMINUS          (DIK_NUMPADMINUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPLUS           (DIK_NUMPADPLUS | 0x81000400)
+#define DIKEYBOARD_NUMPADPERIOD         (DIK_NUMPADPERIOD | 0x81000400)
+#define DIKEYBOARD_NUMPADSLASH          (DIK_NUMPADSLASH | 0x81000400)
+#define DIKEYBOARD_RALT                 (DIK_RALT | 0x81000400)
+#define DIKEYBOARD_UPARROW              (DIK_UPARROW | 0x81000400)
+#define DIKEYBOARD_PGUP                 (DIK_PGUP | 0x81000400)
+#define DIKEYBOARD_LEFTARROW            (DIK_LEFTARROW | 0x81000400)
+#define DIKEYBOARD_RIGHTARROW           (DIK_RIGHTARROW | 0x81000400)
+#define DIKEYBOARD_DOWNARROW            (DIK_DOWNARROW | 0x81000400)
+#define DIKEYBOARD_PGDN                 (DIK_PGDN | 0x81000400)
+
+/* New DirectInput8 mouse definitions */
+
+#define DIMOUSE_XAXISAB            (0x82000200 | DIMOFS_X)
+#define DIMOUSE_YAXISAB            (0x82000200 | DIMOFS_Y)
+#define DIMOUSE_XAXIS              (0x82000300 | DIMOFS_X)
+#define DIMOUSE_YAXIS              (0x82000300 | DIMOFS_Y)
+#define DIMOUSE_WHEEL              (0x82000300 | DIMOFS_Z)
+#define DIMOUSE_BUTTON0            (0x82000400 | DIMOFS_BUTTON0)
+#define DIMOUSE_BUTTON1            (0x82000400 | DIMOFS_BUTTON1)
+#define DIMOUSE_BUTTON2            (0x82000400 | DIMOFS_BUTTON2)
+#define DIMOUSE_BUTTON3            (0x82000400 | DIMOFS_BUTTON3)
+#define DIMOUSE_BUTTON4            (0x82000400 | DIMOFS_BUTTON4)
+#define DIMOUSE_BUTTON5            (0x82000400 | DIMOFS_BUTTON5)
+#define DIMOUSE_BUTTON6            (0x82000400 | DIMOFS_BUTTON6)
+#define DIMOUSE_BUTTON7            (0x82000400 | DIMOFS_BUTTON7)
+
+
+#define DIAXIS_ANY_X_1             0xFF00C201
+#define DIAXIS_ANY_X_2             0xFF00C202
+#define DIAXIS_ANY_Y_1             0xFF014201
+#define DIAXIS_ANY_Y_2             0xFF014202
+#define DIAXIS_ANY_Z_1             0xFF01C201
+#define DIAXIS_ANY_Z_2             0xFF01C202
+#define DIAXIS_ANY_R_1             0xFF024201
+#define DIAXIS_ANY_R_2             0xFF024202
+#define DIAXIS_ANY_U_1             0xFF02C201
+#define DIAXIS_ANY_U_2             0xFF02C202
+#define DIAXIS_ANY_V_1             0xFF034201
+#define DIAXIS_ANY_V_2             0xFF034202
+#define DIAXIS_ANY_A_1             0xFF03C201
+#define DIAXIS_ANY_A_2             0xFF03C202
+#define DIAXIS_ANY_B_1             0xFF044201
+#define DIAXIS_ANY_B_2             0xFF044202
+#define DIAXIS_ANY_C_1             0xFF04C201
+#define DIAXIS_ANY_C_2             0xFF04C202
+#define DIAXIS_ANY_S_1             0xFF054201
+#define DIAXIS_ANY_S_2             0xFF054202
+#define DIAXIS_ANY_1               0xFF004201
+#define DIAXIS_ANY_2               0xFF004202
+#define DIAXIS_ANY_3               0xFF004203
+#define DIAXIS_ANY_4               0xFF004204
+#define DIPOV_ANY_1                0xFF004601
+#define DIPOV_ANY_2                0xFF004602
+#define DIPOV_ANY_3                0xFF004603
+#define DIPOV_ANY_4                0xFF004604
+#define DIBUTTON_ANY(instance)     (0xFF004400 | (instance))
+
+
+#define DIVIRTUAL_FLYING_HELICOPTER        0x06000000
+#define DIBUTTON_FLYINGH_MENU              0x060004fd
+#define DIBUTTON_FLYINGH_FIRE              0x06001401
+#define DIBUTTON_FLYINGH_WEAPONS           0x06001402
+#define DIBUTTON_FLYINGH_TARGET            0x06001403
+#define DIBUTTON_FLYINGH_DEVICE            0x060044fe
+#define DIBUTTON_FLYINGH_PAUSE             0x060044fc
+#define DIHATSWITCH_FLYINGH_GLANCE         0x06004601
+#define DIBUTTON_FLYINGH_FIRESECONDARY     0x06004c07
+#define DIBUTTON_FLYINGH_COUNTER           0x06005404
+#define DIBUTTON_FLYINGH_VIEW              0x06006405
+#define DIBUTTON_FLYINGH_GEAR              0x06006406
+#define DIAXIS_FLYINGH_BANK                0x06008a01
+#define DIAXIS_FLYINGH_PITCH               0x06010a02
+#define DIAXIS_FLYINGH_COLLECTIVE          0x06018a03
+#define DIAXIS_FLYINGH_TORQUE              0x06025a04
+#define DIAXIS_FLYINGH_THROTTLE            0x0603da05
+#define DIBUTTON_FLYINGH_FASTER_LINK       0x0603dce0
+#define DIBUTTON_FLYINGH_SLOWER_LINK       0x0603dce8
+#define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK  0x0607c4e4
+#define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK 0x0607c4ec
+#define DIBUTTON_FLYINGH_GLANCE_UP_LINK    0x0607c4e0
+#define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK  0x0607c4e8
+
+#define DIVIRTUAL_SPACESIM                  0x07000000
+#define DIBUTTON_SPACESIM_FIRE              0x07000401
+#define DIBUTTON_SPACESIM_WEAPONS           0x07000402
+#define DIBUTTON_SPACESIM_TARGET            0x07000403
+#define DIBUTTON_SPACESIM_MENU              0x070004fd
+#define DIBUTTON_SPACESIM_VIEW              0x07004404
+#define DIBUTTON_SPACESIM_DISPLAY           0x07004405
+#define DIBUTTON_SPACESIM_RAISE             0x07004406
+#define DIBUTTON_SPACESIM_LOWER             0x07004407
+#define DIBUTTON_SPACESIM_GEAR              0x07004408
+#define DIBUTTON_SPACESIM_FIRESECONDARY     0x07004409
+#define DIBUTTON_SPACESIM_PAUSE             0x070044fc
+#define DIBUTTON_SPACESIM_DEVICE            0x070044fe
+#define DIHATSWITCH_SPACESIM_GLANCE         0x07004601
+#define DIBUTTON_SPACESIM_LEFT_LINK         0x0700c4e4
+#define DIBUTTON_SPACESIM_RIGHT_LINK        0x0700c4ec
+#define DIAXIS_SPACESIM_LATERAL             0x07008201
+#define DIAXIS_SPACESIM_MOVE                0x07010202
+#define DIBUTTON_SPACESIM_FORWARD_LINK      0x070144e0
+#define DIBUTTON_SPACESIM_BACKWARD_LINK     0x070144e8
+#define DIAXIS_SPACESIM_CLIMB               0x0701c204
+#define DIAXIS_SPACESIM_ROTATE              0x07024205
+#define DIBUTTON_SPACESIM_TURN_LEFT_LINK    0x070244e4
+#define DIBUTTON_SPACESIM_TURN_RIGHT_LINK   0x070244ec
+#define DIAXIS_SPACESIM_THROTTLE            0x07038203
+#define DIBUTTON_SPACESIM_FASTER_LINK       0x0703c4e0
+#define DIBUTTON_SPACESIM_SLOWER_LINK       0x0703c4e8
+#define DIBUTTON_SPACESIM_GLANCE_UP_LINK    0x0707c4e0
+#define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK  0x0707c4e4
+#define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK  0x0707c4e8
+#define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK 0x0707c4ec
 
 #ifdef __cplusplus
 };
diff --git a/mingw-w64-headers/wine-import.sh b/mingw-w64-headers/wine-import.sh
index fa47863..658df6b 100755
--- a/mingw-w64-headers/wine-import.sh
+++ b/mingw-w64-headers/wine-import.sh
@@ -80,7 +80,6 @@ for f in \
        d3dx9tex.h \
        d3dx9xof.h \
        devpkey.h \
-       dinput.h \
        dls1.h \
        dls2.h \
        dmerror.h \
-- 
2.31.0

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to