From eeff5e273f22aa28e81ab080e9ffdce85ac394b8 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 22 Oct 2021 09:59:31 +0200 Subject: Prepare skeleton for bytecode interpreter --- src/treewalk/read_line.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/treewalk/read_line.c (limited to 'src/treewalk/read_line.c') diff --git a/src/treewalk/read_line.c b/src/treewalk/read_line.c new file mode 100644 index 0000000..03146ad --- /dev/null +++ b/src/treewalk/read_line.c @@ -0,0 +1,32 @@ +#include "read_line.h" + +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; +} -- cgit v1.2.1