MultiKey

Detects the status of keys by keyboard scancode.

Syntax
	KeyPgDeclareDeclare KeyPgFunctionFunction MultiKey ( KeyPgByvalByVal scancode KeyPgAsAs KeyPgLongLong ) KeyPgAsAs KeyPgLongLong

Usage
	result = MultiKey(scancode)

Parameters
	scancode
		The GfxScancodesscan code of the key to check.

Return Value
	Returns -1 if the key for the specified GfxScancodesscan code is pressed, otherwise 
	returns 0.

Description
	MultiKey is a function which will detect the status of any key, 
	determined by scancode, at any time. It will return -1 if the key is 
	pressed, otherwise it will return 0.

	The keyboard input buffer is not disabled while you use MultiKey; that 
	is, pressed keys will be stored and subsequently returned by your next 
	call to KeyPgInkeyInkey or KeyPgGetkeyGetKey or KeyPgInputInput. This means you have to empty the 
	keyboard input buffer manually when you finish using MultiKey, using 
	something like the following method:
	While Inkey <> "": Wend  '' loop until the keyboard input buffer is empty
	      

	For FB's built-in functionality of getting keyboard input, see 
	DevRtlInkeyKeyboard Input (Basics).

	Keeping KeyPgInkeyInkey to work while you use MultiKey allows more flexibility and 
	can be useful to detect KeyPgChrChr(255)+"k" combo returned on window close 
	button click, if a windowed graphics mode has been set via the 
	KeyPgScreengraphicsScreen (Graphics) statement. For a list of accepted scancodes, see 
	GfxScancodesDOS keyboard scancodes; these are guaranteed to be valid for all 
	FreeBASIC supported platforms.
	MultiKey should always work in graphics mode, as long as the screen is 
	KeyPgScreenunlockUnlocked. Support in the console depends on the platform the program is 
	run on though, and cannot be guaranteed.

Example
	#include "fbgfx.bi"
	#if __FB_LANG__ = "fb"
	Using FB '' Scan code constants are stored in the FB namespace in lang FB
	#endif

	Dim As Integer x, y

	ScreenRes 640, 480

	Color 2, 15

	x = 320: y = 240
	Do
	   ' Check arrow keys and update the (x, y) position accordingly
	   If MultiKey(SC_LEFT ) And x >   0 Then x = x - 1
	   If MultiKey(SC_RIGHT) And x < 639 Then x = x + 1
	   If MultiKey(SC_UP   ) And y >   0 Then y = y - 1
	   If MultiKey(SC_DOWN ) And y < 479 Then y = y + 1
	   
	   ' Lock the page while we work on it
	   ScreenLock
	      ' Clear the screen and draw a circle at the position (x, y)
	      Cls
	      Circle(x, y), 30, , , , ,F
	   ScreenUnlock
	   
	   Sleep 15, 1
	   
	   ' Run loop until user presses Escape
	Loop Until MultiKey(SC_ESCAPE)

	' Clear Inkey buffer
	While Inkey <> "": Wend

	Print "Press CTRL and H to exit..."

	Do
	   Sleep 25
	   
	   '' Stay in loop until user holds down CTRL and H at the same time
	   If MultiKey(SC_CONTROL) And MultiKey(SC_H) Then Exit Do
	Loop
	   

Dialect Differences
	* Not available in the CompilerOptlang-lang qb dialect unless referenced with the 
	  alias __Multikey.

Differences from QB
	* New to FreeBASIC

See also
	* GfxScancodesKeyboard scancodes
	* KeyPgGetmouseGetMouse
	* KeyPgGetjoystickGetJoystick
	* KeyPgScreengraphicsScreen (Graphics)
	* KeyPgInkeyInkey
	* KeyPgEventEvent
	* KeyPgScreeneventScreenEvent
	* DevRtlInkeyKeyboard Input

