1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-09-04 11:10:15 +00:00
qb64/programs/samples/pete/kbdparse.bas
SMcNeill 6e01fc8dce Altered string compare routines (<,<=,>,>=) so they don't give false results with CHR$(0).
Added new _STRCMP and _STRICMP commands for quick string comparisons.
Cleaned up QB64 to finish removing the QUI (quick user insert) code and folders.
Altered UCASE and LCASE routines to be faster in some situations for us.
2014-09-22 08:19:03 -04:00

104 lines
No EOL
4 KiB
QBasic

'***************************************************************************
'*
'* Keyboard input parsing routine
'*
'* The idea here was to create a program that will capture input from the
'* keyboard and convert it into a list of words as individual strings as
'* the user enters text from the keyboard. Exit from the program occurs
'* when a carraige return is encountered.
'*
'* Using the backspace key will back up thru the text that was entered, but
'* for some reason it takes three key presses of backspace to go past a word
'* boundry. The function works so I didn't worry about it.
'*
'*
'*
'* Placed in the public domain by
'* William W. Sindel
'* April 6, 2005
'* Version 1.0
'*
'***************************************************************************
PRGSTART:
DIM word$(30) '* Max number of words we can parse
CLS '*
PRINT "start": PRINT '* Just show us where we start
WX = 1 '* Set word counter var to 1
GETKEY:
IF WX < 1 THEN WX = 1 '* To many backspaces would push
'* would push wx out of range
KB$ = INKEY$ '*
IF KB$ <> "" THEN GOTO printit '* Loop here until a key is pressed
GOTO GETKEY
printit:
TESTNUM = ASC(KB$) '* Find the numeric value of the
IF TESTNUM = 13 THEN GOTO ENDGET '* key that was pressed. This will
'* let us identify carraige returns
'* 13 = carraige return
'* Check for backspace key
IF TESTNUM <> 8 THEN GOTO SKIPBACK
'*
'* When backspace key pushes past a
'* word boundry
IF word$(WX) = "" THEN WX = WX - 1: GOTO GETKEY
WL = LEN(word$(WX)) '* Find the length of the word
WL = WL - 1 '* Shorten the wordlength by one char
TW$ = word$(WX) '* Get string out of the array
TW$ = LEFT$(TW$, WL) '* Shorten the string
word$(WX) = TW$ '* Put the string back in the array
KB$ = "" '* Get rid of the backspace char
GOTO RFRSH '* Update the screen
SKIPBACK: '* Don't accept special characters
IF TESTNUM < 32 OR TESTNUM > 122 THEN GOTO GETKEY
'* Convert lower case to upper
IF KB$ >= "a" AND KB$ <= "z" THEN KB$ = CHR$(ASC(KB$) - 32)
word$(WX) = word$(WX) + KB$ '* Build the word
'* 13 = no leading spaces
IF word$(1) = " " THEN word$(1) = "": GOTO GETKEY
'* Start the next word
IF KB$ = " " THEN WX = WX + 1: GOTO GETKEY
RFRSH: '* Loop thru the array to display
FOR J = 1 TO WX '* the words as they are parsed
LOCATE 10 + J, 1
PRINT SPC(78);
LOCATE 10 + J, 1
PRINT word$(J)
NEXT J
GOTO GETKEY '* Go get another character
ENDGET:
LOCATE 35, 1 '* When a carraige return is
FOR J = 1 TO WX '* detected print out the words
PRINT word$(J); '* as a sentence
NEXT J
INPUT KB$ '* This will leave the results on
'* the screen until a carraige
'* is entered
END