#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{ print("%S\n", 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); Datum *result = eval(tokens, &ntoks); if(ntoks == 1) return result; else{ free(tokens); return nil; } }