# 2.11BSD#431 - /usr/src/ucb/PORT/systat/keyboard.c

##### Functions

    keyboard          X

##### Macros

    mask              X

       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

keyboard defined in line 18; used 1 times

- in /usr/src/ucb/PORT/systat/main.c line 139

#### Defined variables

sccsid defined in line 8; never used

#### Defined macros

mask defined in line 36; used 3 times

- in line 38, 44, 86

Last modified: 1985-05-31 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 713 |