Posted: 6th Mar 2014 1:13
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 Snippet
Rem 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 Snippet
Rem 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!
Posted: 11th Mar 2014 20:42
This is an elegant solution to the problem. But I take it you haven't heard of the entry$ command?

+ Code Snippet
do
myString$ = myString$ + entry$(1)
clear entry buffer

cls
print "Type Something> " + myString$
loop


EDIT: Also, the proper grammar in your sig is "it tolls for thee"
Posted: 11th Mar 2014 23:01
No, I hadn't been familiar with that command. That simplifies it wonderfully, lol. Between my code and your response, this thread should be very helpful for newbies researching the topic. That's exactly the kind of command and example I had been searching for. Thank you.

I'll consider the work done on the function to be part of a greater learning experience XD

I've been aware of the misquote on the sig for a while. It still reads well, though, and I use it for inspiration... like a metaphor for that part of your code that you saw flaws in but never fixed because it worked well enough. It's a reminder to write code properly before moving on!