diff options
Diffstat (limited to 'console.c')
-rw-r--r-- | console.c | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -208,6 +208,41 @@ consolewrite(struct inode *ip, char *buf, int n) } void +consoleintr(int c) +{ + acquire(&cons.lock); + + switch(c){ + case C('U'): // Kill line. + while(input.e != input.w && + input.buf[(input.e-1) % INPUT_BUF] != '\n'){ + input.e--; + consputc(BACKSPACE); + } + break; + case C('H'): case '\x7f': // Backspace + if(input.e != input.w){ + input.e--; + consputc(BACKSPACE); + } + break; + default: + if(c != 0 && input.e-input.r < INPUT_BUF){ + c = (c == '\r') ? '\n' : c; + input.buf[input.e++ % INPUT_BUF] = c; + consputc(c); + if(c == '\n' || c == C('D') || input.e == input.r+INPUT_BUF){ + input.w = input.e; + wakeup(&input.r); + } + } + break; + } + + release(&cons.lock); +} + +void consoleinit(void) { initlock(&cons.lock, "console"); |