Basic: step7 basics, reader macros. step1,3 tests.
[jackhill/mal.git] / basic / step1_read_print.in.bas
1 GOTO MAIN
2
3 REM $INCLUDE: 'readline.in.bas'
4 REM $INCLUDE: 'types.in.bas'
5 REM $INCLUDE: 'reader.in.bas'
6 REM $INCLUDE: 'printer.in.bas'
7
8 REM $INCLUDE: 'debug.in.bas'
9
10 REM READ(A$) -> R%
11 MAL_READ:
12 GOSUB READ_STR
13 RETURN
14
15 REM EVAL(A%, E%) -> R%
16 EVAL:
17 R%=A%
18 RETURN
19
20 REM PRINT(A%) -> R$
21 MAL_PRINT:
22 AZ%=A%: PR%=1: GOSUB PR_STR
23 RETURN
24
25 REM REP(A$) -> R$
26 REP:
27 GOSUB MAL_READ
28 IF ER%<>0 THEN GOTO REP_DONE
29
30 A%=R%: GOSUB EVAL
31 IF ER%<>0 THEN GOTO REP_DONE
32
33 A%=R%: GOSUB MAL_PRINT
34 RT$=R$
35
36 REP_DONE:
37 REM Release memory from EVAL
38 AY%=R%: GOSUB RELEASE
39 R$=RT$
40 RETURN
41
42 REM MAIN program
43 MAIN:
44 GOSUB INIT_MEMORY
45
46 ZT%=ZI%: REM top of memory after base repl_env
47
48 REPL_LOOP:
49 A$="user> ": GOSUB READLINE: REM call input parser
50 IF EOF=1 THEN GOTO QUIT
51
52 A$=R$: GOSUB REP: REM call REP
53
54 IF ER%<>0 THEN GOSUB PRINT_ERROR: GOTO REPL_LOOP
55 PRINT R$
56 GOTO REPL_LOOP
57
58 QUIT:
59 REM P1%=ZT%: P2%=-1: GOSUB PR_MEMORY
60 GOSUB PR_MEMORY_SUMMARY
61 END
62
63 PRINT_ERROR:
64 PRINT "Error: "+ER$
65 ER%=0: ER$=""
66 RETURN
67