From 1ef3119fe613823a2145126c58948361ca7d3cd8 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sat, 8 Jan 2022 22:45:00 +0000 Subject: Add initial code, just to get started --- main.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..04264b1 --- /dev/null +++ b/main.c @@ -0,0 +1,62 @@ +#include +#include +#include + +#include "apl9.h" + +Rune *prompt(Rune *); +Datum *evalline(Rune *); + +Biobuf *stdin; + +void +main(void) +{ + int off = 0; + stdin = Bfdopen(0, OREAD); + + while(!off){ + Rune *input = prompt(L"\t"); + Datum *result = evalline(input); + if(result == nil){ + if(errormsg == nil) + off = 1; + else + print("ERROR: %S\n", errormsg); + }else{ + ppdatum(*result); + free(result); + } + } + exits(nil); +} + +Rune * +prompt(Rune *pr) +{ + Rune line[MAX_LINE_LENGTH]; + + print("%S",pr); + + int i = 0; + line[0] = 0; + while(i == 0 || line[i-1] != '\n') + line[i++] = Bgetrune(stdin); + line[i-1] = 0; + return runestrdup(line); +} + +Datum * +evalline(Rune *line) +{ + int ntoks; + Datum *tokens = lexline(line, &ntoks); + print("Evaluating line (n=%d): %S\n", ntoks, ppdatums(tokens, ntoks)); + Datum *result = eval(tokens, &ntoks); + if(ntoks == 1) + return result; + else{ + free(tokens); + return nil; + } +} \ No newline at end of file -- cgit v1.2.3