BBS: Inland Empire Archive Date: 01-03-93 (00:21) Number: 347 From: VICTOR YIU Refer#: NONE To: IMRAN HAYAT Recvd: NO Subj: GetInput 2/3 Conf: (2) Quik_Bas
>>>>--- Continued from last message...
FUNCTION GetInput$ (Prompt$, MaxLen)
IF MaxLen < 1 THEN MaxLen = 80 - LEN(Prompt$) - POS(0)
' 0 or -1 means all that will fit on the row
' Adjusts MaxLen to max. len to the end of the line if user
' passes in < 1
PRINT Prompt$; ' print prompt
StartX = POS(0) ' save cursor column, to use later as base
Cursor = 1 ' init. cursor
Insert = True ' default mode: insert
DO ' start main loop
IF Update THEN ' True if something changed in input
LOCATE , StartX, 0 ' locate at base
PRINT Out$; SpaceBar$; ' print input plus a space
Update = False ' reset flag
END IF
LOCATE , Cursor + StartX - 1, 1, (NOT Insert) * -7, 16
' locate cursor at end of text, with cursor on.
' cursor shape is dependent on insertion mode
DO: I$ = INKEY$ ' wait for input
LOOP UNTIL LEN(I$) ' --> NOTE:
' using LEN(I$) is _MUCH_ faster than
' using I$ <> ""
IF LEN(I$) = 1 THEN ' branch according to len. of input
Update = True ' set flag to update
SELECT CASE ASC(I$)
CASE IS >= 32 ' a normal char: just add it to string
IF (NOT Insert) OR (LEN(Out$) < MaxLen)
THEN ' within limits?
' able to add anymore?
IF Cursor > 0 THEN ' has user typed anything?
' Out$ = LEFT$(Out$, Cursor -
1) + I$ + MID$(Out$, Cursor)
' Out$ = LEFT$(Out$, Cursor -
1) + I$ + MID$(Out$, Cursor + 1)
Out$ = LEFT$(Out$, Cursor -
1) + I$ + MID$(Out$, Cursor - (NOT Insert))
ELSE
Out$ = I$ ' create new string
END IF
Cursor = Cursor + 1 ' advance cursor position
ELSE
Alarm ' can't add, so beep at them
Update = False ' don't update
END IF
CASE 8 ' backspace
IF LEN(Out$) AND (Cursor > 1) THEN 'can we backspace?
Out$ = LEFT$(Out$, Cursor - 2) +
MID$(Out$, Cursor) ' remove 1 char. before cursor
Cursor = Cursor - 1 ' adjust cursor
ELSE
Alarm
Update = False
END IF
CASE 13 ' enter
EXIT DO
CASE 27 ' escape
IF LEN(Out$) > 0 THEN ' has user typed anything?
LOCATE , StartX, 0 ' yes, so clear the string
PRINT SPACE$(LEN(Out$) + 1);
Out$ = ""
Cursor = 1 ' resetting cursor position
Update = False ' don't update: no reason to
ELSE
EXIT DO ' if nothing, just exit
END IF
END SELECT
ELSE ' extended ASCII code
SELECT CASE I$
CASE LeftK$
IF Cursor > 1 THEN
Cursor = Cursor - 1 ' move cursor left
ELSE
Alarm
END IF
CASE RightK$
IF Cursor < LEN(Out$) + 1 THEN
Cursor = Cursor + 1 ' move cursor right
ELSE
Alarm
END IF
CASE Delete$
IF LEN(Out$) > 0 AND (Cursor < LEN(Out$)) THEN
Out$ = LEFT$(Out$, Cursor - 1) +
MID$(Out$, Cursor + 1)
Update = True
ELSE
Alarm
END IF
>>>>>>>>>------------- continued on last message...
--- Blue Wave/RA v2.10 [NR]
* Origin: Hard Disc Cafe / Houston Texas / (713) 589-2690
/ RA 1.11 / (1:106/30.0)

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET