From 480de114963ecee700ece5b8793916726c04b9ab Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Fri, 16 Jul 2021 15:25:01 +0000 Subject: Replace the C repl with one written in prolog :) --- repl.c | 87 ------------------------------------------------------------------ 1 file changed, 87 deletions(-) delete mode 100644 repl.c (limited to 'repl.c') diff --git a/repl.c b/repl.c deleted file mode 100644 index 5e619f7..0000000 --- a/repl.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include - -#include "dat.h" -#include "fns.h" - -Rune parsefindmore(int); -void dogc(void); - -void -repl(void) -{ - int fd = 0; /* Standard input */ - while(1){ - print("?- "); - replquery = parse(fd, nil, 1); - replbindings = nil; - choicestack = nil; - goalstack = nil; - int success; - int firsttime = 1; -FindMore: - success = evalquery(replquery, &replbindings); - dogc(); - if(firsttime){ - print(" "); - firsttime = 0; - } - if(success == 0) - print(" false.\n"); - else{ - if(replbindings == nil) - print(" true"); - else{ - while(replbindings){ - print(" %S = %S%s", - replbindings->name, - prettyprint(replbindings->value, 0, 0, 0, nil), - replbindings->next ? ",\n " : ""); - replbindings = replbindings->next; - } - } - if(choicestack != nil){ - print("\n"); - if(parsefindmore(fd) == L';'){ - print(";"); - goto FindMore; - }else - print(".\n"); - }else{ - print(".\n"); - } - } - } -} - -Rune -parsefindmore(int fd) -{ - int consctl = open("/dev/consctl", OWRITE); - if(consctl > 0) - write(consctl, "rawon", 5); - else{ - print("Could not open /dev/consctl\n"); - exits("open"); - } - - fd = dup(fd, -1); - Biobuf *input = Bfdopen(fd, OREAD); - Rune peek = Bgetrune(input); - Bterm(input); - - if(consctl > 0){ - write(consctl, "rawoff", 6); - close(consctl); - } - return peek; -} - -void -dogc(void) -{ - vlong amount = collectgarbage(); - if(amount != 0 && debug) - print("Collected %lld bytes of garbage\n", amount); -} \ No newline at end of file -- cgit v1.2.3