* same with xv6
[mascara-docs.git] / i386 / ucla / src / lab2 / lib / readline.c
blobe555c440c111464898f677c89ffeaf4d262ecd01
1 #include <inc/stdio.h>
2 #include <inc/error.h>
4 #define BUFLEN 1024
5 static char buf[BUFLEN];
7 char *
8 readline(const char *prompt)
10 int i, c, echoing;
12 if (prompt != NULL)
13 cprintf("%s", prompt);
15 i = 0;
16 echoing = iscons(0) > 0;
17 while (1) {
18 c = getchar();
19 if (c < 0) {
20 cprintf("read error: %e\n", c);
21 return NULL;
22 } else if ((c == '\b' || c == '\x7f') && i > 0) {
23 if (echoing)
24 cputchar('\b');
25 i--;
26 } else if (c >= ' ' && i < BUFLEN-1) {
27 if (echoing)
28 cputchar(c);
29 buf[i++] = c;
30 } else if (c == '\n' || c == '\r') {
31 if (echoing)
32 cputchar('\n');
33 buf[i] = 0;
34 return buf;