5 * prompt for a string with a possible default response
8 readcons(char *prompt, char *def, int raw)
10 int fdin, fdout, ctl, n;
16 if((fdin = open("/dev/cons", OREAD)) < 0)
18 if((fdout = open("/dev/cons", OWRITE)) < 0)
22 if((ctl = open("/dev/consctl", OWRITE)) < 0)
24 write(ctl, "rawon", 5);
28 fprint(fdout, "%s[%s]: ", prompt, def);
30 fprint(fdout, "%s: ", prompt);
35 if((p = realloc(s, n+32)) == nil)
40 if(read(fdin, p, 1) <= 0 || *p == 0x7f)
43 if(*p == '\n' || *p == '\r'){
44 if(p == s && def != nil){
50 write(fdout, "\n", 1);
52 } else if(*p == '\b') {
53 while(p > s && (p[-1] & 0xc0) == 0x80)
57 } else if(*p == 0x15) { /* ^U: line kill */
59 fprint(fdout, "\n%s[%s]: ", prompt, def);
61 fprint(fdout, "\n%s: ", prompt);
70 write(fdout, "\n", 1);
73 write(ctl, "rawoff", 6);