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