#include #include "shorthand.h" typedef struct StringView { char *start; size_t n; } StringView; void sv_write(StringView sv) { for (size_t i = 0; i < sv.n; i++) { putchar(sv.start[i]); } } StringView read_line(void) { #define RL_BUF_SIZE 1024 static char readline_buf[RL_BUF_SIZE]; // Clear buffer. for (size_t i = 0; i < RL_BUF_SIZE; i++) { readline_buf[i] = 0; } // Barebones readline implementation. size_t n = 0; char c; while ((c = getchar()) != '\n') { if (c == '\b') { readline_buf[n] = '\0'; n--; } else if (((u8)c >= 0x20 && (u8)c <= 0x7F) && n < RL_BUF_SIZE) { readline_buf[n] = c; n++; } } return (StringView){.start = (char *)&readline_buf, .n = n}; } void display(StringView sv) { if (sv.n != 0) { sv_write(sv); printf("\n"); } } #define REPL_PROMPT "bdl> " int main(void) { printf("BDL REPL (Press Ctrl-C to exit)\n"); while (true) { printf(REPL_PROMPT); display(read_line()); } return 0; }