#define RL_BUF_SIZE 1024 static char readline_buf[RL_BUF_SIZE]; StringView read_line(void) { // 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 (c == EOF || c == '\0') { return (StringView){ .start = NULL, .n = 0 }; } else if ((c >= ' ' && c <= '~') && n < RL_BUF_SIZE) { readline_buf[n] = c; n++; } } StringView sv = (StringView){ .start = (char *)&readline_buf, .n = n, }; return sv; }