Files
mop3/ce/ce.c
kamkow1 2a891fcdd1
All checks were successful
Build documentation / build-and-deploy (push) Successful in 2m38s
Split CE code into multiple files
2026-03-03 20:59:21 +01:00

72 lines
1.3 KiB
C

#include "arena_alloc.h"
#include "context.h"
#include "interp.h"
#include "mprintf.h"
#include "self.h"
#include "strbuf.h"
#include <arena.h>
#include <desc.h>
#include <filereader.h>
#include <filewriter.h>
#include <liballoc.h>
#include <list.h>
#include <minmax.h>
#include <path.h>
#include <printf.h>
#include <process.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <str_status.h>
#include <string.h>
#include <system.h>
#include <terminal_cursor.h>
#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);
}