2010-01-20 08:02:48 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								USING: accessors alien alien.c-types alien.strings arrays assocs
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								byte-arrays combinators combinators.short-circuit continuations
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								game.input game.input.dinput.keys-array io.encodings.utf16
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								io.encodings.utf16n kernel locals math math.bitwise
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								math.rectangles namespaces parser sequences shuffle
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								specialized-arrays ui.backend.windows vectors windows.com
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								windows.directx.dinput windows.directx.dinput.constants
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								windows.kernel32 windows.messages windows.ole32 windows.errors
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								windows.user32 classes.struct alien.data ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-09 23:33:34 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								SPECIALIZED-ARRAY: DIDEVICEOBJECTDATA
							 | 
						
					
						
							
								
									
										
										
										
											2009-10-08 02:42:54 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								IN: game.input.dinput
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-09 23:33:34 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								CONSTANT: MOUSE-BUFFER-SIZE 16
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								SINGLETON: dinput-game-input-backend
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-12-16 02:33:51 -05:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								dinput-game-input-backend game-input-backend set-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								SYMBOLS: +dinput+ +keyboard-device+ +keyboard-state+
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +controller-devices+ +controller-guids+
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +device-change-window+ +device-change-handle+
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +mouse-device+ +mouse-state+ +mouse-buffer+ ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: create-dinput ( -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f GetModuleHandle DIRECTINPUT_VERSION IDirectInput8W-iid
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f <void*> [ f DirectInput8Create ole32-error ] keep *void*
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +dinput+ set-global ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: delete-dinput ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-30 22:38:14 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +dinput+ [ com-release f ] change-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-for-guid ( guid -- device )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +dinput+ get swap f <void*>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ f IDirectInput8W::CreateDevice ole32-error ] keep *void* ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: set-coop-level ( device -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +device-change-window+ get DISCL_BACKGROUND DISCL_NONEXCLUSIVE bitor
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    IDirectInputDevice8W::SetCooperativeLevel ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: set-data-format ( device format-symbol -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    get IDirectInputDevice8W::SetDataFormat ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: <buffer-size-diprop> ( size -- DIPROPDWORD )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    DIPROPDWORD <struct> [
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        diph>>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIPROPDWORD heap-size  >>dwSize
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIPROPHEADER heap-size >>dwHeaderSize
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        0           >>dwObj
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIPH_DEVICE >>dwHow
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        drop
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ] keep swap >>dwData ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: set-buffer-size ( device size -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    DIPROP_BUFFERSIZE swap <buffer-size-diprop>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    IDirectInputDevice8W::SetProperty ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: configure-keyboard ( keyboard -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ c_dfDIKeyboard_HID set-data-format ] [ set-coop-level ] bi ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: configure-mouse ( mouse -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ c_dfDIMouse2 set-data-format ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ MOUSE-BUFFER-SIZE set-buffer-size ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ set-coop-level ] tri ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: configure-controller ( controller -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ c_dfDIJoystick2 set-data-format ] [ set-coop-level ] bi ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-keyboard ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    GUID_SysKeyboard device-for-guid
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ configure-keyboard ]
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ +keyboard-device+ set-global ] bi
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    256 <byte-array> 256 <keys-array> keyboard-state boa
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +keyboard-state+ set-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-mouse ( -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    GUID_SysMouse device-for-guid
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-09 23:33:34 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ configure-mouse ] [ +mouse-device+ set-global ] bi
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    0 0 0 0 8 f <array> mouse-state boa +mouse-state+ set-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    MOUSE-BUFFER-SIZE <DIDEVICEOBJECTDATA-array> +mouse-buffer+ set-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-info ( device -- DIDEVICEIMAGEINFOW )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    DIDEVICEINSTANCEW <struct>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIDEVICEINSTANCEW heap-size >>dwSize
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ IDirectInputDevice8W::GetDeviceInfo ole32-error ] keep ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-caps ( device -- DIDEVCAPS )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    DIDEVCAPS <struct>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIDEVCAPS heap-size >>dwSize
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ IDirectInputDevice8W::GetCapabilities ole32-error ] keep ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-guid ( device -- guid )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    device-info guidInstance>> ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-attached? ( device -- ? )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +dinput+ get swap device-guid
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    IDirectInput8W::GetDeviceStatus S_OK = ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-device-axes-callback ( -- alien )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ ! ( lpddoi pvRef -- BOOL )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 13:45:39 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ DIDEVICEOBJECTINSTANCEW memory>struct ] dip
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        +controller-devices+ get at
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        swap guidType>> {
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_XAxis = ] [ drop 0.0 >>x ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_YAxis = ] [ drop 0.0 >>y ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_ZAxis = ] [ drop 0.0 >>z ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_RxAxis = ] [ drop 0.0 >>rx ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_RyAxis = ] [ drop 0.0 >>ry ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_RzAxis = ] [ drop 0.0 >>rz ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            { [ dup GUID_Slider = ] [ drop 0.0 >>slider ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            [ drop ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        } cond drop
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIENUM_CONTINUE
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ] LPDIENUMDEVICEOBJECTSCALLBACKW ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-device-axes ( device controller-state -- controller-state )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    swap [ +controller-devices+ get set-at ] 2keep
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    find-device-axes-callback over DIDFT_AXIS
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    IDirectInputDevice8W::EnumObjects ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: controller-state-template ( device -- controller-state )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    controller-state new
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    over device-caps
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ dwButtons>> f <array> >>buttons ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ dwPOVs>> zero? f pov-neutral ? >>pov ] bi
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    find-device-axes ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-known? ( guid -- ? )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +controller-guids+ get key? ; inline
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: (add-controller) ( guid -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    device-for-guid {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ configure-controller ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ controller-state-template ]
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ dup device-guid clone +controller-guids+ get set-at ]
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ +controller-devices+ get set-at ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    } cleave ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: add-controller ( guid -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    dup device-known? [ drop ] [ (add-controller) ] if ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: remove-controller ( device -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ +controller-devices+ get delete-at ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ device-guid +controller-guids+ get delete-at ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ com-release ] tri ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-controller-callback ( -- alien )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ ! ( lpddi pvRef -- BOOL )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 13:45:39 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        drop DIDEVICEINSTANCEW memory>struct guidInstance>> add-controller
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DIENUM_CONTINUE
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ] LPDIENUMDEVICESCALLBACKW ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-controllers ( -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +dinput+ get DI8DEVCLASS_GAMECTRL find-controller-callback
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f DIEDFL_ATTACHEDONLY IDirectInput8W::EnumDevices ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: set-up-controllers ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-25 23:31:37 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    4 <vector> +controller-devices+ set-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    4 <vector> +controller-guids+ set-global
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    find-controllers ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: find-and-remove-detached-devices ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:29:11 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +controller-devices+ get keys
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ device-attached? not ] filter
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ remove-controller ] each ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-17 15:22:49 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: ?device-interface ( dbt-broadcast-hdr -- ? )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    dup dbch_devicetype>> DBT_DEVTYP_DEVICEINTERFACE =
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ >c-ptr DEV_BROADCAST_DEVICEW memory>struct ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ drop f ] if ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-arrived ( dbt-broadcast-hdr -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-17 15:22:49 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ?device-interface [ find-controllers ] when ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: device-removed ( dbt-broadcast-hdr -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-17 15:22:49 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ?device-interface [ find-and-remove-detached-devices ] when ; inline
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: <DEV_BROADCAST_HDR> ( wParam -- struct )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    <alien> DEV_BROADCAST_HDR memory>struct ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: handle-wm-devicechange ( hWnd uMsg wParam lParam -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ 2drop ] 2dip swap {
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-17 15:22:49 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        { [ dup DBT_DEVICEARRIVAL = ]         [ drop <DEV_BROADCAST_HDR> device-arrived ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        { [ dup DBT_DEVICEREMOVECOMPLETE = ]  [ drop <DEV_BROADCAST_HDR> device-removed ] }
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ 2drop ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    } cond ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								TUPLE: window-rect < rect window-loc ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: <zero-window-rect> ( -- window-rect )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    window-rect new
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    { 0 0 } >>window-loc
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    { 0 0 } >>loc
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    { 0 0 } >>dim ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: (device-notification-filter) ( -- DEV_BROADCAST_DEVICEW )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-27 22:43:29 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    DEV_BROADCAST_DEVICEW <struct>
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DEV_BROADCAST_DEVICEW heap-size >>dbcc_size
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DBT_DEVTYP_DEVICEINTERFACE >>dbcc_devicetype ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: create-device-change-window ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-06-18 12:41:34 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    <zero-window-rect> WS_OVERLAPPEDWINDOW 0 create-window
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        (device-notification-filter)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        DEVICE_NOTIFY_WINDOW_HANDLE DEVICE_NOTIFY_ALL_INTERFACE_CLASSES bitor
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        RegisterDeviceNotification
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        +device-change-handle+ set-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ +device-change-window+ set-global ] bi ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: close-device-change-window ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-30 22:38:14 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +device-change-handle+ [ UnregisterDeviceNotification drop f ] change-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +device-change-window+ [ DestroyWindow win32-error=0/f f ] change-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: add-wm-devicechange ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ 4dup handle-wm-devicechange DefWindowProc ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    WM_DEVICECHANGE add-wm-handler ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: remove-wm-devicechange ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    WM_DEVICECHANGE wm-handlers get-global delete-at ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: release-controllers ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-30 22:38:14 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +controller-devices+ [ [ drop com-release ] assoc-each f ] change-global
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f +controller-guids+ set-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: release-keyboard ( -- )
							 | 
						
					
						
							
								
									
										
										
										
											2009-04-30 22:38:14 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +keyboard-device+ [ com-release f ] change-global
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f +keyboard-state+ set-global ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: release-mouse ( -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +mouse-device+ [ com-release f ] change-global
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    f +mouse-state+ set-global ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 00:25:46 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend (open-game-input)
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    create-dinput
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    create-device-change-window
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    find-keyboard
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    find-mouse
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    set-up-controllers
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    add-wm-devicechange ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 00:25:46 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend (close-game-input)
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    remove-wm-devicechange
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    release-controllers
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    release-mouse
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    release-keyboard
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    close-device-change-window
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-20 21:04:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    delete-dinput ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-29 22:53:00 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend (reset-game-input)
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-27 22:43:29 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    global [
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            +dinput+ +keyboard-device+ +keyboard-state+
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            +controller-devices+ +controller-guids+
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								            +device-change-window+ +device-change-handle+
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        } [ off ] each
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ] bind ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-29 22:53:00 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend get-controllers
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +controller-devices+ get
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ drop controller boa ] { } assoc>map ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend product-string
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    handle>> device-info tszProductName>>
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    utf16n alien>string ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend product-id
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 13:45:39 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    handle>> device-info guidProduct>> ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend instance-id
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    handle>> device-guid ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 15:15:23 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								:: with-acquisition ( device acquired-quot succeeded-quot failed-quot -- result/f )
							 | 
						
					
						
							
								
									
										
										
										
											2009-09-28 20:53:46 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    device { [ ] [ IDirectInputDevice8W::Acquire succeeded? ] } 1&& [
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 23:02:06 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        device acquired-quot call
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 15:15:23 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        succeeded-quot call
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    ] failed-quot if ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-02-26 00:30:30 -05:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								CONSTANT: pov-values
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    {
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        pov-up pov-up-right pov-right pov-down-right
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        pov-down pov-down-left pov-left pov-up-left
							 | 
						
					
						
							
								
									
										
										
										
											2009-02-26 00:30:30 -05:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: >axis ( long -- float )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    32767 - 32767.0 /f ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: >slider ( long -- float )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    65535.0 /f ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: >pov ( long -- symbol )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:35:29 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    dup HEX: FFFF bitand HEX: FFFF =
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ drop pov-neutral ]
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ 2750 + 4500 /i pov-values nth ] if ; inline
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:35:29 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: (fill-if) ( controller-state DIJOYSTATE2 ? quot -- )
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ drop ] compose [ 2drop ] if ; inline
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: fill-controller-state ( controller-state DIJOYSTATE2 -- controller-state )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    {
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over x>> [ lX>> >axis >>x ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over y>> [ lY>> >axis >>y ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over z>> [ lZ>> >axis >>z ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over rx>> [ lRx>> >axis >>rx ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over ry>> [ lRy>> >axis >>ry ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over rz>> [ lRz>> >axis >>rz ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over slider>> [ rglSlider>> first >slider >>slider ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ over pov>> [ rgdwPOV>> first >pov >>pov ] (fill-if) ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ rgbButtons>> over buttons>> length <keys-array> >>buttons ]
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:35:29 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    } 2cleave ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: read-device-buffer ( device buffer count -- buffer count' )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ DIDEVICEOBJECTDATA heap-size ] 2dip <uint>
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ 0 IDirectInputDevice8W::GetDeviceData ole32-error ] 2keep *uint ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 21:36:15 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: (fill-mouse-state) ( state DIDEVICEOBJECTDATA -- state )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ dwData>> 32 >signed ] [ dwOfs>> ] bi {
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 21:36:15 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        { DIMOFS_X [ [ + ] curry change-dx ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        { DIMOFS_Y [ [ + ] curry change-dy ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        { DIMOFS_Z [ [ + ] curry change-scroll-dy ] }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        [ [ c-bool> ] [ DIMOFS_BUTTON0 - ] bi* rot [ buttons>> set-nth ] keep ]
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    } case ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 21:36:15 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: fill-mouse-state ( buffer count -- state )
							 | 
						
					
						
							
								
									
										
										
										
											2010-01-21 21:39:23 -05:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    iota [ +mouse-state+ get ] 2dip swap [ nth (fill-mouse-state) ] curry each ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 13:45:39 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: get-device-state ( device DIJOYSTATE2 -- )
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-24 00:07:47 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ dup IDirectInputDevice8W::Poll ole32-error ] dip
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 13:45:39 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ byte-length ] keep
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    IDirectInputDevice8W::GetDeviceState ole32-error ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 15:15:23 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								: (read-controller) ( handle template -- state )
							 | 
						
					
						
							
								
									
										
										
										
											2009-08-31 12:31:01 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    swap [ DIJOYSTATE2 <struct> [ get-device-state ] keep ]
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 15:15:23 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ fill-controller-state ] [ drop f ] with-acquisition ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend read-controller
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-26 15:15:23 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    handle>> dup +controller-devices+ get at
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ (read-controller) ] [ drop f ] if* ;
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-22 22:55:22 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend calibrate-controller
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    handle>> f 0 IDirectInputDevice8W::RunControlPanel ole32-error ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend read-keyboard
							 | 
						
					
						
							
								
									
										
										
										
											2008-07-27 01:20:17 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +keyboard-device+ get
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ +keyboard-state+ get [ keys>> underlying>> get-device-state ] keep ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ ] [ f ] with-acquisition ;
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 10:45:43 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend read-mouse
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +mouse-device+ get [ +mouse-buffer+ get MOUSE-BUFFER-SIZE read-device-buffer ]
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ fill-mouse-state ] [ f ] with-acquisition ;
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								M: dinput-game-input-backend reset-mouse
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +mouse-device+ get [ f MOUSE-BUFFER-SIZE read-device-buffer ]
							 | 
						
					
						
							
								
									
										
										
										
											2009-05-05 21:36:15 -04:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    [ 2drop ] [ ] with-acquisition
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    +mouse-state+ get
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        0 >>dx
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        0 >>dy
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        0 >>scroll-dx
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        0 >>scroll-dy
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								        drop ;
							 |