From b9ceb80c9caa2a4a1659615991e7daa0b1d9fb66 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Mon, 29 Jan 2018 20:19:22 -0500 Subject: rewrite; a lot better now --- shell.c | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'shell.c') diff --git a/shell.c b/shell.c index b19add8..578cabe 100644 --- a/shell.c +++ b/shell.c @@ -1,26 +1,42 @@ #include #include +#include +#include -void test(stack_t *stack) +void test(interpreter *it) { - printf("%s\n", stack[0]); + char *s = igetarg_string(it, 0); + if (s == 0) + s = "(null)"; + printf("%s\n", s); } -int main(int argc, char *argv[]) +void quit(interpreter *it) +{ + (void)it; + exit(0); +} + +int main() { interpreter interp; - interpreter_init(&interp); - interpreter_define_value(&interp, "answer", "42"); - interpreter_define_cfunc(&interp, "test", test); + iinit(&interp); + inew_integer(&interp, "answer", 42); + inew_cfunc(&interp, "put", test); + inew_cfunc(&interp, "exit", quit); + - if (argc > 1) { - for (int i = 1; i < argc; i++) { - int result = interpreter_doline(&interp, argv[i]); - if (result != 0) - printf("%d\n", result); - } + char *line = 0; + unsigned int size; + int result; + while (1) { + getline(&line, &size, stdin); + *strchr(line, '\n') = '\0'; + result = idoline(&interp, line); + if (result != 0) + printf("Error: %d\n", result); } return 0; -- cgit v1.2.3