#include "arena_alloc.h" #include "context.h" #include "interp.h" #include "mprintf.h" #include "self.h" #include "strbuf.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LINE_BUFFER_MAX 1024 #define PROMPT "$ " static void exec_line (const char* line) { struct list_node_link* tokens = NULL; tokenize (&tokens, line); if (tokens != NULL) parse_and_execute (tokens); arena_reset (&arena); } void app_main (void) { e_pid = get_exec_pid (); e_pgid = get_procgroup (e_pid); size_t line_cursor = 0; char line_buffer[LINE_BUFFER_MAX + 1]; memset (line_buffer, 0, sizeof (line_buffer)); while (interp_is_running ()) { mprintf (PROMPT); char ch = 0; for (;;) { mail_receive (&ch, 1); if (ch == '\n') break; if (line_cursor < LINE_BUFFER_MAX) { line_buffer[line_cursor++] = ch; mprintf ("%c", ch); } } mprintf ("\n"); exec_line (line_buffer); line_cursor = 0; memset (line_buffer, 0, sizeof (line_buffer)); } arena_destroy (&arena); }