It's always been on my to-do list and I finally did it. This is a function to read keyboard input through typing, storing the data in a string. It's capable of allowing most conversations on a standard QWERTY keyboard.
It's used as follows:
char$ = KB_Input(char$)
char$ being the local string variable storing your keyboard input
+ Code SnippetRem KBPress() is used by the KB_Input($) function
Rem Note for Newbies: "Dim KBPress(1000) as int" will cause an error. int needs to read integer.
Dim KBPress(1000) as integer
Function KB_Input(String_I$)
If KBPress(Scancode()) <> 1
if keystate(54) = 0
Select Scancode()
Case 2 : s_value$ = "1" : KBPress(Scancode()) = 1 : Endcase
Case 3 : s_value$ = "2" : KBPress(Scancode()) = 1 : Endcase
Case 4 : s_value$ = "3" : KBPress(Scancode()) = 1 : Endcase
Case 5 : s_value$ = "4" : KBPress(Scancode()) = 1 : Endcase
Case 6 : s_value$ = "5" : KBPress(Scancode()) = 1 : Endcase
Case 7 : s_value$ = "6" : KBPress(Scancode()) = 1 : Endcase
Case 8 : s_value$ = "7" : KBPress(Scancode()) = 1 : Endcase
Case 9 : s_value$ = "8" : KBPress(Scancode()) = 1 : Endcase
Case 10 : s_value$ = "9" : KBPress(Scancode()) = 1 : Endcase
Case 11 : s_value$ = "0" : KBPress(Scancode()) = 1 : Endcase
Case 16 : s_value$ = "q" : KBPress(Scancode()) = 1 : Endcase
Case 17 : s_value$ = "w" : KBPress(Scancode()) = 1 : Endcase
Case 18 : s_value$ = "e" : KBPress(Scancode()) = 1 : Endcase
Case 19 : s_value$ = "r" : KBPress(Scancode()) = 1 : Endcase
Case 20 : s_value$ = "t" : KBPress(Scancode()) = 1 : Endcase
Case 21 : s_value$ = "y" : KBPress(Scancode()) = 1 : Endcase
Case 22 : s_value$ = "u" : KBPress(Scancode()) = 1 : Endcase
Case 23 : s_value$ = "i" : KBPress(Scancode()) = 1 : Endcase
Case 24 : s_value$ = "o" : KBPress(Scancode()) = 1 : Endcase
Case 25 : s_value$ = "p" : KBPress(Scancode()) = 1 : Endcase
Case 30 : s_value$ = "a" : KBPress(Scancode()) = 1 : Endcase
Case 31 : s_value$ = "s" : KBPress(Scancode()) = 1 : Endcase
Case 32 : s_value$ = "d" : KBPress(Scancode()) = 1 : Endcase
Case 33 : s_value$ = "f" : KBPress(Scancode()) = 1 : Endcase
Case 34 : s_value$ = "g" : KBPress(Scancode()) = 1 : Endcase
Case 35 : s_value$ = "h" : KBPress(Scancode()) = 1 : Endcase
Case 36 : s_value$ = "j" : KBPress(Scancode()) = 1 : Endcase
Case 37 : s_value$ = "k" : KBPress(Scancode()) = 1 : Endcase
Case 38 : s_value$ = "l" : KBPress(Scancode()) = 1 : Endcase
Case 44 : s_value$ = "z" : KBPress(Scancode()) = 1 : Endcase
Case 45 : s_value$ = "x" : KBPress(Scancode()) = 1 : Endcase
Case 46 : s_value$ = "c" : KBPress(Scancode()) = 1 : Endcase
Case 47 : s_value$ = "v" : KBPress(Scancode()) = 1 : Endcase
Case 48 : s_value$ = "b" : KBPress(Scancode()) = 1 : Endcase
Case 49 : s_value$ = "n" : KBPress(Scancode()) = 1 : Endcase
Case 50 : s_value$ = "m" : KBPress(Scancode()) = 1 : Endcase
Case 52 : s_value$ = "." : KBPress(Scancode()) = 1 : Endcase
Case 57 : s_value$ = " " : KBPress(Scancode()) = 1 : Endcase
Case 51 : s_value$ = "," : KBPress(Scancode()) = 1 : Endcase
Case 53 : s_value$ = "/" : KBPress(Scancode()) = 1 : Endcase
Case 39 : s_value$ = ";" : KBPress(Scancode()) = 1 : Endcase
Case 40 : s_value$ = "'" : KBPress(Scancode()) = 1 : Endcase
Case 26 : s_value$ = "[" : KBPress(Scancode()) = 1 : Endcase
Case 27 : s_value$ = "]" : KBPress(Scancode()) = 1 : Endcase
Case 43 : s_value$ = "\" : KBPress(Scancode()) = 1 : Endcase
Case 41 : s_value$ = "`" : KBPress(Scancode()) = 1 : Endcase
Case 12 : s_value$ = "-" : KBPress(Scancode()) = 1 : Endcase
Case 13 : s_value$ = "=" : KBPress(Scancode()) = 1 : Endcase
Case Default : s_value$ = "" : Endcase
Endselect
else
Select Scancode()
Case 2 : s_value$ = "!" : KBPress(Scancode()) = 1 : Endcase
Case 3 : s_value$ = "@" : KBPress(Scancode()) = 1 : Endcase
Case 4 : s_value$ = "#" : KBPress(Scancode()) = 1 : Endcase
Case 5 : s_value$ = "$" : KBPress(Scancode()) = 1 : Endcase
Case 6 : s_value$ = "%" : KBPress(Scancode()) = 1 : Endcase
Case 7 : s_value$ = "^" : KBPress(Scancode()) = 1 : Endcase
Case 8 : s_value$ = "&" : KBPress(Scancode()) = 1 : Endcase
Case 9 : s_value$ = "*" : KBPress(Scancode()) = 1 : Endcase
Case 10 : s_value$ = "(" : KBPress(Scancode()) = 1 : Endcase
Case 11 : s_value$ = ")" : KBPress(Scancode()) = 1 : Endcase
Case 16 : s_value$ = "Q" : KBPress(Scancode()) = 1 : Endcase
Case 17 : s_value$ = "W" : KBPress(Scancode()) = 1 : Endcase
Case 18 : s_value$ = "E" : KBPress(Scancode()) = 1 : Endcase
Case 19 : s_value$ = "R" : KBPress(Scancode()) = 1 : Endcase
Case 20 : s_value$ = "T" : KBPress(Scancode()) = 1 : Endcase
Case 21 : s_value$ = "Y" : KBPress(Scancode()) = 1 : Endcase
Case 22 : s_value$ = "U" : KBPress(Scancode()) = 1 : Endcase
Case 23 : s_value$ = "I" : KBPress(Scancode()) = 1 : Endcase
Case 24 : s_value$ = "O" : KBPress(Scancode()) = 1 : Endcase
Case 25 : s_value$ = "P" : KBPress(Scancode()) = 1 : Endcase
Case 30 : s_value$ = "A" : KBPress(Scancode()) = 1 : Endcase
Case 31 : s_value$ = "S" : KBPress(Scancode()) = 1 : Endcase
Case 32 : s_value$ = "D" : KBPress(Scancode()) = 1 : Endcase
Case 33 : s_value$ = "F" : KBPress(Scancode()) = 1 : Endcase
Case 34 : s_value$ = "G" : KBPress(Scancode()) = 1 : Endcase
Case 35 : s_value$ = "H" : KBPress(Scancode()) = 1 : Endcase
Case 36 : s_value$ = "J" : KBPress(Scancode()) = 1 : Endcase
Case 37 : s_value$ = "K" : KBPress(Scancode()) = 1 : Endcase
Case 38 : s_value$ = "L" : KBPress(Scancode()) = 1 : Endcase
Case 44 : s_value$ = "Z" : KBPress(Scancode()) = 1 : Endcase
Case 45 : s_value$ = "X" : KBPress(Scancode()) = 1 : Endcase
Case 46 : s_value$ = "C" : KBPress(Scancode()) = 1 : Endcase
Case 47 : s_value$ = "V" : KBPress(Scancode()) = 1 : Endcase
Case 48 : s_value$ = "B" : KBPress(Scancode()) = 1 : Endcase
Case 49 : s_value$ = "N" : KBPress(Scancode()) = 1 : Endcase
Case 50 : s_value$ = "M" : KBPress(Scancode()) = 1 : Endcase
Case 52 : s_value$ = ">" : KBPress(Scancode()) = 1 : Endcase
Case 57 : s_value$ = " " : KBPress(Scancode()) = 1 : Endcase
Case 51 : s_value$ = "<" : KBPress(Scancode()) = 1 : Endcase
Case 53 : s_value$ = "?" : KBPress(Scancode()) = 1 : Endcase
Case 39 : s_value$ = ":" : KBPress(Scancode()) = 1 : Endcase
Case 40 : s_value$ = "'" : KBPress(Scancode()) = 1 : Endcase
Case 26 : s_value$ = "{" : KBPress(Scancode()) = 1 : Endcase
Case 27 : s_value$ = "}" : KBPress(Scancode()) = 1 : Endcase
Case 43 : s_value$ = "|" : KBPress(Scancode()) = 1 : Endcase
Case 41 : s_value$ = "~" : KBPress(Scancode()) = 1 : Endcase
Case 12 : s_value$ = "_" : KBPress(Scancode()) = 1 : Endcase
Case 13 : s_value$ = "+" : KBPress(Scancode()) = 1 : Endcase
Case Default : s_value$ = "" : Endcase
Endselect
endif
endif
if scancode() = 0
for x = 1 to 100
KBPress(x) = 0
next x
endif
if keystate(54) = 1
for x = 1 to 100
if keystate(x) = 0
KBPress(x) = 0
endif
next x
endif
ReturnString$ = String_I$ + s_value$
if scancode() = 14 and KBPress(14) = 0
delete = LEN(ReturnString$) - 1 : if delete < 0 then delete = 0
ReturnString$ = Left$(ReturnString$, delete)
KBPress(14) = 1
cls
endif
Endfunction ReturnString$
I created this short program with a simplified main loop that can be copied into your compiler with no added files. When you execute, just start typing and your keystrokes will be caught in a non-clunky fashion and displayed on-screen. When you hit "Enter," the current input field is saved into the chat log and displayed on screen below the text field.
Demo source:
+ Code SnippetRem KBPress() is used by the KB_Input($) function
Rem Note for Newbies: "Dim KBPress(1000) as int" will cause an error. int needs to read integer.
Dim KBPress(1000) as integer
Rem chatLog$() is used to store the strings that are entered
Dim chatLog$(1000) as string
chatLogCt = 0
do
gosub TypeRoutine
for x = 0 to chatLogCt
text 10, 30+(15*x), chatLog$(x)
next x
loop
TypeRoutine:
text 11, 12, chat$
chat$ = KB_Input(chat$)
if keystate(28) = 1 and KBPress(28) = 0
inc chatLogCt
chatLog$(chatLogCt) = chat$
chat$ = ""
typing = 0
KBPress(28) = 1
cls
endif
Return
Function KB_Input(String_I$)
If KBPress(Scancode()) <> 1
if keystate(54) = 0
Select Scancode()
Case 2 : s_value$ = "1" : KBPress(Scancode()) = 1 : Endcase
Case 3 : s_value$ = "2" : KBPress(Scancode()) = 1 : Endcase
Case 4 : s_value$ = "3" : KBPress(Scancode()) = 1 : Endcase
Case 5 : s_value$ = "4" : KBPress(Scancode()) = 1 : Endcase
Case 6 : s_value$ = "5" : KBPress(Scancode()) = 1 : Endcase
Case 7 : s_value$ = "6" : KBPress(Scancode()) = 1 : Endcase
Case 8 : s_value$ = "7" : KBPress(Scancode()) = 1 : Endcase
Case 9 : s_value$ = "8" : KBPress(Scancode()) = 1 : Endcase
Case 10 : s_value$ = "9" : KBPress(Scancode()) = 1 : Endcase
Case 11 : s_value$ = "0" : KBPress(Scancode()) = 1 : Endcase
Case 16 : s_value$ = "q" : KBPress(Scancode()) = 1 : Endcase
Case 17 : s_value$ = "w" : KBPress(Scancode()) = 1 : Endcase
Case 18 : s_value$ = "e" : KBPress(Scancode()) = 1 : Endcase
Case 19 : s_value$ = "r" : KBPress(Scancode()) = 1 : Endcase
Case 20 : s_value$ = "t" : KBPress(Scancode()) = 1 : Endcase
Case 21 : s_value$ = "y" : KBPress(Scancode()) = 1 : Endcase
Case 22 : s_value$ = "u" : KBPress(Scancode()) = 1 : Endcase
Case 23 : s_value$ = "i" : KBPress(Scancode()) = 1 : Endcase
Case 24 : s_value$ = "o" : KBPress(Scancode()) = 1 : Endcase
Case 25 : s_value$ = "p" : KBPress(Scancode()) = 1 : Endcase
Case 30 : s_value$ = "a" : KBPress(Scancode()) = 1 : Endcase
Case 31 : s_value$ = "s" : KBPress(Scancode()) = 1 : Endcase
Case 32 : s_value$ = "d" : KBPress(Scancode()) = 1 : Endcase
Case 33 : s_value$ = "f" : KBPress(Scancode()) = 1 : Endcase
Case 34 : s_value$ = "g" : KBPress(Scancode()) = 1 : Endcase
Case 35 : s_value$ = "h" : KBPress(Scancode()) = 1 : Endcase
Case 36 : s_value$ = "j" : KBPress(Scancode()) = 1 : Endcase
Case 37 : s_value$ = "k" : KBPress(Scancode()) = 1 : Endcase
Case 38 : s_value$ = "l" : KBPress(Scancode()) = 1 : Endcase
Case 44 : s_value$ = "z" : KBPress(Scancode()) = 1 : Endcase
Case 45 : s_value$ = "x" : KBPress(Scancode()) = 1 : Endcase
Case 46 : s_value$ = "c" : KBPress(Scancode()) = 1 : Endcase
Case 47 : s_value$ = "v" : KBPress(Scancode()) = 1 : Endcase
Case 48 : s_value$ = "b" : KBPress(Scancode()) = 1 : Endcase
Case 49 : s_value$ = "n" : KBPress(Scancode()) = 1 : Endcase
Case 50 : s_value$ = "m" : KBPress(Scancode()) = 1 : Endcase
Case 52 : s_value$ = "." : KBPress(Scancode()) = 1 : Endcase
Case 57 : s_value$ = " " : KBPress(Scancode()) = 1 : Endcase
Case 51 : s_value$ = "," : KBPress(Scancode()) = 1 : Endcase
Case 53 : s_value$ = "/" : KBPress(Scancode()) = 1 : Endcase
Case 39 : s_value$ = ";" : KBPress(Scancode()) = 1 : Endcase
Case 40 : s_value$ = "'" : KBPress(Scancode()) = 1 : Endcase
Case 26 : s_value$ = "[" : KBPress(Scancode()) = 1 : Endcase
Case 27 : s_value$ = "]" : KBPress(Scancode()) = 1 : Endcase
Case 43 : s_value$ = "\" : KBPress(Scancode()) = 1 : Endcase
Case 41 : s_value$ = "`" : KBPress(Scancode()) = 1 : Endcase
Case 12 : s_value$ = "-" : KBPress(Scancode()) = 1 : Endcase
Case 13 : s_value$ = "=" : KBPress(Scancode()) = 1 : Endcase
Case Default : s_value$ = "" : Endcase
Endselect
else
Select Scancode()
Case 2 : s_value$ = "!" : KBPress(Scancode()) = 1 : Endcase
Case 3 : s_value$ = "@" : KBPress(Scancode()) = 1 : Endcase
Case 4 : s_value$ = "#" : KBPress(Scancode()) = 1 : Endcase
Case 5 : s_value$ = "$" : KBPress(Scancode()) = 1 : Endcase
Case 6 : s_value$ = "%" : KBPress(Scancode()) = 1 : Endcase
Case 7 : s_value$ = "^" : KBPress(Scancode()) = 1 : Endcase
Case 8 : s_value$ = "&" : KBPress(Scancode()) = 1 : Endcase
Case 9 : s_value$ = "*" : KBPress(Scancode()) = 1 : Endcase
Case 10 : s_value$ = "(" : KBPress(Scancode()) = 1 : Endcase
Case 11 : s_value$ = ")" : KBPress(Scancode()) = 1 : Endcase
Case 16 : s_value$ = "Q" : KBPress(Scancode()) = 1 : Endcase
Case 17 : s_value$ = "W" : KBPress(Scancode()) = 1 : Endcase
Case 18 : s_value$ = "E" : KBPress(Scancode()) = 1 : Endcase
Case 19 : s_value$ = "R" : KBPress(Scancode()) = 1 : Endcase
Case 20 : s_value$ = "T" : KBPress(Scancode()) = 1 : Endcase
Case 21 : s_value$ = "Y" : KBPress(Scancode()) = 1 : Endcase
Case 22 : s_value$ = "U" : KBPress(Scancode()) = 1 : Endcase
Case 23 : s_value$ = "I" : KBPress(Scancode()) = 1 : Endcase
Case 24 : s_value$ = "O" : KBPress(Scancode()) = 1 : Endcase
Case 25 : s_value$ = "P" : KBPress(Scancode()) = 1 : Endcase
Case 30 : s_value$ = "A" : KBPress(Scancode()) = 1 : Endcase
Case 31 : s_value$ = "S" : KBPress(Scancode()) = 1 : Endcase
Case 32 : s_value$ = "D" : KBPress(Scancode()) = 1 : Endcase
Case 33 : s_value$ = "F" : KBPress(Scancode()) = 1 : Endcase
Case 34 : s_value$ = "G" : KBPress(Scancode()) = 1 : Endcase
Case 35 : s_value$ = "H" : KBPress(Scancode()) = 1 : Endcase
Case 36 : s_value$ = "J" : KBPress(Scancode()) = 1 : Endcase
Case 37 : s_value$ = "K" : KBPress(Scancode()) = 1 : Endcase
Case 38 : s_value$ = "L" : KBPress(Scancode()) = 1 : Endcase
Case 44 : s_value$ = "Z" : KBPress(Scancode()) = 1 : Endcase
Case 45 : s_value$ = "X" : KBPress(Scancode()) = 1 : Endcase
Case 46 : s_value$ = "C" : KBPress(Scancode()) = 1 : Endcase
Case 47 : s_value$ = "V" : KBPress(Scancode()) = 1 : Endcase
Case 48 : s_value$ = "B" : KBPress(Scancode()) = 1 : Endcase
Case 49 : s_value$ = "N" : KBPress(Scancode()) = 1 : Endcase
Case 50 : s_value$ = "M" : KBPress(Scancode()) = 1 : Endcase
Case 52 : s_value$ = ">" : KBPress(Scancode()) = 1 : Endcase
Case 57 : s_value$ = " " : KBPress(Scancode()) = 1 : Endcase
Case 51 : s_value$ = "<" : KBPress(Scancode()) = 1 : Endcase
Case 53 : s_value$ = "?" : KBPress(Scancode()) = 1 : Endcase
Case 39 : s_value$ = ":" : KBPress(Scancode()) = 1 : Endcase
Case 40 : s_value$ = "'" : KBPress(Scancode()) = 1 : Endcase
Case 26 : s_value$ = "{" : KBPress(Scancode()) = 1 : Endcase
Case 27 : s_value$ = "}" : KBPress(Scancode()) = 1 : Endcase
Case 43 : s_value$ = "|" : KBPress(Scancode()) = 1 : Endcase
Case 41 : s_value$ = "~" : KBPress(Scancode()) = 1 : Endcase
Case 12 : s_value$ = "_" : KBPress(Scancode()) = 1 : Endcase
Case 13 : s_value$ = "+" : KBPress(Scancode()) = 1 : Endcase
Case Default : s_value$ = "" : Endcase
Endselect
endif
endif
if scancode() = 0
for x = 1 to 100
KBPress(x) = 0
next x
endif
if keystate(54) = 1
for x = 1 to 100
if keystate(x) = 0
KBPress(x) = 0
endif
next x
endif
ReturnString$ = String_I$ + s_value$
if scancode() = 14 and KBPress(14) = 0
delete = LEN(ReturnString$) - 1 : if delete < 0 then delete = 0
ReturnString$ = Left$(ReturnString$, delete)
KBPress(14) = 1
cls
endif
Endfunction ReturnString$
I hope this helps anyone looking for this kind of code in the future!