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: }
Defined functions
Defined variables
sccsid
defined in line
8;
never used
Defined macros
mask
defined in line
36; used 3 times