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

##### Functions

    command           X
    lookup            X
    prefix            X
    status            X
    suspend           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[] = "@(#)cmds.c	5.4 (Berkeley) 12/11/85";
       9: #endif not lint
      10:
      11: /*
      12:  * Command support.
      13:  */
      14:
      15: #include "systat.h"
      16: #include <ctype.h>
      17:
      18: command(cmd)
      19:         char *cmd;
      20: {
      21:         register char *cp;
      22:         register struct cmdtab *p;
      23:     int interval, omask;
      24:     extern (*sigtstpdfl)();
      25:
      26:     omask = sigblock(sigmask(SIGALRM));
      27:         for (cp = cmd; *cp && !isspace(*cp); cp++)
      28:                 ;
      29:         if (*cp)
      30:                 *cp++ = '\0';
      31:     if (*cmd == '\0')
      32:         return;
      33:     for (; *cp && isspace(*cp); cp++)
      34:         ;
      35:         if (strcmp(cmd, "quit") == 0 || strcmp(cmd, "q") == 0)
      36:                 die();
      37:     if (strcmp(cmd, "load") == 0) {
      38:         load();
      39:         goto done;
      40:     }
      41:         if (strcmp(cmd, "stop") == 0) {
      42:                 alarm(0);
      43:                 mvaddstr(CMDLINE, 0, "Refresh disabled.");
      44:                 clrtoeol();
      45:         goto done;
      46:         }
      47:     if (strcmp(cmd, "help") == 0) {
      48:         int col, len;
      49:
      50:         move(CMDLINE, col = 0);
      51:         for (p = cmdtab; p->c_name; p++) {
      52:             len = strlen(p->c_name);
      53:             if (col + len > COLS)
      54:                 break;
      55:             addstr(p->c_name); col += len;
      56:             if (col + 1 < COLS)
      57:                 addch(' ');
      58:         }
      59:         clrtoeol();
      60:         goto done;
      61:     }
      62:     interval = atoi(cmd);
      63:         if (interval <= 0 &&
      64:         (strcmp(cmd, "start") == 0 || strcmp(cmd, "interval") == 0)) {
      65:         interval = *cp ? atoi(cp) : naptime;
      66:                 if (interval <= 0) {
      67:             error("%d: bad interval.", interval);
      68:             goto done;
      69:                 }
      70:     }
      71:     if (interval > 0) {
      72:                 alarm(0);
      73:                 naptime = interval;
      74:                 display();
      75:                 status();
      76:         goto done;
      77:         }
      78:     p = lookup(cmd);
      79:     if (p == (struct cmdtab *)-1) {
      80:         error("%s: Ambiguous command.", cmd);
      81:         goto done;
      82:     }
      83:         if (p) {
      84:                 if (curcmd == p)
      85:             goto done;
      86:                 alarm(0);
      87:         (*curcmd->c_close)(wnd);
      88:         wnd = (*p->c_open)();
      89:         if (wnd == 0) {
      90:             error("Couldn't open new display");
      91:             wnd = (*curcmd->c_open)();
      92:             if (wnd == 0) {
      93:                 error("Couldn't change back to previous cmd");
      94:                 exit(1);
      95:             }
      96:             p = curcmd;
      97:         }
      98:         if ((p->c_flags & CF_INIT) == 0) {
      99:             if ((*p->c_init)())
     100:                 p->c_flags |= CF_INIT;
     101:             else
     102:                 goto done;
     103:         }
     104:                 curcmd = p;
     105:         labels();
     106:                 display();
     107:                 status();
     108:         goto done;
     109:         }
     110:     if (curcmd->c_cmd == 0 || !(*curcmd->c_cmd)(cmd, cp))
     111:         error("%s: Unknown command.", cmd);
     112: done:
     113:     sigsetmask(omask);
     114: }
     115:
     116: struct cmdtab *
     117: lookup(name)
     118:     register char *name;
     119: {
     120:     register char *p, *q;
     121:     register struct cmdtab *c, *found;
     122:     register int nmatches, longest;
     123:
     124:     longest = 0;
     125:     nmatches = 0;
     126:     found = (struct cmdtab *)-1;
     127:     for (c = cmdtab; p = c->c_name; c++) {
     128:         for (q = name; *q == *p++; q++)
     129:             if (*q == 0)        /* exact match? */
     130:                 return (c);
     131:         if (!*q) {          /* the name was a prefix */
     132:             if (q - name > longest) {
     133:                 longest = q - name;
     134:                 nmatches = 1;
     135:                 found = c;
     136:             } else if (q - name == longest)
     137:                 nmatches++;
     138:         }
     139:     }
     140:     if (nmatches > 1)
     141:         return ((struct cmdtab *)-1);
     142:     return (found);
     143: }
     144:
     145: status()
     146: {
     147:
     148:         error("Showing %s, refresh every %d seconds.",
     149:           curcmd->c_name, naptime);
     150: }
     151:
     152: suspend()
     153: {
     154:         int oldmask;
     155:
     156:     alarm(0);
     157:         move(CMDLINE, 0);
     158:         refresh();
     159:         echo();
     160:         nocrmode();
     161:         signal(SIGTSTP, sigtstpdfl);
     162:         oldmask = sigsetmask(0);
     163:         kill(getpid(), SIGTSTP);
     164:         sigsetmask(oldmask);
     165:         signal(SIGTSTP, suspend);
     166:         crmode();
     167:         noecho();
     168:         move(CMDLINE, col);
     169:     alarm(naptime);
     170: }
     171:
     172: prefix(s1, s2)
     173:         register char *s1, *s2;
     174: {
     175:
     176:         while (*s1 == *s2) {
     177:                 if (*s1 == '\0')
     178:                         return (1);
     179:                 s1++, s2++;
     180:         }
     181:         return (*s1 == '\0');
     182: }

#### Defined functions

command defined in line 18; used 2 times

- in /usr/src/ucb/PORT/systat/keyboard.c line 87
- in /usr/src/ucb/PORT/systat/vmstat.c line 334

lookup defined in line 116; used 3 times

- in line 78
- in /usr/src/ucb/PORT/systat/main.c line 56
- in /usr/src/ucb/PORT/systat/systat.h line 60

prefix defined in line 172; used 26 times

- in /usr/src/ucb/PORT/systat/disks.c line 78-86(5)
- in /usr/src/ucb/PORT/systat/iostat.c line 327-331(3)
- in /usr/src/ucb/PORT/systat/netcmds.c line 32-40(6), 46, 54-58(3)
- in /usr/src/ucb/PORT/systat/netstat.c line 391-398(4)
- in /usr/src/ucb/PORT/systat/vmstat.c line 504-518(4)

status defined in line 145; used 3 times

- in line 75, 107
- in /usr/src/ucb/PORT/systat/keyboard.c line 45

suspend defined in line 152; used 3 times

- in line 165
- in /usr/src/ucb/PORT/systat/main.c line 38, 135

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1986-01-11 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 907 |