|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)keyboard.c 5.1 (Berkeley) 5/30/85"; ! 9: #endif not lint ! 10: ! 11: /* ! 12: * Keyboard input support. ! 13: */ ! 14: ! 15: #include "systat.h" ! 16: #include <ctype.h> ! 17: ! 18: keyboard() ! 19: { ! 20: char ch, line[80]; ! 21: int oldmask; ! 22: ! 23: for (;;) { ! 24: col = 0; ! 25: move(CMDLINE, 0); ! 26: do { ! 27: refresh(); ! 28: ch = getch() & 0177; ! 29: if (ch == 0177 && ferror(stdin)) { ! 30: clearerr(stdin); ! 31: continue; ! 32: } ! 33: if (ch >= 'A' && ch <= 'Z') ! 34: ch += 'a' - 'A'; ! 35: if (col == 0) { ! 36: #define mask(s) (1 << ((s) - 1)) ! 37: if (ch == CTRL(l)) { ! 38: oldmask = sigblock(mask(SIGALRM)); ! 39: wrefresh(curscr); ! 40: sigsetmask(oldmask); ! 41: continue; ! 42: } ! 43: if (ch == CTRL(g)) { ! 44: oldmask = sigblock(mask(SIGALRM)); ! 45: status(); ! 46: sigsetmask(oldmask); ! 47: continue; ! 48: } ! 49: if (ch != ':') ! 50: continue; ! 51: move(CMDLINE, 0); ! 52: clrtoeol(); ! 53: } ! 54: if (ch == _tty.sg_erase && col > 0) { ! 55: if (col == 1 && line[0] == ':') ! 56: continue; ! 57: col--; ! 58: goto doerase; ! 59: } ! 60: if (ch == CTRL(w) && col > 0) { ! 61: while (--col >= 0 && isspace(line[col])) ! 62: ; ! 63: col++; ! 64: while (--col >= 0 && !isspace(line[col])) ! 65: if (col == 0 && line[0] == ':') ! 66: break; ! 67: col++; ! 68: goto doerase; ! 69: } ! 70: if (ch == _tty.sg_kill && col > 0) { ! 71: col = 0; ! 72: if (line[0] == ':') ! 73: col++; ! 74: doerase: ! 75: move(CMDLINE, col); ! 76: clrtoeol(); ! 77: continue; ! 78: } ! 79: if (isprint(ch) || ch == ' ') { ! 80: line[col] = ch; ! 81: mvaddch(CMDLINE, col, ch); ! 82: col++; ! 83: } ! 84: } while (col == 0 || (ch != '\r' && ch != '\n')); ! 85: line[col] = '\0'; ! 86: oldmask = sigblock(mask(SIGALRM)); ! 87: command(line + 1); ! 88: sigsetmask(oldmask); ! 89: } ! 90: /*NOTREACHED*/ ! 91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.