]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/dinput/dinput.factor
76cba4ff36a20d517631e5efa729308e9ad4f340
[factor.git] / basis / windows / dinput / dinput.factor
1 USING: windows.kernel32 windows.ole32 windows.com windows.com.syntax
2 alien alien.c-types alien.syntax kernel system namespaces math constants
3 alias ;
4 IN: windows.dinput
5
6 <<
7     os windows?
8     [ "dinput" "dinput8.dll" "stdcall" add-library ]
9     when
10 >>
11
12 LIBRARY: dinput
13
14 TYPEDEF: void* LPDIENUMDEVICESCALLBACKW
15 : LPDIENUMDEVICESCALLBACKW ( quot -- alien )
16     [ "BOOL" { "LPCDIDEVICEINSTANCEW" "LPVOID" } "stdcall" ]
17     dip alien-callback ; inline
18 TYPEDEF: void* LPDIENUMDEVICESBYSEMANTICSCBW
19 : LPDIENUMDEVICESBYSEMANTICSCBW ( quot -- alien )
20     [ "BOOL" { "LPCDIDEVICEINSTANCEW" "IDirectInputDevice8W*" "DWORD" "DWORD" "LPVOID" } "stdcall" ]
21     dip alien-callback ; inline
22 TYPEDEF: void* LPDICONFIGUREDEVICESCALLBACK
23 : LPDICONFIGUREDEVICESCALLBACK ( quot -- alien )
24     [ "BOOL" { "IUnknown*" "LPVOID" } "stdcall" ]
25     dip alien-callback ; inline
26 TYPEDEF: void* LPDIENUMEFFECTSCALLBACKW
27 : LPDIENUMEFFECTSCALLBACKW ( quot -- alien )
28     [ "BOOL" { "LPCDIEFFECTINFOW" "LPVOID" } "stdcall" ]
29     dip alien-callback ; inline
30 TYPEDEF: void* LPDIENUMCREATEDEFFECTOBJECTSCALLBACK
31 : LPDIENUMCREATEDEFFECTOBJECTSCALLBACK
32     [ "BOOL" { "LPDIRECTINPUTEFFECT" "LPVOID" } "stdcall" ]
33     dip alien-callback ; inline
34 TYPEDEF: void* LPDIENUMEFFECTSINFILECALLBACK
35 : LPDIENUMEFFECTSINFILECALLBACK
36     [ "BOOL" { "LPCDIFILEEFFECT" "LPVOID" } "stdcall" ]
37     dip alien-callback ; inline
38 TYPEDEF: void* LPDIENUMDEVICEOBJECTSCALLBACKW
39 : LPDIENUMDEVICEOBJECTSCALLBACKW
40     [ "BOOL" { "LPCDIDEVICEOBJECTINSTANCEW" "LPVOID" } "stdcall" ]
41     dip alien-callback ; inline
42
43 TYPEDEF: DWORD D3DCOLOR
44
45 C-STRUCT: DIDEVICEINSTANCEW
46     { "DWORD"      "dwSize" }
47     { "GUID"       "guidInstance" }
48     { "GUID"       "guidProduct" }
49     { "DWORD"      "dwDevType" }
50     { "WCHAR[260]" "tszInstanceName" }
51     { "WCHAR[260]" "tszProductName" }
52     { "GUID"       "guidFFDriver" }
53     { "WORD"       "wUsagePage" }
54     { "WORD"       "wUsage" } ;
55 TYPEDEF: DIDEVICEINSTANCEW* LPDIDEVICEINSTANCEW
56 TYPEDEF: DIDEVICEINSTANCEW* LPCDIDEVICEINSTANCEW
57 C-UNION: DIACTION-union "LPCWSTR" "UINT" ;
58 C-STRUCT: DIACTIONW
59     { "UINT_PTR"       "uAppData" }
60     { "DWORD"          "dwSemantic" }
61     { "DWORD"          "dwFlags" }
62     { "DIACTION-union" "lptszActionName-or-uResIdString" }
63     { "GUID"           "guidInstance" }
64     { "DWORD"          "dwObjID" }
65     { "DWORD"          "dwHow" } ;
66 TYPEDEF: DIACTIONW* LPDIACTIONW
67 TYPEDEF: DIACTIONW* LPCDIACTIONW
68 C-STRUCT: DIACTIONFORMATW
69     { "DWORD"       "dwSize" }
70     { "DWORD"       "dwActionSize" }
71     { "DWORD"       "dwDataSize" }
72     { "DWORD"       "dwNumActions" }
73     { "LPDIACTIONW" "rgoAction" }
74     { "GUID"        "guidActionMap" }
75     { "DWORD"       "dwGenre" }
76     { "DWORD"       "dwBufferSize" }
77     { "LONG"        "lAxisMin" }
78     { "LONG"        "lAxisMax" }
79     { "HINSTANCE"   "hInstString" }
80     { "FILETIME"    "ftTimeStamp" }
81     { "DWORD"       "dwCRC" }
82     { "WCHAR[260]"  "tszActionMap" } ;
83 TYPEDEF: DIACTIONFORMATW* LPDIACTIONFORMATW
84 TYPEDEF: DIACTIONFORMATW* LPCDIACTIONFORMATW
85 C-STRUCT: DICOLORSET
86     { "DWORD"    "dwSize" }
87     { "D3DCOLOR" "cTextFore" }
88     { "D3DCOLOR" "cTextHighlight" }
89     { "D3DCOLOR" "cCalloutLine" }
90     { "D3DCOLOR" "cCalloutHighlight" }
91     { "D3DCOLOR" "cBorder" }
92     { "D3DCOLOR" "cControlFill" }
93     { "D3DCOLOR" "cHighlightFill" }
94     { "D3DCOLOR" "cAreaFill" } ;
95 TYPEDEF: DICOLORSET* LPDICOLORSET
96 TYPEDEF: DICOLORSET* LPCDICOLORSET
97
98 C-STRUCT: DICONFIGUREDEVICESPARAMSW
99     { "DWORD"             "dwSize" }
100     { "DWORD"             "dwcUsers" }
101     { "LPWSTR"            "lptszUserNames" }
102     { "DWORD"             "dwcFormats" }
103     { "LPDIACTIONFORMATW" "lprgFormats" }
104     { "HWND"              "hwnd" }
105     { "DICOLORSET"        "dics" }
106     { "IUnknown*"         "lpUnkDDSTarget" } ;
107 TYPEDEF: DICONFIGUREDEVICESPARAMSW* LPDICONFIGUREDEVICESPARAMSW
108 TYPEDEF: DICONFIGUREDEVICESPARAMSW* LPDICONFIGUREDEVICESPARAMSW
109
110 C-STRUCT: DIDEVCAPS
111     { "DWORD" "dwSize" }
112     { "DWORD" "dwFlags" }
113     { "DWORD" "dwDevType" }
114     { "DWORD" "dwAxes" }
115     { "DWORD" "dwButtons" }
116     { "DWORD" "dwPOVs" }
117     { "DWORD" "dwFFSamplePeriod" }
118     { "DWORD" "dwFFMinTimeResolution" }
119     { "DWORD" "dwFirmwareRevision" }
120     { "DWORD" "dwHardwareRevision" }
121     { "DWORD" "dwFFDriverVersion" } ;
122 TYPEDEF: DIDEVCAPS* LPDIDEVCAPS
123 TYPEDEF: DIDEVCAPS* LPCDIDEVCAPS
124 C-STRUCT: DIDEVICEOBJECTINSTANCEW
125     { "DWORD" "dwSize" }
126     { "GUID" "guidType" }
127     { "DWORD" "dwOfs" }
128     { "DWORD" "dwType" }
129     { "DWORD" "dwFlags" }
130     { "WCHAR[260]" "tszName" }
131     { "DWORD" "dwFFMaxForce" }
132     { "DWORD" "dwFFForceResolution" }
133     { "WORD" "wCollectionNumber" }
134     { "WORD" "wDesignatorIndex" }
135     { "WORD" "wUsagePage" }
136     { "WORD" "wUsage" }
137     { "DWORD" "dwDimension" }
138     { "WORD" "wExponent" }
139     { "WORD" "wReportId" } ;
140 TYPEDEF: DIDEVICEOBJECTINSTANCEW* LPDIDEVICEOBJECTINSTANCEW
141 TYPEDEF: DIDEVICEOBJECTINSTANCEW* LPCDIDEVICEOBJECTINSTANCEW
142 C-STRUCT: DIDEVICEOBJECTDATA
143     { "DWORD"    "dwOfs" }
144     { "DWORD"    "dwData" }
145     { "DWORD"    "dwTimeStamp" }
146     { "DWORD"    "dwSequence" }
147     { "UINT_PTR" "uAppData" } ;
148 TYPEDEF: DIDEVICEOBJECTDATA* LPDIDEVICEOBJECTDATA
149 TYPEDEF: DIDEVICEOBJECTDATA* LPCDIDEVICEOBJECTDATA
150 C-STRUCT: DIOBJECTDATAFORMAT
151     { "GUID*" "pguid" }
152     { "DWORD" "dwOfs" }
153     { "DWORD" "dwType" }
154     { "DWORD" "dwFlags" } ;
155 TYPEDEF: DIOBJECTDATAFORMAT* LPDIOBJECTDATAFORMAT
156 TYPEDEF: DIOBJECTDATAFORMAT* LPCDIOBJECTDATAFORMAT
157 C-STRUCT: DIDATAFORMAT
158     { "DWORD" "dwSize" }
159     { "DWORD" "dwObjSize" }
160     { "DWORD" "dwFlags" }
161     { "DWORD" "dwDataSize" }
162     { "DWORD" "dwNumObjs" }
163     { "LPDIOBJECTDATAFORMAT" "rgodf" } ;
164 TYPEDEF: DIDATAFORMAT* LPDIDATAFORMAT
165 TYPEDEF: DIDATAFORMAT* LPCDIDATAFORMAT
166 C-STRUCT: DIPROPHEADER
167     { "DWORD" "dwSize" }
168     { "DWORD" "dwHeaderSize" }
169     { "DWORD" "dwObj" }
170     { "DWORD" "dwHow" } ;
171 TYPEDEF: DIPROPHEADER* LPDIPROPHEADER
172 TYPEDEF: DIPROPHEADER* LPCDIPROPHEADER
173 C-STRUCT: DIPROPDWORD
174     { "DIPROPHEADER" "diph" }
175     { "DWORD"        "dwData" } ;
176 TYPEDEF: DIPROPDWORD* LPDIPROPDWORD
177 TYPEDEF: DIPROPDWORD* LPCDIPROPDWORD
178 C-STRUCT: DIPROPPOINTER
179     { "DIPROPHEADER" "diph" }
180     { "UINT_PTR" "uData" } ;
181 TYPEDEF: DIPROPPOINTER* LPDIPROPPOINTER
182 TYPEDEF: DIPROPPOINTER* LPCDIPROPPOINTER
183 C-STRUCT: DIPROPRANGE
184     { "DIPROPHEADER" "diph" }
185     { "LONG" "lMin" }
186     { "LONG" "lMax" } ;
187 TYPEDEF: DIPROPRANGE* LPDIPROPRANGE
188 TYPEDEF: DIPROPRANGE* LPCDIPROPRANGE
189 C-STRUCT: DIPROPCAL
190     { "DIPROPHEADER" "diph" }
191     { "LONG" "lMin" }
192     { "LONG" "lCenter" }
193     { "LONG" "lMax" } ;
194 TYPEDEF: DIPROPCAL* LPDIPROPCAL
195 TYPEDEF: DIPROPCAL* LPCDIPROPCAL
196 C-STRUCT: DIPROPGUIDANDPATH
197     { "DIPROPHEADER" "diph" }
198     { "GUID" "guidClass" }
199     { "WCHAR[260]"   "wszPath" } ;
200 TYPEDEF: DIPROPGUIDANDPATH* LPDIPROPGUIDANDPATH
201 TYPEDEF: DIPROPGUIDANDPATH* LPCDIPROPGUIDANDPATH
202 C-STRUCT: DIPROPSTRING
203     { "DIPROPHEADER" "diph" }
204     { "WCHAR[260]"   "wsz" } ;
205 TYPEDEF: DIPROPSTRING* LPDIPROPSTRING
206 TYPEDEF: DIPROPSTRING* LPCDIPROPSTRING
207 C-STRUCT: CPOINT
208     { "LONG" "lP" }
209     { "DWORD" "dwLog" } ;
210 C-STRUCT: DIPROPCPOINTS
211     { "DIPROPHEADER" "diph" }
212     { "DWORD" "dwCPointsNum" }
213     { "CPOINT[8]" "cp" } ;
214 TYPEDEF: DIPROPCPOINTS* LPDIPROPCPOINTS
215 TYPEDEF: DIPROPCPOINTS* LPCDIPROPCPOINTS
216 C-STRUCT: DIENVELOPE
217     { "DWORD" "dwSize" }
218     { "DWORD" "dwAttackLevel" }
219     { "DWORD" "dwAttackTime" }
220     { "DWORD" "dwFadeLevel" }
221     { "DWORD" "dwFadeTime" } ;
222 TYPEDEF: DIENVELOPE* LPDIENVELOPE
223 TYPEDEF: DIENVELOPE* LPCDIENVELOPE
224 C-STRUCT: DIEFFECT
225     { "DWORD" "dwSize" }
226     { "DWORD" "dwFlags" }
227     { "DWORD" "dwDuration" }
228     { "DWORD" "dwSamplePeriod" }
229     { "DWORD" "dwGain" }
230     { "DWORD" "dwTriggerButton" }
231     { "DWORD" "dwTriggerRepeatInterval" }
232     { "DWORD" "cAxes" }
233     { "LPDWORD" "rgdwAxes" }
234     { "LPLONG" "rglDirection" }
235     { "LPDIENVELOPE" "lpEnvelope" }
236     { "DWORD" "cbTypeSpecificParams" }
237     { "LPVOID" "lpvTypeSpecificParams" }
238     { "DWORD" "dwStartDelay" } ;
239 TYPEDEF: DIEFFECT* LPDIEFFECT
240 TYPEDEF: DIEFFECT* LPCDIEFFECT
241 C-STRUCT: DIEFFECTINFOW
242     { "DWORD"      "dwSize" }
243     { "GUID"       "guid" }
244     { "DWORD"      "dwEffType" }
245     { "DWORD"      "dwStaticParams" }
246     { "DWORD"      "dwDynamicParams" }
247     { "WCHAR[260]" "tszName" } ;
248 TYPEDEF: DIEFFECTINFOW* LPDIEFFECTINFOW
249 TYPEDEF: DIEFFECTINFOW* LPCDIEFFECTINFOW
250 C-STRUCT: DIEFFESCAPE
251     { "DWORD"  "dwSize" }
252     { "DWORD"  "dwCommand" }
253     { "LPVOID" "lpvInBuffer" }
254     { "DWORD"  "cbInBuffer" }
255     { "LPVOID" "lpvOutBuffer" }
256     { "DWORD"  "cbOutBuffer" } ;
257 TYPEDEF: DIEFFESCAPE* LPDIEFFESCAPE
258 TYPEDEF: DIEFFESCAPE* LPCDIEFFESCAPE
259 C-STRUCT: DIFILEEFFECT
260     { "DWORD"       "dwSize" }
261     { "GUID"        "GuidEffect" }
262     { "LPCDIEFFECT" "lpDiEffect" }
263     { "CHAR[260]"   "szFriendlyName" } ;
264 TYPEDEF: DIFILEEFFECT* LPDIFILEEFFECT
265 TYPEDEF: DIFILEEFFECT* LPCDIFILEEFFECT
266 C-STRUCT: DIDEVICEIMAGEINFOW
267     { "WCHAR[260]" "tszImagePath" }
268     { "DWORD"      "dwFlags" }
269     { "DWORD"      "dwViewID" }
270     { "RECT"       "rcOverlay" }
271     { "DWORD"      "dwObjID" }
272     { "DWORD"      "dwcValidPts" }
273     { "POINT[5]"   "rgptCalloutLine" }
274     { "RECT"       "rcCalloutRect" }
275     { "DWORD"      "dwTextAlign" } ;
276 TYPEDEF: DIDEVICEIMAGEINFOW* LPDIDEVICEIMAGEINFOW
277 TYPEDEF: DIDEVICEIMAGEINFOW* LPCDIDEVICEIMAGEINFOW
278 C-STRUCT: DIDEVICEIMAGEINFOHEADERW
279     { "DWORD" "dwSize" }
280     { "DWORD" "dwSizeImageInfo" }
281     { "DWORD" "dwcViews" }
282     { "DWORD" "dwcButtons" }
283     { "DWORD" "dwcAxes" }
284     { "DWORD" "dwcPOVs" }
285     { "DWORD" "dwBufferSize" }
286     { "DWORD" "dwBufferUsed" }
287     { "DIDEVICEIMAGEINFOW*" "lprgImageInfoArray" } ;
288 TYPEDEF: DIDEVICEIMAGEINFOHEADERW* LPDIDEVICEIMAGEINFOHEADERW
289 TYPEDEF: DIDEVICEIMAGEINFOHEADERW* LPCDIDEVICEIMAGEINFOHEADERW
290
291 C-STRUCT: DIMOUSESTATE2
292     { "LONG"    "lX" }
293     { "LONG"    "lY" }
294     { "LONG"    "lZ" }
295     { "BYTE[8]" "rgbButtons" } ;
296 TYPEDEF: DIMOUSESTATE2* LPDIMOUSESTATE2
297 TYPEDEF: DIMOUSESTATE2* LPCDIMOUSESTATE2
298
299 C-STRUCT: DIJOYSTATE2
300     { "LONG"      "lX" }
301     { "LONG"      "lY" }
302     { "LONG"      "lZ" }
303     { "LONG"      "lRx" }
304     { "LONG"      "lRy" }
305     { "LONG"      "lRz" }
306     { "LONG[2]"   "rglSlider" }
307     { "DWORD[4]"  "rgdwPOV" }
308     { "BYTE[128]" "rgbButtons" }
309     { "LONG"      "lVX" }
310     { "LONG"      "lVY" }
311     { "LONG"      "lVZ" }
312     { "LONG"      "lVRx" }
313     { "LONG"      "lVRy" }
314     { "LONG"      "lVRz" }
315     { "LONG[2]"   "rglVSlider" }
316     { "LONG"      "lAX" }
317     { "LONG"      "lAY" }
318     { "LONG"      "lAZ" }
319     { "LONG"      "lARx" }
320     { "LONG"      "lARy" }
321     { "LONG"      "lARz" }
322     { "LONG[2]"   "rglASlider" }
323     { "LONG"      "lFX" }
324     { "LONG"      "lFY" }
325     { "LONG"      "lFZ" }
326     { "LONG"      "lFRx" }
327     { "LONG"      "lFRy" }
328     { "LONG"      "lFRz" }
329     { "LONG[2]"   "rglFSlider" } ;
330 TYPEDEF: DIJOYSTATE2* LPDIJOYSTATE2
331 TYPEDEF: DIJOYSTATE2* LPCDIJOYSTATE2
332
333 COM-INTERFACE: IDirectInputEffect IUnknown {E7E1F7C0-88D2-11D0-9AD0-00A0C9A06E35}
334     HRESULT Initialize ( HINSTANCE hinst, DWORD dwVersion, REFGUID rguid )
335     HRESULT GetEffectGuid ( LPGUID pguid )
336     HRESULT GetParameters ( LPDIEFFECT peff, DWORD dwFlags )
337     HRESULT SetParameters ( LPCDIEFFECT peff, DWORD dwFlags )
338     HRESULT Start ( DWORD dwIterations, DWORD dwFlags )
339     HRESULT Stop ( )
340     HRESULT GetEffectStatus ( LPDWORD pdwFlags )
341     HRESULT Download ( )
342     HRESULT Unload ( )
343     HRESULT Escape ( LPDIEFFESCAPE pesc ) ;
344
345 COM-INTERFACE: IDirectInputDevice8W IUnknown {54D41081-DC15-4833-A41B-748F73A38179}
346     HRESULT GetCapabilities ( LPDIDEVCAPS lpDIDeviceCaps )
347     HRESULT EnumObjects ( LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags )
348     HRESULT GetProperty ( REFGUID rguidProp, LPDIPROPHEADER pdiph )
349     HRESULT SetProperty ( REFGUID rguidProp, LPCDIPROPHEADER pdiph )
350     HRESULT Acquire ( )
351     HRESULT Unacquire ( )
352     HRESULT GetDeviceState ( DWORD cbData, LPVOID lpvData )
353     HRESULT GetDeviceData ( DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags )
354     HRESULT SetDataFormat ( LPCDIDATAFORMAT lpdf )
355     HRESULT SetEventNotification ( HANDLE hEvent )
356     HRESULT SetCooperativeLevel ( HWND hwnd, DWORD dwFlags )
357     HRESULT GetObjectInfo ( LPDIDEVICEOBJECTINSTANCEW rdidoi, DWORD dwObj, DWORD dwHow )
358     HRESULT GetDeviceInfo ( LPDIDEVICEINSTANCEW pdidi )
359     HRESULT RunControlPanel ( HWND hwndOwner, DWORD dwFlags )
360     HRESULT Initialize ( HINSTANCE hinst, DWORD dwVersion, REFGUID rguid )
361     HRESULT CreateEffect ( REFGUID rguid, LPCDIEFFECT lpeff, IDirectInputEffect** ppdeff, LPUNKNOWN punkOuter )
362     HRESULT EnumEffects ( LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType )
363     HRESULT GetEffectInfo ( LPDIEFFECTINFOW pdei, REFGUID rguid )
364     HRESULT GetForceFeedbackState ( LPDWORD pdwOut )
365     HRESULT SendForceFeedbackCommand ( DWORD dwFlags )
366     HRESULT EnumCreatedEffectObjects ( LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl )
367     HRESULT Escape ( LPDIEFFESCAPE pesc )
368     HRESULT Poll ( )
369     HRESULT SendDeviceData ( DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl )
370     HRESULT EnumEffectsInFile ( LPCWSTR lpszFileName, LPDIENUMEFFECTSINFILECALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags )
371     HRESULT WriteEffectToFile ( LPCWSTR lpszFileName, DWORD dwEntries, LPDIFILEEFFECT rgDiFileEffect, DWORD dwFlags )
372     HRESULT BuildActionMap ( LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags )
373     HRESULT SetActionMap ( LPDIACTIONFORMATW lpdiActionFormat, LPCWSTR lpwszUserName, DWORD dwFlags )
374     HRESULT GetImageInfo ( LPDIDEVICEIMAGEINFOHEADERW lpdiDeviceImageInfoHeader ) ;
375
376 COM-INTERFACE: IDirectInput8W IUnknown {BF798031-483A-4DA2-AA99-5D64ED369700}
377     HRESULT CreateDevice ( REFGUID rguid, IDirectInputDevice8W** lplpDevice, LPUNKNOWN pUnkOuter )
378     HRESULT EnumDevices ( DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags )
379     HRESULT GetDeviceStatus ( REFGUID rguidInstance )
380     HRESULT RunControlPanel ( HWND hwndOwner, DWORD dwFlags )
381     HRESULT Initialize ( HINSTANCE hinst, DWORD dwVersion )
382     HRESULT FindDevice ( REFGUID rguidClass, LPCWSTR pwszName, LPGUID pguidInstance )
383     HRESULT EnumDevicesBySemantics ( LPCWSTR pwszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags )
384     HRESULT ConfigureDevices ( LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData ) ;
385
386 FUNCTION: HRESULT DirectInput8Create ( HINSTANCE hinst, DWORD dwVersion, REFIID riidtlf, LPVOID* ppvOut, LPUNKNOWN punkOuter ) ;
387
388 CONSTANT: DIRECTINPUT_VERSION HEX: 0800
389                                
390 CONSTANT: DI8DEVCLASS_ALL             0
391 CONSTANT: DI8DEVCLASS_DEVICE          1
392 CONSTANT: DI8DEVCLASS_POINTER         2
393 CONSTANT: DI8DEVCLASS_KEYBOARD        3
394 CONSTANT: DI8DEVCLASS_GAMECTRL        4
395
396 CONSTANT: DIEDFL_ALLDEVICES       HEX: 00000000
397 CONSTANT: DIEDFL_ATTACHEDONLY     HEX: 00000001
398 CONSTANT: DIEDFL_FORCEFEEDBACK    HEX: 00000100
399 CONSTANT: DIEDFL_INCLUDEALIASES   HEX: 00010000
400 CONSTANT: DIEDFL_INCLUDEPHANTOMS  HEX: 00020000
401 CONSTANT: DIEDFL_INCLUDEHIDDEN    HEX: 00040000
402                                                
403 CONSTANT: DIENUM_STOP             0
404 CONSTANT: DIENUM_CONTINUE         1
405
406 CONSTANT: DIDF_ABSAXIS            1
407 CONSTANT: DIDF_RELAXIS            2
408
409 CONSTANT: DIDFT_ALL           HEX: 00000000
410          
411 CONSTANT: DIDFT_RELAXIS       HEX: 00000001
412 CONSTANT: DIDFT_ABSAXIS       HEX: 00000002
413 CONSTANT: DIDFT_AXIS          HEX: 00000003
414          
415 CONSTANT: DIDFT_PSHBUTTON     HEX: 00000004
416 CONSTANT: DIDFT_TGLBUTTON     HEX: 00000008
417 CONSTANT: DIDFT_BUTTON        HEX: 0000000C
418          
419 CONSTANT: DIDFT_POV           HEX: 00000010
420 CONSTANT: DIDFT_COLLECTION    HEX: 00000040
421 CONSTANT: DIDFT_NODATA        HEX: 00000080
422          
423 CONSTANT: DIDFT_ANYINSTANCE   HEX: 00FFFF00
424 ALIAS: DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE
425 : DIDFT_MAKEINSTANCE ( n -- instance ) 8 shift                   ; inline
426 : DIDFT_GETTYPE      ( n -- type     ) HEX: FF bitand            ; inline
427 : DIDFT_GETINSTANCE  ( n -- instance ) -8 shift HEX: FFFF bitand ; inline
428 CONSTANT: DIDFT_FFACTUATOR        HEX: 01000000
429 CONSTANT: DIDFT_FFEFFECTTRIGGER   HEX: 02000000
430 CONSTANT: DIDFT_OUTPUT            HEX: 10000000
431 CONSTANT: DIDFT_VENDORDEFINED     HEX: 04000000
432 CONSTANT: DIDFT_ALIAS             HEX: 08000000
433 CONSTANT: DIDFT_OPTIONAL          HEX: 80000000
434
435 : DIDFT_ENUMCOLLECTION ( n -- instance ) 8 shift HEX: FFFF bitand ; inline
436 CONSTANT: DIDFT_NOCOLLECTION      HEX: 00FFFF00
437
438 CONSTANT: DIDOI_FFACTUATOR        HEX: 00000001
439 CONSTANT: DIDOI_FFEFFECTTRIGGER   HEX: 00000002
440 CONSTANT: DIDOI_POLLED            HEX: 00008000
441 CONSTANT: DIDOI_ASPECTPOSITION    HEX: 00000100
442 CONSTANT: DIDOI_ASPECTVELOCITY    HEX: 00000200
443 CONSTANT: DIDOI_ASPECTACCEL       HEX: 00000300
444 CONSTANT: DIDOI_ASPECTFORCE       HEX: 00000400
445 CONSTANT: DIDOI_ASPECTMASK        HEX: 00000F00
446 CONSTANT: DIDOI_GUIDISUSAGE       HEX: 00010000
447
448 CONSTANT: DISCL_EXCLUSIVE     HEX: 00000001
449 CONSTANT: DISCL_NONEXCLUSIVE  HEX: 00000002
450 CONSTANT: DISCL_FOREGROUND    HEX: 00000004
451 CONSTANT: DISCL_BACKGROUND    HEX: 00000008
452 CONSTANT: DISCL_NOWINKEY      HEX: 00000010
453
454 CONSTANT: DIK_ESCAPE          HEX: 01
455 CONSTANT: DIK_1               HEX: 02
456 CONSTANT: DIK_2               HEX: 03
457 CONSTANT: DIK_3               HEX: 04
458 CONSTANT: DIK_4               HEX: 05
459 CONSTANT: DIK_5               HEX: 06
460 CONSTANT: DIK_6               HEX: 07
461 CONSTANT: DIK_7               HEX: 08
462 CONSTANT: DIK_8               HEX: 09
463 CONSTANT: DIK_9               HEX: 0A
464 CONSTANT: DIK_0               HEX: 0B
465 CONSTANT: DIK_MINUS           HEX: 0C
466 CONSTANT: DIK_EQUALS          HEX: 0D
467 CONSTANT: DIK_BACK            HEX: 0E
468 CONSTANT: DIK_TAB             HEX: 0F
469 CONSTANT: DIK_Q               HEX: 10
470 CONSTANT: DIK_W               HEX: 11
471 CONSTANT: DIK_E               HEX: 12
472 CONSTANT: DIK_R               HEX: 13
473 CONSTANT: DIK_T               HEX: 14
474 CONSTANT: DIK_Y               HEX: 15
475 CONSTANT: DIK_U               HEX: 16
476 CONSTANT: DIK_I               HEX: 17
477 CONSTANT: DIK_O               HEX: 18
478 CONSTANT: DIK_P               HEX: 19
479 CONSTANT: DIK_LBRACKET        HEX: 1A
480 CONSTANT: DIK_RBRACKET        HEX: 1B
481 CONSTANT: DIK_RETURN          HEX: 1C
482 CONSTANT: DIK_LCONTROL        HEX: 1D
483 CONSTANT: DIK_A               HEX: 1E
484 CONSTANT: DIK_S               HEX: 1F
485 CONSTANT: DIK_D               HEX: 20
486 CONSTANT: DIK_F               HEX: 21
487 CONSTANT: DIK_G               HEX: 22
488 CONSTANT: DIK_H               HEX: 23
489 CONSTANT: DIK_J               HEX: 24
490 CONSTANT: DIK_K               HEX: 25
491 CONSTANT: DIK_L               HEX: 26
492 CONSTANT: DIK_SEMICOLON       HEX: 27
493 CONSTANT: DIK_APOSTROPHE      HEX: 28
494 CONSTANT: DIK_GRAVE           HEX: 29
495 CONSTANT: DIK_LSHIFT          HEX: 2A
496 CONSTANT: DIK_BACKSLASH       HEX: 2B
497 CONSTANT: DIK_Z               HEX: 2C
498 CONSTANT: DIK_X               HEX: 2D
499 CONSTANT: DIK_C               HEX: 2E
500 CONSTANT: DIK_V               HEX: 2F
501 CONSTANT: DIK_B               HEX: 30
502 CONSTANT: DIK_N               HEX: 31
503 CONSTANT: DIK_M               HEX: 32
504 CONSTANT: DIK_COMMA           HEX: 33
505 CONSTANT: DIK_PERIOD          HEX: 34
506 CONSTANT: DIK_SLASH           HEX: 35
507 CONSTANT: DIK_RSHIFT          HEX: 36
508 CONSTANT: DIK_MULTIPLY        HEX: 37
509 CONSTANT: DIK_LMENU           HEX: 38
510 CONSTANT: DIK_SPACE           HEX: 39
511 CONSTANT: DIK_CAPITAL         HEX: 3A
512 CONSTANT: DIK_F1              HEX: 3B
513 CONSTANT: DIK_F2              HEX: 3C
514 CONSTANT: DIK_F3              HEX: 3D
515 CONSTANT: DIK_F4              HEX: 3E
516 CONSTANT: DIK_F5              HEX: 3F
517 CONSTANT: DIK_F6              HEX: 40
518 CONSTANT: DIK_F7              HEX: 41
519 CONSTANT: DIK_F8              HEX: 42
520 CONSTANT: DIK_F9              HEX: 43
521 CONSTANT: DIK_F10             HEX: 44
522 CONSTANT: DIK_NUMLOCK         HEX: 45
523 CONSTANT: DIK_SCROLL          HEX: 46
524 CONSTANT: DIK_NUMPAD7         HEX: 47
525 CONSTANT: DIK_NUMPAD8         HEX: 48
526 CONSTANT: DIK_NUMPAD9         HEX: 49
527 CONSTANT: DIK_SUBTRACT        HEX: 4A
528 CONSTANT: DIK_NUMPAD4         HEX: 4B
529 CONSTANT: DIK_NUMPAD5         HEX: 4C
530 CONSTANT: DIK_NUMPAD6         HEX: 4D
531 CONSTANT: DIK_ADD             HEX: 4E
532 CONSTANT: DIK_NUMPAD1         HEX: 4F
533 CONSTANT: DIK_NUMPAD2         HEX: 50
534 CONSTANT: DIK_NUMPAD3         HEX: 51
535 CONSTANT: DIK_NUMPAD0         HEX: 52
536 CONSTANT: DIK_DECIMAL         HEX: 53
537 CONSTANT: DIK_OEM_102         HEX: 56
538 CONSTANT: DIK_F11             HEX: 57
539 CONSTANT: DIK_F12             HEX: 58
540 CONSTANT: DIK_F13             HEX: 64
541 CONSTANT: DIK_F14             HEX: 65
542 CONSTANT: DIK_F15             HEX: 66
543 CONSTANT: DIK_KANA            HEX: 70
544 CONSTANT: DIK_ABNT_C1         HEX: 73
545 CONSTANT: DIK_CONVERT         HEX: 79
546 CONSTANT: DIK_NOCONVERT       HEX: 7B
547 CONSTANT: DIK_YEN             HEX: 7D
548 CONSTANT: DIK_ABNT_C2         HEX: 7E
549 CONSTANT: DIK_NUMPADEQUALS    HEX: 8D
550 CONSTANT: DIK_PREVTRACK       HEX: 90
551 CONSTANT: DIK_AT              HEX: 91
552 CONSTANT: DIK_COLON           HEX: 92
553 CONSTANT: DIK_UNDERLINE       HEX: 93
554 CONSTANT: DIK_KANJI           HEX: 94
555 CONSTANT: DIK_STOP            HEX: 95
556 CONSTANT: DIK_AX              HEX: 96
557 CONSTANT: DIK_UNLABELED       HEX: 97
558 CONSTANT: DIK_NEXTTRACK       HEX: 99
559 CONSTANT: DIK_NUMPADENTER     HEX: 9C
560 CONSTANT: DIK_RCONTROL        HEX: 9D
561 CONSTANT: DIK_MUTE            HEX: A0
562 CONSTANT: DIK_CALCULATOR      HEX: A1
563 CONSTANT: DIK_PLAYPAUSE       HEX: A2
564 CONSTANT: DIK_MEDIASTOP       HEX: A4
565 CONSTANT: DIK_VOLUMEDOWN      HEX: AE
566 CONSTANT: DIK_VOLUMEUP        HEX: B0
567 CONSTANT: DIK_WEBHOME         HEX: B2
568 CONSTANT: DIK_NUMPADCOMMA     HEX: B3
569 CONSTANT: DIK_DIVIDE          HEX: B5
570 CONSTANT: DIK_SYSRQ           HEX: B7
571 CONSTANT: DIK_RMENU           HEX: B8
572 CONSTANT: DIK_PAUSE           HEX: C5
573 CONSTANT: DIK_HOME            HEX: C7
574 CONSTANT: DIK_UP              HEX: C8
575 CONSTANT: DIK_PRIOR           HEX: C9
576 CONSTANT: DIK_LEFT            HEX: CB
577 CONSTANT: DIK_RIGHT           HEX: CD
578 CONSTANT: DIK_END             HEX: CF
579 CONSTANT: DIK_DOWN            HEX: D0
580 CONSTANT: DIK_NEXT            HEX: D1
581 CONSTANT: DIK_INSERT          HEX: D2
582 CONSTANT: DIK_DELETE          HEX: D3
583 CONSTANT: DIK_LWIN            HEX: DB
584 CONSTANT: DIK_RWIN            HEX: DC
585 CONSTANT: DIK_APPS            HEX: DD
586 CONSTANT: DIK_POWER           HEX: DE
587 CONSTANT: DIK_SLEEP           HEX: DF
588 CONSTANT: DIK_WAKE            HEX: E3
589 CONSTANT: DIK_WEBSEARCH       HEX: E5
590 CONSTANT: DIK_WEBFAVORITES    HEX: E6
591 CONSTANT: DIK_WEBREFRESH      HEX: E7
592 CONSTANT: DIK_WEBSTOP         HEX: E8
593 CONSTANT: DIK_WEBFORWARD      HEX: E9
594 CONSTANT: DIK_WEBBACK         HEX: EA
595 CONSTANT: DIK_MYCOMPUTER      HEX: EB
596 CONSTANT: DIK_MAIL            HEX: EC
597 CONSTANT: DIK_MEDIASELECT     HEX: ED
598
599 ALIAS: DIK_BACKSPACE       DIK_BACK
600 ALIAS: DIK_NUMPADSTAR      DIK_MULTIPLY
601 ALIAS: DIK_LALT            DIK_LMENU
602 ALIAS: DIK_CAPSLOCK        DIK_CAPITAL
603 ALIAS: DIK_NUMPADMINUS     DIK_SUBTRACT
604 ALIAS: DIK_NUMPADPLUS      DIK_ADD
605 ALIAS: DIK_NUMPADPERIOD    DIK_DECIMAL
606 ALIAS: DIK_NUMPADSLASH     DIK_DIVIDE
607 ALIAS: DIK_RALT            DIK_RMENU
608 ALIAS: DIK_UPARROW         DIK_UP
609 ALIAS: DIK_PGUP            DIK_PRIOR
610 ALIAS: DIK_LEFTARROW       DIK_LEFT
611 ALIAS: DIK_RIGHTARROW      DIK_RIGHT
612 ALIAS: DIK_DOWNARROW       DIK_DOWN
613 ALIAS: DIK_PGDN            DIK_NEXT
614
615 ALIAS: DIK_CIRCUMFLEX      DIK_PREVTRACK
616
617 CONSTANT: DI8DEVTYPE_DEVICE           HEX: 11
618 CONSTANT: DI8DEVTYPE_MOUSE            HEX: 12
619 CONSTANT: DI8DEVTYPE_KEYBOARD         HEX: 13
620 CONSTANT: DI8DEVTYPE_JOYSTICK         HEX: 14
621 CONSTANT: DI8DEVTYPE_GAMEPAD          HEX: 15
622 CONSTANT: DI8DEVTYPE_DRIVING          HEX: 16
623 CONSTANT: DI8DEVTYPE_FLIGHT           HEX: 17
624 CONSTANT: DI8DEVTYPE_1STPERSON        HEX: 18
625 CONSTANT: DI8DEVTYPE_DEVICECTRL       HEX: 19
626 CONSTANT: DI8DEVTYPE_SCREENPOINTER    HEX: 1A
627 CONSTANT: DI8DEVTYPE_REMOTE           HEX: 1B
628 CONSTANT: DI8DEVTYPE_SUPPLEMENTAL     HEX: 1C
629
630 : GET_DIDEVICE_TYPE ( dwType -- type ) HEX: FF bitand ; inline
631
632 CONSTANT: DIPROPRANGE_NOMIN       HEX: 80000000
633 CONSTANT: DIPROPRANGE_NOMAX       HEX: 7FFFFFFF
634 CONSTANT: MAXCPOINTSNUM           8
635
636 CONSTANT: DIPH_DEVICE             0
637 CONSTANT: DIPH_BYOFFSET           1
638 CONSTANT: DIPH_BYID               2
639 CONSTANT: DIPH_BYUSAGE            3
640                                    
641 : DIMAKEUSAGEDWORD ( UsagePage Usage -- DWORD ) 16 shift bitor ; inline
642
643 : DIPROP_BUFFERSIZE ( -- alien ) 1 <alien> ; inline
644 : DIPROP_AXISMODE   ( -- alien ) 2 <alien> ; inline
645
646 CONSTANT: DIPROPAXISMODE_ABS      0
647 CONSTANT: DIPROPAXISMODE_REL      1
648                                    
649 : DIPROP_GRANULARITY ( -- alien ) 3 <alien> ; inline
650 : DIPROP_RANGE       ( -- alien ) 4 <alien> ; inline
651 : DIPROP_DEADZONE    ( -- alien ) 5 <alien> ; inline
652 : DIPROP_SATURATION  ( -- alien ) 6 <alien> ; inline
653 : DIPROP_FFGAIN      ( -- alien ) 7 <alien> ; inline
654 : DIPROP_FFLOAD      ( -- alien ) 8 <alien> ; inline
655 : DIPROP_AUTOCENTER  ( -- alien ) 9 <alien> ; inline
656
657 CONSTANT: DIPROPAUTOCENTER_OFF    0
658 CONSTANT: DIPROPAUTOCENTER_ON     1
659
660 : DIPROP_CALIBRATIONMODE ( -- alien ) 10 <alien> ; inline
661
662 CONSTANT: DIPROPCALIBRATIONMODE_COOKED    0
663 CONSTANT: DIPROPCALIBRATIONMODE_RAW       1
664
665 : DIPROP_CALIBRATION ( -- alien )        11 <alien> ; inline
666 : DIPROP_GUIDANDPATH ( -- alien )        12 <alien> ; inline
667 : DIPROP_INSTANCENAME ( -- alien )       13 <alien> ; inline
668 : DIPROP_PRODUCTNAME ( -- alien )        14 <alien> ; inline
669 : DIPROP_JOYSTICKID ( -- alien )         15 <alien> ; inline
670 : DIPROP_GETPORTDISPLAYNAME ( -- alien ) 16 <alien> ; inline
671 : DIPROP_PHYSICALRANGE ( -- alien )      18 <alien> ; inline
672 : DIPROP_LOGICALRANGE ( -- alien )       19 <alien> ; inline
673 : DIPROP_KEYNAME ( -- alien )            20 <alien> ; inline
674 : DIPROP_CPOINTS ( -- alien )            21 <alien> ; inline
675 : DIPROP_APPDATA ( -- alien )            22 <alien> ; inline
676 : DIPROP_SCANCODE ( -- alien )           23 <alien> ; inline
677 : DIPROP_VIDPID ( -- alien )             24 <alien> ; inline
678 : DIPROP_USERNAME ( -- alien )           25 <alien> ; inline
679 : DIPROP_TYPENAME ( -- alien )           26 <alien> ; inline
680
681 CONSTANT: GUID_XAxis          GUID: {A36D02E0-C9F3-11CF-BFC7-444553540000}
682 CONSTANT: GUID_YAxis          GUID: {A36D02E1-C9F3-11CF-BFC7-444553540000}
683 CONSTANT: GUID_ZAxis          GUID: {A36D02E2-C9F3-11CF-BFC7-444553540000}
684 CONSTANT: GUID_RxAxis         GUID: {A36D02F4-C9F3-11CF-BFC7-444553540000}
685 CONSTANT: GUID_RyAxis         GUID: {A36D02F5-C9F3-11CF-BFC7-444553540000}
686 CONSTANT: GUID_RzAxis         GUID: {A36D02E3-C9F3-11CF-BFC7-444553540000}
687 CONSTANT: GUID_Slider         GUID: {A36D02E4-C9F3-11CF-BFC7-444553540000}
688 CONSTANT: GUID_Button         GUID: {A36D02F0-C9F3-11CF-BFC7-444553540000}
689 CONSTANT: GUID_Key            GUID: {55728220-D33C-11CF-BFC7-444553540000}
690 CONSTANT: GUID_POV            GUID: {A36D02F2-C9F3-11CF-BFC7-444553540000}
691 CONSTANT: GUID_Unknown        GUID: {A36D02F3-C9F3-11CF-BFC7-444553540000}
692 CONSTANT: GUID_SysMouse       GUID: {6F1D2B60-D5A0-11CF-BFC7-444553540000}
693 CONSTANT: GUID_SysKeyboard    GUID: {6F1D2B61-D5A0-11CF-BFC7-444553540000}
694 CONSTANT: GUID_Joystick       GUID: {6F1D2B70-D5A0-11CF-BFC7-444553540000}
695 CONSTANT: GUID_SysMouseEm     GUID: {6F1D2B80-D5A0-11CF-BFC7-444553540000}
696 CONSTANT: GUID_SysMouseEm2    GUID: {6F1D2B81-D5A0-11CF-BFC7-444553540000}
697 CONSTANT: GUID_SysKeyboardEm  GUID: {6F1D2B82-D5A0-11CF-BFC7-444553540000}
698 CONSTANT: GUID_SysKeyboardEm2 GUID: {6F1D2B83-D5A0-11CF-BFC7-444553540000}