Basic: step1 basics.
[jackhill/mal.git] / basic / readline.in.bas
1 EOF=0
2
3 REM READLINE(A$) -> R$
4 READLINE:
5 EOF=0
6 PROMPT$=A$
7 PRINT PROMPT$;
8 CH$="": LINE$="": CH=0
9 READCH:
10 GET CH$: IF CH$="" THEN READCH
11 CH=ASC(CH$)
12 IF (CH=4 OR CH=0) THEN EOF=1: GOTO RL_DONE: REM EOF
13 IF (CH=127) THEN GOSUB RL_BACKSPACE
14 IF (CH=127) THEN GOTO READCH
15 IF (CH<32 OR CH>127) AND CH<>13 THEN READCH
16 IF LEN(LINE$)<255 AND CH$<>CHR$(13) THEN LINE$=LINE$+CH$
17 IF LEN(LINE$)<255 AND CH$<>CHR$(13) THEN GOTO READCH
18 RL_DONE:
19 R$=LINE$
20 RETURN
21
22 REM Assumes LINE$ has input buffer
23 RL_BACKSPACE:
24 IF LEN(LINE$)=0 THEN RL_BACKSPACE_ONCE:
25 PRINT CHR$(157) + CHR$(157) + " " + CHR$(157) + CHR$(157);
26 LINE$=LEFT$(LINE$, LEN(LINE$)-1)
27 RETURN
28 RL_BACKSPACE_ONCE:
29 PRINT CHR$(157) + " " + CHR$(157);
30 RETURN