1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 01:57:09 +03:00
mal/basic/readline.in.bas
Joel Martin f9f1cec9cc Basic: memory savings and variable simplifications.
In core move incrementing of function index into
INIT_CORE_SET_FUNCTION. Switch 3 IF GOTO to ON GOTO. Reuse some
temporary variables.

Saves about 480 bytes.

Bump value array from 3950 to 4096. This allows step4 (sumdown 2) to
pass. Previously only (sumdown 1) passed.
2016-11-06 17:29:11 -06:00

32 lines
787 B
QBasic

REM READLINE(A$) -> R$
READLINE:
EZ=0
PRINT A$;
C$="":R$="":C=0
READCH:
#cbm GET C$
#qbasic C$=INKEY$
IF C$="" THEN GOTO READCH
C=ASC(C$)
REM PRINT C
#qbasic IF ASC(C$)=8 THEN C=20:C$=CHR$(20)
IF C=4 OR C=0 THEN EZ=1:GOTO RL_DONE: REM EOF
IF C=127 OR C=20 THEN GOSUB RL_BACKSPACE
IF C=127 OR C=20 THEN GOTO READCH
IF (C<32 OR C>127) AND C<>13 THEN GOTO READCH
PRINT C$;
IF LEN(R$)<255 AND C$<>CHR$(13) THEN R$=R$+C$
IF LEN(R$)<255 AND C$<>CHR$(13) THEN GOTO READCH
RL_DONE:
RETURN
REM Assumes R$ has input buffer
RL_BACKSPACE:
IF LEN(R$)=0 THEN RETURN
R$=LEFT$(R$,LEN(R$)-1)
#cbm PRINT CHR$(157)+" "+CHR$(157);
#qbasic LOCATE ,POS(0)-1
#qbasic PRINT " ";
#qbasic LOCATE ,POS(0)-1
RETURN