diff options
Diffstat (limited to 'interactive.c')
-rw-r--r-- | interactive.c | 36 |
1 files changed, 8 insertions, 28 deletions
diff --git a/interactive.c b/interactive.c index 6db84b0..3f753a3 100644 --- a/interactive.c +++ b/interactive.c @@ -19,46 +19,26 @@ #define _XOPEN_SOURCE 700 -#include "sh.h" #include <stdio.h> #include <stdlib.h> #include <string.h> -static char *sh_getline(char **cmdline) -{ - char *prompt = getenv(*cmdline ? "PS2" : "PS1"); - /* wordexpand prompt */ - fprintf(stderr, "%s", prompt); - - size_t n = 0; - getline(cmdline, &n, stdin); - return *cmdline; -} +#include "sh.h" +#include "shed.h" int sh_interactive(void) { - while (!feof(stdin)) { - char *cmdline = NULL; - sh_getline(&cmdline); - - if (cmdline == NULL) { - break; - } - - struct command *command = sh_parse(cmdline); - #if 0 - while (command == NULL) { - /* append more text */ - /* attempt parsing again */ - } - #endif + struct shed ed = { + .prompt = getenv("PS1"), + .handle = shed_handle_non_vi, + }; + while (shed(&ed) != NULL) { + struct command *command = sh_parse(ed.cur->buf); if (command) { sh_execute(command); sh_freecmd(command); } - - free(cmdline); } return 0; |