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

Defined variables

sccsid defined in line 8; never used

Defined macros

mask defined in line 36; used 3 times
Last modified: 1985-05-31
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2501
Valid CSS Valid XHTML 1.0 Strict