still serv_close bug...
[mit-jos.git] / lib / readline.c
blob6f8693ae4dc731f50b7b7cb5a30a07b7b0b3e29d
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 JOS_KERNEL
13 if (prompt != NULL)
14 cprintf("%s", prompt);
16 #else
17 if (prompt != NULL)
18 fprintf(1, "%s", prompt);
19 #endif
20 i = 0;
21 echoing = iscons(0);
22 while (1) {
23 c = getchar();
24 if (c < 0) {
25 if (c != -E_EOF)
26 cprintf("read error: %e\n", c);
27 return NULL;
28 } else if (c >= ' ' && i < BUFLEN-1) {
29 if (echoing)
30 cputchar(c);
31 buf[i++] = c;
32 } else if (c == '\b' && i > 0) {
33 if (echoing)
34 cputchar(c);
35 i--;
36 } else if (c == '\n' || c == '\r') {
37 if (echoing)
38 cputchar(c);
39 buf[i] = 0;
40 return buf;