Code archives/User Input/Human Input Library

This code has been declared by its author to be Public Domain code.

Download source code

Human Input Library by Dabbede2004
It's simple and messy but take a look anyway because I think it could be useful! Please report me any grammar error... Thanks!
;;===============================;;
;;===============================;;
;;				 ;;
;; Human Input Library		 ;;
;;				 ;;
;;	by Dabbede		 ;;
;;				 ;;
;;			         ;;
;;	10/07/2004	v. 1.0	 ;;
;;				 ;;
;;===============================;;
;;===============================;;
;;		 		 ;;
;; The easiest way to handle 	 ;;
;; player's inputs like		 ;;
;; keyboard, joypad or mouse	 ;;
;;	 			 ;;
;;===============================;;
;;===============================;;


Type HIL_Key				; Any input type
	Field Typ				; 0=none	1=keyb	2=joy	3=mouse
	Field Value				; Keyboard:
							;	Value = scancode
							; Joystick:
							;	Value(>0)  = button#
							;	Value(-1)  = x-axis +
							;	Value(-2)  = x-axis -
							;	Value(-3)  = y-axis +
							;	Value(-4)  = y-axis -
							;	Value(-5)  = z-axis +
							;	Value(-6)  = z-axis -
							;	Value(-7)  = u-axis +
							;	Value(-8)  = u-axis -
							;	Value(-9)  = v-axis +
							;	Value(-10) = v-axis -
							;	Value(-11) = pitch  +
							;	Value(-12) = pitch  -
							;	Value(-13) = yaw    +
							;	Value(-14) = yaw    -
							;	Value(-15) = roll   +
							;	Value(-16) = roll   -
							; Mouse:
							;	Value=button#
End Type

Dim HIL_scancodes$(238)		; Array with keyboard scancodes
Global HIL_SpecialJoystick = False	;True if you want to use JoyZ\U\V\Pitch\Yaw\Roll
Const HIL_MaxJoyButtons = 30


; Initialization ==================
Restore HIL_Scancodes
For i=1 To 237
	Read  HIL_scancodes$(i)
Next









; Little example ==================
Print "Choose the key to exit"
quit.HIL_Key=HIL_NewKey()
HIL_FlushAnyKeys()
Cls
Locate 0,0
Print "Press some keys..."
temp.HIL_Key=HIL_NewKey()
While (temp\typ<>quit\typ) Or (temp\value<>quit\value)
	Print HIL_KeyLabel(temp)+" is the wrong key... retry!"
	HIL_ModifyKey(temp)
Wend
Print "Ok!"
Cls
HIL_TestJoy()
End











Function HIL_AnyKeyHit()
	quit=False
	
	;Keyboard
	For i=1 To 237
		If KeyHit(i) Then quit=1
	Next
	
	;Joystick
	For i=1 To HIL_MaxJoyButtons
		If JoyHit(i) Then quit=2
	Next	
	If (JoyXDir() Or JoyYDir()) Then quit=2
	If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2
	
	;Mouse
	For i=1 To 3	
		If MouseHit(i) Then quit=3
	Next
	
	Return quit
End Function

Function HIL_AnyKeyDown()	; Not very useful
	quit=False
	
	;Keyboard
	For i=1 To 237
		If KeyDown(i) Then quit=1
	Next
	
	;Joystick
	For i=1 To HIL_MaxJoyButtons
		If JoyDown(i) Then quit=2
	Next	
	If (JoyXDir() Or JoyYDir()) Then quit=2
	If HIL_SpecialJoystick And (JoyZDir() Or JoyUDir() Or JoyVDir() Or Int(JoyPitch()/180) Or Int(JoyYaw()/180) Or Int(JoyRoll()/180)) Then quit=2
	
	;Mouse
	For i=1 To 3	
		If MouseDown(i) Then quit=3
	Next
	
	Return quit
End Function

Function HIL_GetValue(typ)
	Select typ
		Case 1 
			For i=1 To 237
				If KeyDown(i) Then Return i
			Next
		Case 2
			For i=1 To HIL_MaxJoyButtons
				If JoyDown(i) Then Return i
			Next
			If JoyXDir()=+1 Return -1
			If JoyXDir()=-1 Return -2
			If JoyYDir()=+1 Return -3
			If JoyYDir()=-1 Return -4
			If HIL_SpecialJoystick Then
				If JoyZDir()=+1 Return -5
				If JoyZDir()=-1 Return -6
				If JoyUDir()=+1 Return -7
				If JoyUDir()=-1 Return -8
				If JoyVDir()=+1 Return -9
				If JoyVDir()=-1 Return -10
				If Int(JoyPitch()/180)=+1 Return -11
				If Int(JoyPitch()/180)=-1 Return -12
				If Int(JoyYaw()  /180)=+1 Return -13
				If Int(JoyYaw()  /180)=-1 Return -14
				If Int(JoyRoll() /180)=+1 Return -15
				If Int(JoyRoll() /180)=-1 Return -16
			EndIf
		Case 3
			For i=1 To 3	
				If MouseDown(i) Then Return i
			Next
		Default
			Return 0
	End Select
End Function

Function HIL_NewKey.HIL_Key()
	key.HIL_Key = New HIL_Key
	
	Repeat
		t = HIL_AnyKeyHit()
	Until t
	
	key\Typ = t
	key\value = HIL_GetValue(t)
	
	Return key
End Function

Function HIL_ModifyKey.HIL_Key(key.HIL_Key)
	If key=Null Then 
		key = New HIL_Key
	EndIf
	
	Repeat
		t = HIL_AnyKeyHit()
	Until t
	
	key\Typ = t
	key\value = HIL_GetValue(t)
End Function

Function HIL_KeyDown(key.HIL_Key)
	If key=Null Return False
	
	Select key\Typ
		Case 1
			If KeyDown(key\Value) Return True
		
		Case 2
			Select key\Value
				Case 0
					Return False
				Case -1
					If JoyXDir()=+1 Return True
				Case -2
					If JoyXDir()=-1 Return True
				Case -3
					If JoyYDir()=+1 Return True
				Case -4
					If JoyYDir()=-1 Return True
				Case -5
					If JoyZDir()=+1 Return True
				Case -6
					If JoyZDir()=-1 Return True
				Case -7
					If JoyUDir()=+1 Return True
				Case -8
					If JoyUDir()=-1 Return True
				Case -9
					If JoyVDir()=+1 Return True
				Case -10
					If JoyVDir()=-1 Return True
				Case -11
					If Int(JoyPitch()/180)=+1 Return True
				Case -12
					If Int(JoyPitch()/180)=-1 Return True
				Case -13
					If Int(JoyYaw()  /180)=+1 Return True
				Case -14
					If Int(JoyYaw()  /180)=-1 Return True
				Case -15
					If Int(JoyRoll() /180)=+1 Return True
				Case -16
					If Int(JoyRoll() /180)=-1 Return True
				Default
					If JoyDown(key\Value) Return True
			End Select
		
		Case 3
			If MouseDown(key\Value) Return True
	End Select
	
	Return False
End Function

Function HIL_KeyHit(key.HIL_Key)
	If key=Null Return False
	
	Select key\Typ
		Case 1
			If KeyHit(key\Value) Return True
		
		Case 2
			Select key\Value
				Case 0
					Return False
				Case -1
					If JoyXDir()=+1 Return True
				Case -2
					If JoyXDir()=-1 Return True
				Case -3
					If JoyYDir()=+1 Return True
				Case -4
					If JoyYDir()=-1 Return True
				Case -5
					If JoyZDir()=+1 Return True
				Case -6
					If JoyZDir()=-1 Return True
				Case -7
					If JoyUDir()=+1 Return True
				Case -8
					If JoyUDir()=-1 Return True
				Case -9
					If JoyVDir()=+1 Return True
				Case -10
					If JoyVDir()=-1 Return True
				Case -11
					If Int(JoyPitch()/180)=+1 Return True
				Case -12
					If Int(JoyPitch()/180)=-1 Return True
				Case -13
					If Int(JoyYaw()  /180)=+1 Return True
				Case -14
					If Int(JoyYaw()  /180)=-1 Return True
				Case -15
					If Int(JoyRoll() /180)=+1 Return True
				Case -16
					If Int(JoyRoll() /180)=-1 Return True
				Default
					If JoyHit(key\Value) Return True
			End Select
		
		Case 3
			If MouseHit(key\Value) Return True
	End Select
	
	Return False
End Function

Function HIL_WaitAnyKey()
	While Not HIL_AnyKeyHit()
	Wend
End Function

Function HIL_FlushAnyKeys()
	FlushKeys
	FlushMouse
	FlushJoy
End Function

Function HIL_KeyLabel$(key.HIL_Key)
	If key=Null	Return ""
	
	Select key\typ
		Case 1
			Return HIL_scancodes$(key\value)
		Case 2
			Select key\value
				Case 0
					Return "Joystick button"
				Case -1
					Return "Joystick x-axis (+)"
				Case -2
					Return "Joystick x-axis (-)"
				Case -3
					Return "Joystick y-axis (+)"
				Case -4
					Return "Joystick y-axis (-)"
				Case -5
					Return "Joystick z-axis (+)"
				Case -6
					Return "Joystick z-axis (-)"
				Case -7
					Return "Joystick u-axis (+)"
				Case -8
					Return "Joystick u-axis (-)"
				Case -9
					Return "Joystick v-axis (+)"
				Case -10
					Return "Joystick v-axis (-)"
				Case -11
					Return "Joystick pitch (+)"
				Case -12
					Return "Joystick pitch (-)"
				Case -13
					Return "Joystick yaw (+)"
				Case -14
					Return "Joystick yaw (-)"
				Case -15
					Return "Joystick roll (+)"
				Case -16
					Return "Joystick roll (-)"
				Default
					Return "Joystick button "+key\value
			End Select
		Case 3
			Select key\value
				Case 1
					Return "Left Mouse button"
				Case 2
					Return "Right Mouse button"
				Case 3
					Return "Middle Mouse button"
				Default
					Return "Mouse button"
			End Select
		Default
			Return ""
	End Select
End Function

Function HIL_TestJoy()
	While Not KeyDown(1)
		; Output joystick values
		Text 0,0,"Move joystick to output values onto screen"
		Text 0,20, "JoyXDir(): "+JoyXDir()
		Text 0,40, "JoyYDir(): "+JoyYDir()
		Text 0,60, "JoyZDir(): "+JoyZDir()
		Text 0,80, "JoyUDir(): "+JoyUDir()
		Text 0,100,"JoyVDir(): "+JoyVDir()
		Text 0,120,"JoyPitchDir(): "+Int(JoyPitch()/180)
		Text 0,140,"JoyYawDir(): "+Int(JoyYaw()/180)
		Text 0,160,"JoyRollDir(): "+Int(JoyRoll()/180)
	
		Flip
		Cls
	Wend
End Function













.HIL_Scancodes
Data "ESCAPE"
Data "1"  
Data "2"
Data "3"
Data "4"
Data "5"
Data "6"
Data "7"
Data "8"
Data "9"
Data "0"
Data "Minus (-)"			;On Main Keyboard 
Data "Equals (=)"
Data "Backspace"			;Backspace key
Data "Tab"
Data "Q"
Data "W"
Data "E"
Data "R"
Data "T"
Data "Y"
Data "U"
Data "I"
Data "O"
Data "P"
Data "Left Bracket ([)"
Data "Right Bracket (])"
Data "Return/Enter"			;Return/Enter on Main Keyboard
Data "Left Control"
Data "A"
Data "S"
Data "D"
Data "F"
Data "G"
Data "H"
Data "J"
Data "K"
Data "L"
Data "Semi-Colon (;)"
Data "Apostrophe (')"
Data "Grave"				;Accent Grave
Data "Left Shift"
Data "Backslash (\)"
Data "Z"
Data "X"
Data "C"
Data "V"
Data "B"
Data "N"
Data "M"
Data "Comma (,)"
Data "Period (.)"			;On Main keyboard
Data "Slash (/)"			;On Main Keyboard
Data "Right Shift"
Data "Multiply (*)"			;On Numeric Keypad
Data "Left Alt/Menu"
Data "Space"
Data "Capital"
Data "F1"
Data "F2"
Data "F3"
Data "F4"
Data "F5"
Data "F6"
Data "F7"
Data "F8"
Data "F9"
Data "F10"
Data "NumLock"
Data "Scroll Lock"
Data "NumPad 7"
Data "NumPad 8"
Data "NumPad 9"
Data "Subtract (-)"			;On Numeric Keypad
Data "NumPad 4"
Data "NumPad 5"
Data "NumPad 6"
Data "Add (+)"				;On Numeric Keypad
Data "NumPad 1"
Data "NumPad 2"
Data "NumPad 3"
Data "NumPad 0"
Data "Decimal (.)"			;On Numeric Keypad
Data "Unknown"
Data "Unknown"
Data "OEM_102"				;On UK/Germany Keyboards 
Data "F11"
Data "F12"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "F13"					;(NEC PC98)
Data "F14"					;(NEC PC98)
Data "F15"					;(NEC PC98)
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Kana"					;Japanese Keyboard
Data "Unknown"
Data "Unknown"
Data "ABNT_C1"				;/? on Portugese (Brazilian) keyboards
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Convert"				;Japanese Keyboard
Data "Unknown"
Data "NoConvert"			;Japanese Keyboard
Data "Unknown"
Data "Yen"					;Japanese Keyboard
Data "ABNT_C2"				;Numpad . on Portugese (Brazilian) keyboards
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Equals"				;= on numeric keypad (NEC PC98) 
Data "Unknown"
Data "Unknown"
Data "PrevTrack"			;Previous Track (DIK_CIRCUMFLEX on Japanese keyboard)
Data "AT"					;(NEC PC98)
Data "Colon (:)"			;(NEC PC98)
Data "Underline"			;(NEC PC98)
Data "Kanji"				;Japanese Keyboard
Data "Stop"					;(NEC PC98)
Data "AX"					;Japan AX
Data "Unlabeled"			;(J3100)
Data "Unknown"
Data "Next Track"			;Next Track
Data "Unknown"
Data "Unknown"
Data "Enter"				;ENTER on Numeric Keypad
Data "Right Control"
Data "Unknown"
Data "Unknown"
Data "Mute"					;Mute
Data "Calculator"			;Calculator
Data "Play/Pause"			;Play/Pause
Data "Unknown"
Data "Media Stop"			;Media Stop
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Volume Down"			;Volume -
Data "Unknown"
Data "Volume Up"			;Volume +
Data "Unknown"
Data "Web Home"				;Web Home
Data "Comma (,)"			;On Numeric Keypad (NEX PC98)
Data "Unknown"
Data "Divide (/)"			;On Numeric Keypad
Data "Unknown"
Data "SysReq"
Data "Right Alt/Menu"		;Right Alt
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Pause"				;Pause
Data "Unknown"
Data "Home"					;Home on Arrow Pad
Data "Up"					;Up Arrow on Arrow Keypad
Data "Page Up/Prior"		;Page Up on Arrow Keypad
Data "Unknown"
Data "Left"					;Left Arrow on Arrow Keypad
Data "Unknown"
Data "Right"				;Right Arrow on Arrow Keypad
Data "Unknown"
Data "End"					;End Key on Arrow Keypad
Data "Down"					;Down Key on Arrow Keypad
Data "Next"					;Next Key on Arrow Keypad
Data "Insert"				;Insert Key on Arrow Keypad
Data "Delete"				;Delete Key on Arrow Keypad
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Left Windows"			;Left Windows Key
Data "Right Windows"		;Right Windows Key
Data "Apps"					;Apps Menu Key
Data "Power"				;System Power
Data "Sleep"				;System Sleep
Data "Unknown"
Data "Unknown"
Data "Unknown"
Data "Wake"					;System Wake
Data "Unknown"
Data "Web Search"
Data "Web Favorites"
Data "Web Refresh"
Data "Web Stop"
Data "Web Forward"
Data "Web Back"
Data "My Computer"
Data "Mail"
Data "Media Select"

Comments

_PJ_2006
The NumLock and Pause/Break keys were reversed when I tried this.

I use a Logitech keyboard with UK settings if that helps.

All other keys were represented accurately.


Code Archives Forum