Code archives/User Input/Keycode scanning...

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

Download source code

Keycode scanning... by Rob Hutchinson2001
Some code for dealing with keycode scanning from ELAGUI... This should help with getting keyboard input from the user, it deals with second and third key functions, as well as key delay and next key delay... You can get the key id from the structure elaKeyCode\typeid and use this to incorporate delete/home/end/insert, etc..
Graphics 640,480,16
SetBuffer BackBuffer()

;Include "ELAKeyCodeSource.bb"   ; Dont forget to include :)


; ////- START INCLUDE -////
;------------------------------------

;
; Elaee Graphical User Interface KeyCode Module: Written By Robert Hutchinson 2000-2001.
; Copyright Robert Hutchinson 2000-2001.
;
; REQUIRES BLITZ BASIC VERSION 1.44 OR HIGHER!
; ELAGUI VERSION: 0.71
;
; Ah, full version due for release later!..
;

; +---------------------------------------------------------------------------------------------+
; ¦ SCANCODE CORE - Codes for keypresses.                                                       ¦
; +---------------------------------------------------------------------------------------------+

Const ELA_SCANCODE_TYPEID_ESCAPE       = 1
Const ELA_SCANCODE_TYPEID_BACKSPACE    = 2
Const ELA_SCANCODE_TYPEID_TAB          = 3
Const ELA_SCANCODE_TYPEID_RETURN       = 4
Const ELA_SCANCODE_TYPEID_LCTRL        = 5
Const ELA_SCANCODE_TYPEID_RCTRL        = 6
Const ELA_SCANCODE_TYPEID_LSHIFT       = 7
Const ELA_SCANCODE_TYPEID_RSHIFT       = 8
Const ELA_SCANCODE_TYPEID_LALT         = 9
Const ELA_SCANCODE_TYPEID_LWINKEY      = 10
Const ELA_SCANCODE_TYPEID_NUMLOCK      = 11
Const ELA_SCANCODE_TYPEID_CAPSLOCK     = 12
Const ELA_SCANCODE_TYPEID_SCROLLLOCK   = 13
Const ELA_SCANCODE_TYPEID_LMENU        = 15
Const ELA_SCANCODE_TYPEID_F1           = 16
Const ELA_SCANCODE_TYPEID_F2           = 17
Const ELA_SCANCODE_TYPEID_F3           = 18
Const ELA_SCANCODE_TYPEID_F4           = 19
Const ELA_SCANCODE_TYPEID_F5           = 20
Const ELA_SCANCODE_TYPEID_F6           = 21
Const ELA_SCANCODE_TYPEID_F7           = 22
Const ELA_SCANCODE_TYPEID_F8           = 23
Const ELA_SCANCODE_TYPEID_F9           = 24
Const ELA_SCANCODE_TYPEID_F10          = 25
Const ELA_SCANCODE_TYPEID_F11          = 26
Const ELA_SCANCODE_TYPEID_F12          = 27
Const ELA_SCANCODE_TYPEID_F13          = 28
Const ELA_SCANCODE_TYPEID_F14          = 29
Const ELA_SCANCODE_TYPEID_F15          = 30
Const ELA_SCANCODE_TYPEID_KANA         = 40
Const ELA_SCANCODE_TYPEID_ABNT_C1      = 41
Const ELA_SCANCODE_TYPEID_CONVERT      = 42
Const ELA_SCANCODE_TYPEID_NOCONVERT    = 43
Const ELA_SCANCODE_TYPEID_YEN          = 44
Const ELA_SCANCODE_TYPEID_ABNT_C2      = 45
Const ELA_SCANCODE_TYPEID_NUMPADEQUALS = 46
Const ELA_SCANCODE_TYPEID_PREVTRACK    = 47
Const ELA_SCANCODE_TYPEID_AT           = 48
Const ELA_SCANCODE_TYPEID_COLON        = 49
Const ELA_SCANCODE_TYPEID_UNDERLINE    = 50
Const ELA_SCANCODE_TYPEID_KANJI        = 51
Const ELA_SCANCODE_TYPEID_STOP         = 52
Const ELA_SCANCODE_TYPEID_AX           = 53
Const ELA_SCANCODE_TYPEID_UNLABELED    = 54
Const ELA_SCANCODE_TYPEID_NEXTTRACK    = 55
Const ELA_SCANCODE_TYPEID_NUMPADENTER  = 56
Const ELA_SCANCODE_TYPEID_MUTE         = 58
Const ELA_SCANCODE_TYPEID_CALCULATOR   = 59
Const ELA_SCANCODE_TYPEID_PLAYPAUSE    = 60
Const ELA_SCANCODE_TYPEID_MEDIASTOP    = 61
Const ELA_SCANCODE_TYPEID_VOLUMEDOWN   = 62
Const ELA_SCANCODE_TYPEID_VOLUMEUP     = 63
Const ELA_SCANCODE_TYPEID_WEBHOME      = 64
Const ELA_SCANCODE_TYPEID_NUMPADCOMMA  = 65
Const ELA_SCANCODE_TYPEID_DIVIDE       = 66
Const ELA_SCANCODE_TYPEID_SYSRQ        = 67
Const ELA_SCANCODE_TYPEID_RMENU        = 68
Const ELA_SCANCODE_TYPEID_PAUSE        = 69
Const ELA_SCANCODE_TYPEID_HOME         = 70
Const ELA_SCANCODE_TYPEID_UP           = 71
Const ELA_SCANCODE_TYPEID_PRIOR        = 72
Const ELA_SCANCODE_TYPEID_LEFT         = 73
Const ELA_SCANCODE_TYPEID_RIGHT        = 74
Const ELA_SCANCODE_TYPEID_END          = 75
Const ELA_SCANCODE_TYPEID_DOWN         = 76
Const ELA_SCANCODE_TYPEID_NEXT         = 77
Const ELA_SCANCODE_TYPEID_INSERT       = 78
Const ELA_SCANCODE_TYPEID_DELETE       = 79
Const ELA_SCANCODE_TYPEID_LWIN         = 80
Const ELA_SCANCODE_TYPEID_RWIN         = 81
Const ELA_SCANCODE_TYPEID_APPS         = 82
Const ELA_SCANCODE_TYPEID_POWER        = 83
Const ELA_SCANCODE_TYPEID_SLEEP        = 84
Const ELA_SCANCODE_TYPEID_WAKE         = 85
Const ELA_SCANCODE_TYPEID_WEBSEARCH    = 86
Const ELA_SCANCODE_TYPEID_WEBFAVORITES = 87
Const ELA_SCANCODE_TYPEID_WEBREFRESH   = 88
Const ELA_SCANCODE_TYPEID_WEBSTOP      = 89
Const ELA_SCANCODE_TYPEID_WEBFORWARD   = 90
Const ELA_SCANCODE_TYPEID_WEBBACK      = 91
Const ELA_SCANCODE_TYPEID_MYCOMPUTER   = 92
Const ELA_SCANCODE_TYPEID_MAIL         = 93
Const ELA_SCANCODE_TYPEID_MEDIASELECT  = 94
Const ELA_SCANCODE_TYPEID_NUMPAD7      = 95
Const ELA_SCANCODE_TYPEID_NUMPAD8      = 96
Const ELA_SCANCODE_TYPEID_NUMPAD9      = 97
Const ELA_SCANCODE_TYPEID_NUMPAD4      = 98
Const ELA_SCANCODE_TYPEID_NUMPAD5      = 99
Const ELA_SCANCODE_TYPEID_NUMPAD6      = 100
Const ELA_SCANCODE_TYPEID_NUMPAD1      = 101
Const ELA_SCANCODE_TYPEID_NUMPAD2      = 102
Const ELA_SCANCODE_TYPEID_NUMPAD3      = 103
Const ELA_SCANCODE_TYPEID_NUMPAD0      = 104
Const ELA_SCANCODE_TYPEID_OEM102       = 105

Type elaKeyCode
	Field typeid              ; This is the ID of this keycode, IDs are as above.
	Field alpha$              ; This is the character string of the key.
	Field ascii               ; This is the ASCII representation of the key.
	Field seckey.elaKeyCode   ; This is the secondary key (upper level key).
	Field terkey.elaKeyCode   ; This is the tertiary key.
End Type

Function ELACreateKeyCode.elaKeyCode(typeid,alpha$,ascii,seckey.elaKeyCode,terkey.elaKeyCode)
	tempKeyCode.elaKeyCode = New elaKeyCode
	tempKeyCode\typeid     = typeid
	tempKeyCode\alpha$     = alpha$
	tempKeyCode\ascii      = ascii
	tempKeyCode\seckey     = seckey
	tempKeyCode\terkey     = terkey
	Return tempKeyCode
End Function

Global keycodeDelay        = 200
Global keycodeNextKeyDelay = 10
Global keycodeTiming       = 0
Global keycodeTimingNext   = 0
Dim    keycodeBase.elaKeyCode(305)
Dim    keycodeValid(255)
Global keycodeLastKeyDown  = 0
Global keycodeLastKeyHit   = 0
Global keycodeValidTo      = 0
Global keycodeCapsLockOn   = False

Function ELASetKeyDelay(millidelay)
	keycodeDelay = millidelay
End Function

Function ELASetNextKeyDelay(millidelay)
	keycodeNextKeyDelay = millidelay
End Function

Function ELASetSpacesPerTab(noofspaces)
	keycodeBase(15)\alpha = String(" ",noofspaces)
End Function

Function ELACapsLockStatus(truefalse)
	keycodeCapsLockOn   = truefalse
End Function

Function ELALastKeyCodeDown.elaKeyCode()
	Return keycodeBase(keycodeLastKeyDown)
End Function

Function ELALastScanCodeDown()
	Return keycodeLastKeyDown
End Function

Function ELALastKeyCodeHit.elaKeyCode()
	Return keycodeBase(keycodeLastKeyHit)
End Function

Function ELALastScanCodeHit()
	Return keycodeLastKeyHit
End Function

keycodeBase(256) = ELACreateKeyCode(0,"!",Asc("!"),Null,Null)
keycodeBase(257) = ELACreateKeyCode(0,Chr(34),34  ,Null,Null)    ; "
keycodeBase(258) = ELACreateKeyCode(0,"£",Asc("£"),Null,Null)
keycodeBase(259) = ELACreateKeyCode(0,"$",Asc("$"),Null,Null)
keycodeBase(260) = ELACreateKeyCode(0,"%",Asc("%"),Null,Null)
keycodeBase(261) = ELACreateKeyCode(0,"^",Asc("^"),Null,Null)
keycodeBase(262) = ELACreateKeyCode(0,"&",Asc("&"),Null,Null)
keycodeBase(263) = ELACreateKeyCode(0,"*",Asc("*"),Null,Null)
keycodeBase(264) = ELACreateKeyCode(0,"(",Asc("("),Null,Null)
keycodeBase(265) = ELACreateKeyCode(0,")",Asc(")"),Null,Null)
keycodeBase(266) = ELACreateKeyCode(0,"_",Asc("_"),Null,Null)
keycodeBase(267) = ELACreateKeyCode(0,"+",Asc("+"),Null,Null)
keycodeBase(268) = ELACreateKeyCode(0,"Q",Asc("Q"),Null,Null)
keycodeBase(269) = ELACreateKeyCode(0,"W",Asc("W"),Null,Null)
keycodeBase(270) = ELACreateKeyCode(0,"E",Asc("E"),Null,Null)
keycodeBase(271) = ELACreateKeyCode(0,"R",Asc("R"),Null,Null)
keycodeBase(272) = ELACreateKeyCode(0,"T",Asc("T"),Null,Null)
keycodeBase(273) = ELACreateKeyCode(0,"Y",Asc("Y"),Null,Null)
keycodeBase(274) = ELACreateKeyCode(0,"U",Asc("U"),Null,Null)
keycodeBase(275) = ELACreateKeyCode(0,"I",Asc("I"),Null,Null)
keycodeBase(276) = ELACreateKeyCode(0,"O",Asc("O"),Null,Null)
keycodeBase(277) = ELACreateKeyCode(0,"P",Asc("P"),Null,Null)
keycodeBase(278) = ELACreateKeyCode(0,"{",Asc("{"),Null,Null)
keycodeBase(279) = ELACreateKeyCode(0,"}",Asc("}"),Null,Null)
keycodeBase(280) = ELACreateKeyCode(0,"A",Asc("A"),Null,Null)
keycodeBase(281) = ELACreateKeyCode(0,"S",Asc("S"),Null,Null)
keycodeBase(282) = ELACreateKeyCode(0,"D",Asc("D"),Null,Null)
keycodeBase(283) = ELACreateKeyCode(0,"F",Asc("F"),Null,Null)
keycodeBase(284) = ELACreateKeyCode(0,"G",Asc("G"),Null,Null)
keycodeBase(285) = ELACreateKeyCode(0,"H",Asc("H"),Null,Null)
keycodeBase(286) = ELACreateKeyCode(0,"J",Asc("J"),Null,Null)
keycodeBase(287) = ELACreateKeyCode(0,"K",Asc("K"),Null,Null)
keycodeBase(288) = ELACreateKeyCode(0,"L",Asc("L"),Null,Null)
keycodeBase(289) = ELACreateKeyCode(0,":",Asc(":"),Null,Null)
keycodeBase(290) = ELACreateKeyCode(0,"@",Asc("@"),Null,Null)
keycodeBase(291) = ELACreateKeyCode(0,"~",Asc("~"),Null,Null)
keycodeBase(292) = ELACreateKeyCode(0,"|",Asc("|"),Null,Null)
keycodeBase(293) = ELACreateKeyCode(0,"Z",Asc("Z"),Null,Null)
keycodeBase(294) = ELACreateKeyCode(0,"X",Asc("X"),Null,Null)
keycodeBase(295) = ELACreateKeyCode(0,"C",Asc("C"),Null,Null)
keycodeBase(296) = ELACreateKeyCode(0,"V",Asc("V"),Null,Null)
keycodeBase(297) = ELACreateKeyCode(0,"B",Asc("B"),Null,Null)
keycodeBase(298) = ELACreateKeyCode(0,"N",Asc("N"),Null,Null)
keycodeBase(299) = ELACreateKeyCode(0,"M",Asc("M"),Null,Null)
keycodeBase(300) = ELACreateKeyCode(0,"<",Asc("<"),Null,Null)
keycodeBase(301) = ELACreateKeyCode(0,">",Asc(">"),Null,Null)
keycodeBase(302) = ELACreateKeyCode(0,"?",Asc("?"),Null,Null)
keycodeBase(303) = ELACreateKeyCode(0,"¬",Asc("¬"),Null,Null)

keycodeBase(1)   = ELACreateKeyCode(ELA_SCANCODE_TYPEID_ESCAPE,"",0,Null,Null)
keycodeBase(2)   = ELACreateKeyCode(0,"1",Asc("1"),Null,keycodeBase(256))
keycodeBase(3)   = ELACreateKeyCode(0,"2",Asc("2"),Null,keycodeBase(257))
keycodeBase(4)   = ELACreateKeyCode(0,"3",Asc("3"),Null,keycodeBase(258))
keycodeBase(5)   = ELACreateKeyCode(0,"4",Asc("4"),Null,keycodeBase(259))
keycodeBase(6)   = ELACreateKeyCode(0,"5",Asc("5"),Null,keycodeBase(260))
keycodeBase(7)   = ELACreateKeyCode(0,"6",Asc("6"),Null,keycodeBase(261))
keycodeBase(8)   = ELACreateKeyCode(0,"7",Asc("7"),Null,keycodeBase(262))
keycodeBase(9)   = ELACreateKeyCode(0,"8",Asc("8"),Null,keycodeBase(263))
keycodeBase(10)  = ELACreateKeyCode(0,"9",Asc("9"),Null,keycodeBase(264))
keycodeBase(11)  = ELACreateKeyCode(0,"0",Asc("0"),Null,keycodeBase(265))
keycodeBase(12)  = ELACreateKeyCode(0,"-",Asc("-"),Null,keycodeBase(266))
keycodeBase(13)  = ELACreateKeyCode(0,"=",Asc("="),Null,keycodeBase(267))
keycodeBase(14)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_BACKSPACE,"",0,Null,Null)
keycodeBase(15)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_TAB      ,"    ",Asc("	"),Null,Null)
keycodeBase(16)  = ELACreateKeyCode(0,"q",Asc("q"),keycodeBase(268),keycodeBase(268))
keycodeBase(17)  = ELACreateKeyCode(0,"w",Asc("w"),keycodeBase(269),keycodeBase(269))
keycodeBase(18)  = ELACreateKeyCode(0,"e",Asc("e"),keycodeBase(270),keycodeBase(270))
keycodeBase(19)  = ELACreateKeyCode(0,"r",Asc("r"),keycodeBase(271),keycodeBase(271))
keycodeBase(20)  = ELACreateKeyCode(0,"t",Asc("t"),keycodeBase(272),keycodeBase(272))
keycodeBase(21)  = ELACreateKeyCode(0,"y",Asc("y"),keycodeBase(273),keycodeBase(273))
keycodeBase(22)  = ELACreateKeyCode(0,"u",Asc("u"),keycodeBase(274),keycodeBase(274))
keycodeBase(23)  = ELACreateKeyCode(0,"i",Asc("i"),keycodeBase(275),keycodeBase(275))
keycodeBase(24)  = ELACreateKeyCode(0,"o",Asc("o"),keycodeBase(276),keycodeBase(276))
keycodeBase(25)  = ELACreateKeyCode(0,"p",Asc("p"),keycodeBase(277),keycodeBase(277))
keycodeBase(26)  = ELACreateKeyCode(0,"[",Asc("["),Null,keycodeBase(278))
keycodeBase(27)  = ELACreateKeyCode(0,"]",Asc("]"),Null,keycodeBase(279))
keycodeBase(28)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RETURN,"",0,Null,Null)
keycodeBase(29)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_LCTRL ,"",0,Null,Null)
keycodeBase(30)  = ELACreateKeyCode(0,"a",Asc("a"),keycodeBase(280),keycodeBase(280))
keycodeBase(31)  = ELACreateKeyCode(0,"s",Asc("s"),keycodeBase(281),keycodeBase(281))
keycodeBase(32)  = ELACreateKeyCode(0,"d",Asc("d"),keycodeBase(282),keycodeBase(282))
keycodeBase(33)  = ELACreateKeyCode(0,"f",Asc("f"),keycodeBase(283),keycodeBase(283))
keycodeBase(34)  = ELACreateKeyCode(0,"g",Asc("g"),keycodeBase(284),keycodeBase(284))
keycodeBase(35)  = ELACreateKeyCode(0,"h",Asc("h"),keycodeBase(285),keycodeBase(285))
keycodeBase(36)  = ELACreateKeyCode(0,"j",Asc("j"),keycodeBase(286),keycodeBase(286))
keycodeBase(37)  = ELACreateKeyCode(0,"k",Asc("k"),keycodeBase(287),keycodeBase(287))
keycodeBase(38)  = ELACreateKeyCode(0,"l",Asc("l"),keycodeBase(288),keycodeBase(288))
keycodeBase(39)  = ELACreateKeyCode(0,";",Asc(";"),Null,keycodeBase(289))
keycodeBase(40)  = ELACreateKeyCode(0,"'",Asc("'"),Null,keycodeBase(290))
keycodeBase(41)  = ELACreateKeyCode(0,"`",Asc("`"),Null,keycodeBase(303))  ; `
keycodeBase(42)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_LSHIFT,"",0,Null,Null)
keycodeBase(43)  = ELACreateKeyCode(0,"#",Asc("#"),Null,keycodeBase(291))
keycodeBase(44)  = ELACreateKeyCode(0,"z",Asc("z"),keycodeBase(293),keycodeBase(293))
keycodeBase(45)  = ELACreateKeyCode(0,"x",Asc("x"),keycodeBase(294),keycodeBase(294))
keycodeBase(46)  = ELACreateKeyCode(0,"c",Asc("c"),keycodeBase(295),keycodeBase(295))
keycodeBase(47)  = ELACreateKeyCode(0,"v",Asc("v"),keycodeBase(296),keycodeBase(296))
keycodeBase(48)  = ELACreateKeyCode(0,"b",Asc("b"),keycodeBase(297),keycodeBase(297))
keycodeBase(49)  = ELACreateKeyCode(0,"n",Asc("n"),keycodeBase(298),keycodeBase(298))
keycodeBase(50)  = ELACreateKeyCode(0,"m",Asc("m"),keycodeBase(299),keycodeBase(299))
keycodeBase(51)  = ELACreateKeyCode(0,",",Asc(","),Null,keycodeBase(300))
keycodeBase(52)  = ELACreateKeyCode(0,".",Asc("."),Null,keycodeBase(301))
keycodeBase(53)  = ELACreateKeyCode(0,"/",Asc("/"),Null,keycodeBase(302))
keycodeBase(54)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RSHIFT,"",0,Null,Null)
keycodeBase(55)  = ELACreateKeyCode(0,"*",Asc("*"),Null,Null)
keycodeBase(56)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_LMENU,"",0,Null,Null)
keycodeBase(57)  = ELACreateKeyCode(0," ",Asc(" "),Null,Null)
keycodeBase(58)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_CAPSLOCK,"" ,Asc("") ,Null,Null)
keycodeBase(59)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F1 ,"F1",0,Null,Null)
keycodeBase(60)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F2 ,"F2",0,Null,Null)
keycodeBase(61)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F3 ,"F3",0,Null,Null)
keycodeBase(62)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F4 ,"F4",0,Null,Null)
keycodeBase(63)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F5 ,"F5",0,Null,Null)
keycodeBase(64)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F6 ,"F6",0,Null,Null)
keycodeBase(65)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F7 ,"F7",0,Null,Null)
keycodeBase(66)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F8 ,"F8",0,Null,Null)
keycodeBase(67)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F9 ,"F9",0,Null,Null)
keycodeBase(68)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F10,"F10",0,Null,Null)
keycodeBase(69)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMLOCK   ,"",0,Null,Null)
keycodeBase(70)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_SCROLLLOCK,"",0,Null,Null)
keycodeBase(71)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD7   ,"7",Asc("7"),Null,Null)
keycodeBase(72)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD8   ,"8",Asc("8"),Null,Null)
keycodeBase(73)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD9   ,"9",Asc("9"),Null,Null)
keycodeBase(74)  = ELACreateKeyCode(0,"-",Asc("-"),Null,Null)
keycodeBase(75)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD4   ,"4",Asc("4"),Null,Null)
keycodeBase(76)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD5   ,"5",Asc("5"),Null,Null)
keycodeBase(77)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD6   ,"6",Asc("6"),Null,Null)
keycodeBase(78)  = ELACreateKeyCode(0,"+",Asc("+"),Null,Null)
keycodeBase(79)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD1   ,"1",Asc("1"),Null,Null)
keycodeBase(80)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD2   ,"2",Asc("2"),Null,Null)
keycodeBase(81)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD3   ,"3",Asc("3"),Null,Null)
keycodeBase(82)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPAD0   ,"0",Asc("0"),Null,Null)
keycodeBase(83)  = ELACreateKeyCode(0,".",Asc("."),Null,Null)
keycodeBase(86)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_OEM102    ,"\",Asc("\"),Null,keycodeBase(292))
keycodeBase(87)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F11,"F11",0,Null,Null)
keycodeBase(88)  = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F12,"F12",0,Null,Null)
keycodeBase(100) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F13,"F13",0,Null,Null)
keycodeBase(101) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F14,"F14",0,Null,Null)
keycodeBase(102) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_F15,"F15",0,Null,Null)

keycodeBase(112) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_KANA         ,"",0,Null,Null)
keycodeBase(115) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_ABNT_C1      ,"",0,Null,Null)
keycodeBase(121) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_CONVERT      ,"",0,Null,Null)
keycodeBase(123) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NOCONVERT    ,"",0,Null,Null)
keycodeBase(125) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_YEN          ,"",0,Null,Null)
keycodeBase(126) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_ABNT_C2      ,"",0,Null,Null)
keycodeBase(141) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPADEQUALS ,"=",Asc("="),Null,Null)
keycodeBase(144) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_PREVTRACK    ,"",0,Null,Null)
keycodeBase(145) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_AT           ,"",0,Null,Null)
keycodeBase(146) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_COLON        ,":",Asc(":"),Null,Null)
keycodeBase(147) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_UNDERLINE    ,"",0,Null,Null)
keycodeBase(148) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_KANJI        ,"",0,Null,Null)
keycodeBase(149) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_STOP         ,"",0,Null,Null)
keycodeBase(150) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_AX           ,"",0,Null,Null)
keycodeBase(151) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_UNLABELED    ,"",0,Null,Null)
keycodeBase(153) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NEXTTRACK    ,"",0,Null,Null)
keycodeBase(156) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPADENTER  ,"",0,Null,Null)
keycodeBase(157) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RCTRL        ,"",0,Null,Null)
keycodeBase(160) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_MUTE         ,"",0,Null,Null)
keycodeBase(161) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_CALCULATOR   ,"",0,Null,Null)
keycodeBase(162) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_PLAYPAUSE    ,"",0,Null,Null)
keycodeBase(164) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_MEDIASTOP    ,"",0,Null,Null)
keycodeBase(174) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_VOLUMEDOWN   ,"",0,Null,Null)
keycodeBase(176) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_VOLUMEUP     ,"",0,Null,Null)
keycodeBase(178) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBHOME      ,"",0,Null,Null)
keycodeBase(179) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NUMPADCOMMA  ,",",Asc(","),Null,Null)
keycodeBase(181) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_DIVIDE       ,"/",Asc("/"),Null,Null)
keycodeBase(183) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_SYSRQ        ,"",0,Null,Null)
keycodeBase(184) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RMENU        ,"",0,Null,Null)
keycodeBase(197) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_PAUSE        ,"",0,Null,Null)
keycodeBase(199) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_HOME         ,"",0,Null,Null)
keycodeBase(200) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_UP           ,"",0,Null,Null)
keycodeBase(201) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_PRIOR        ,"",0,Null,Null)
keycodeBase(203) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_LEFT         ,"",0,Null,Null)
keycodeBase(205) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RIGHT        ,"",0,Null,Null)
keycodeBase(207) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_END          ,"",0,Null,Null)
keycodeBase(208) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_DOWN         ,"",0,Null,Null)
keycodeBase(209) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_NEXT         ,"",0,Null,Null)
keycodeBase(210) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_INSERT       ,"",0,Null,Null)
keycodeBase(211) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_DELETE       ,"",0,Null,Null)
keycodeBase(219) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_LWIN         ,"",0,Null,Null)
keycodeBase(220) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_RWIN         ,"",0,Null,Null)
keycodeBase(221) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_APPS         ,"",0,Null,Null)
keycodeBase(222) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_POWER        ,"",0,Null,Null)
keycodeBase(223) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_SLEEP        ,"",0,Null,Null)
keycodeBase(227) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WAKE         ,"",0,Null,Null)
keycodeBase(229) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBSEARCH    ,"",0,Null,Null)
keycodeBase(230) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBFAVORITES ,"",0,Null,Null)
keycodeBase(231) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBREFRESH   ,"",0,Null,Null)
keycodeBase(232) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBSTOP      ,"",0,Null,Null)
keycodeBase(233) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBFORWARD   ,"",0,Null,Null)
keycodeBase(234) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_WEBBACK      ,"",0,Null,Null)
keycodeBase(235) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_MYCOMPUTER   ,"",0,Null,Null)
keycodeBase(236) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_MAIL         ,"",0,Null,Null)
keycodeBase(237) = ELACreateKeyCode(ELA_SCANCODE_TYPEID_MEDIASELECT  ,"",0,Null,Null)


; Yes, there IS a reason for this LUT within a LUT! :) 6 milliseconds is the reason! :)
; A small optimisation I know, but an optimisation non the less!
Restore keycodesUseTheseKeyCodes
Read keyScan
While keyScan <> 0
	keycodeValidTo = keycodeValidTo + 1
	keycodeValid(keycodeValidTo) = keyScan
	Read keyScan
Wend

Function ELAScanCode.elaKeyCode()
	If KeyHit(58) Then keycodeCapsLockOn = 1 - keycodeCapsLockOn
	
	For keycodeScannedCode = 1 To keycodeValidTo 
		keyScanTF = KeyDown(keycodeValid(keycodeScannedCode))
		If keyScanTF
			tempScanCode = keycodeValid(keycodeScannedCode)
			If keycodeLastKeyDown <> tempScanCode
				keycodeTiming = 0
			EndIf
			keycodeLastKeyDown = tempScanCode
			If keycodeTiming = 0
				keycodeTiming = MilliSecs()
				keycodeLastKeyHit = tempScanCode
				Return ELAKeyCodeReturnKey(tempScanCode)
			Else
				If MilliSecs() - keycodeTiming > keycodeDelay
					If keycodeTimingNext = 0
						keycodeTimingNext = MilliSecs()
						keycodeLastKeyHit = 0
						Return Null
					Else
						If MilliSecs() - keycodeTimingNext > keycodeNextKeyDelay
							keycodeTimingNext = 0
							keycodeLastKeyHit = tempScanCode
							Return ELAKeyCodeReturnKey(tempScanCode)
						Else
							keycodeLastKeyHit = 0
							Return Null
						EndIf
					EndIf
				Else
					Return Null
				EndIf
			EndIf	
		EndIf
	Next
	
	keycodeTimingNext  = 0
	keycodeLastKeyDown = 0
	keycodeTiming      = 0
	Return Null
End Function

Function ELAKeyCodeReturnKey.elaKeyCode(scancodeid)
	tempShiftDown = KeyDown(42) Or KeyDown(54)
	If tempShiftDown <> 0
		If keycodeBase(scancodeid)\terkey <> Null
;			If keycodeBase(scancodeid)\ascii <> 0
				Return keycodeBase(scancodeid)\terkey
;			EndIf
		Else
;			If keycodeBase(scancodeid)\ascii <> 0
				Return keycodeBase(scancodeid)
;			EndIf
		EndIf
	Else
		If keycodeCapsLockOn <> 0
			If keycodeBase(scancodeid)\seckey <> Null
;				If keycodeBase(scancodeid)\ascii <> 0
					Return keycodeBase(scancodeid)\seckey
;				EndIf
			Else
;				If keycodeBase(scancodeid)\ascii <> 0
					Return keycodeBase(scancodeid)
;				EndIf
			EndIf
		Else
;			If keycodeBase(scancodeid)\ascii <> 0
				Return keycodeBase(scancodeid)
;			EndIf
		EndIf
	EndIf
	Return Null
End Function

.keycodesUseTheseKeyCodes:
Data 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
Data 31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,55,56,57,59,60
Data 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,86,87,88,100
Data 101,102,112,115,121,123,125,126,141,144,145,146,147,148,149,150,151,153,156,157,160
Data 161,162,164,174,176,178,179,181,183,184,197,199,200,201,203,205,207,208,209,210,211
Data 219,220,221,222,223,227,229,230,231,232,233,234,235,236,237,0     ; null terminated

;-------------------------------------------
;////- END INCLUDE -////

; Example:

printtext$ = ""
ELASetKeyDelay(500)      ; Delay between next key return in millisecs.
ELASetNextKeyDelay(20)   ; Delay between next key return when holding the key, in millisecs.


Repeat
	Cls
	
	tempkeycode.elaKeyCode = ELAScanCode()
	
	If tempkeycode <> Null
		printtext$ = printtext$ + tempkeycode\alpha
		If StringWidth(printtext$)>GraphicsWidth()
			printtext$ = ""
		EndIf
	EndIf
	
	Text 0,0,"Type something...."
	Text 0,15,printtext$
	
	Flip
Until KeyDown(1)
End


Comments

None.

Code Archives Forum