blob: 861c206ce00c819ba84ff2e12fe9859af126151c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include <stdio.h>
#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;
}
|