Commit | Line | Data |
---|---|---|
11f94d2e JM |
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 | ||
9e8f5211 JM |
8 | REM $INCLUDE: 'debug.in.bas' |
9 | ||
b7b1787f | 10 | REM READ(A$) -> R% |
11f94d2e JM |
11 | MAL_READ: |
12 | GOSUB READ_STR | |
13 | RETURN | |
14 | ||
b7b1787f | 15 | REM EVAL(A%, E%) -> R% |
11f94d2e JM |
16 | EVAL: |
17 | R%=A% | |
18 | RETURN | |
19 | ||
b7b1787f | 20 | REM PRINT(A%) -> R$ |
11f94d2e | 21 | MAL_PRINT: |
241d5d57 | 22 | AZ%=A%: PR%=1: GOSUB PR_STR |
11f94d2e JM |
23 | RETURN |
24 | ||
b7b1787f | 25 | REM REP(A$) -> R$ |
11f94d2e JM |
26 | REP: |
27 | GOSUB MAL_READ | |
85d70fb7 JM |
28 | IF ER%<>0 THEN GOTO REP_DONE |
29 | ||
b7b1787f | 30 | A%=R%: GOSUB EVAL |
85d70fb7 | 31 | IF ER%<>0 THEN GOTO REP_DONE |
4b84a23b | 32 | |
85d70fb7 JM |
33 | A%=R%: GOSUB MAL_PRINT |
34 | RT$=R$ | |
4b84a23b | 35 | |
85d70fb7 JM |
36 | REP_DONE: |
37 | REM Release memory from EVAL | |
38 | AY%=R%: GOSUB RELEASE | |
39 | R$=RT$ | |
40 | RETURN | |
11f94d2e | 41 | |
b7b1787f | 42 | REM MAIN program |
11f94d2e JM |
43 | MAIN: |
44 | GOSUB INIT_MEMORY | |
b7b1787f | 45 | |
85d70fb7 | 46 | ZT%=ZI%: REM top of memory after base repl_env |
4b84a23b | 47 | |
85d70fb7 | 48 | REPL_LOOP: |
9e8f5211 | 49 | A$="user> ": GOSUB READLINE: REM call input parser |
85d70fb7 JM |
50 | IF EOF=1 THEN GOTO QUIT |
51 | ||
52 | A$=R$: GOSUB REP: REM call REP | |
11f94d2e | 53 | |
85d70fb7 JM |
54 | IF ER%<>0 THEN GOSUB PRINT_ERROR: GOTO REPL_LOOP |
55 | PRINT R$ | |
56 | GOTO REPL_LOOP | |
11f94d2e | 57 | |
85d70fb7 JM |
58 | QUIT: |
59 | REM P1%=ZT%: P2%=-1: GOSUB PR_MEMORY | |
241d5d57 | 60 | GOSUB PR_MEMORY_SUMMARY |
b7b1787f JM |
61 | END |
62 | ||
85d70fb7 | 63 | PRINT_ERROR: |
bf8d1f7d | 64 | PRINT "Error: "+ER$ |
9e8f5211 | 65 | ER%=0: ER$="" |
85d70fb7 JM |
66 | RETURN |
67 |