From 859c33f37f0174a7b9d76cdcbe889ff12047c99c Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sat, 9 Oct 2021 19:00:17 +0200 Subject: Split main into separate files --- src/bootstrap/readline.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/bootstrap/readline.c (limited to 'src/bootstrap/readline.c') diff --git a/src/bootstrap/readline.c b/src/bootstrap/readline.c new file mode 100644 index 0000000..dfd8285 --- /dev/null +++ b/src/bootstrap/readline.c @@ -0,0 +1,28 @@ +#define READLINE_VALID_CHAR(C) (((u8)(C) >= 0x20 && (u8)(C) < 0x7F) || (C) == '\n') + +StringView +read_line(FILE *fd, char delimiter) { + #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 = getc(fd)) != delimiter) { + if (c == '\b') { + readline_buf[n] = '\0'; + n--; + } else if (READLINE_VALID_CHAR(c) && n < RL_BUF_SIZE) { + readline_buf[n] = c; + n++; + } + } + + return (StringView){.start = (char *)&readline_buf, .n = n}; +} + -- cgit v1.2.1