* same with xv6
[mascara-docs.git] / i386 / MIT / course / src / src.lab / lib / readline.c
blobb7030cd352c6ff1ea266ab6484b0cdb8a65e6541
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);
15 #else
16 if (prompt != NULL)
17 fprintf(1, "%s", prompt);
18 #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 == '\b' || c == '\x7f') && i > 0) {
29 if (echoing)
30 cputchar('\b');
31 i--;
32 } else if (c >= ' ' && i < BUFLEN-1) {
33 if (echoing)
34 cputchar(c);
35 buf[i++] = c;
36 } else if (c == '\n' || c == '\r') {
37 if (echoing)
38 cputchar('\n');
39 buf[i] = 0;
40 return buf;