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

##### Functions

    die               X
    display           X
    error             X
    labels            X
    load              X
    main              X

##### Variables

    ccpu              X
    copyright         X
    dellave           X
    kmem              X
    mem               X
    naptime           X
    swap              X

##### Macros

    X_AVENRUN         X
    X_CCPU            X
    X_HZ              X
    X_PHZ             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: char copyright[] =
       9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
      10:  All rights reserved.\n";
      11: #endif not lint
      12:
      13: #ifndef lint
      14: static char sccsid[] = "@(#)main.c	5.2 (Berkeley) 8/13/85";
      15: #endif not lint
      16:
      17: #include "systat.h"
      18:
      19: static struct nlist nlst[] = {
      20: #define X_CCPU          0
      21:         { "_ccpu" },
      22: #define X_AVENRUN       1
      23:         { "_avenrun" },
      24: #define X_HZ        2
      25:     { "_hz" },
      26: #define X_PHZ       3
      27:     { "_phz" },
      28:         { "" }
      29: };
      30:
      31: int     kmem = -1;
      32: int     mem = -1;
      33: int     swap = -1;
      34: int naptime = 5;
      35:
      36: int     die();
      37: int     display();
      38: int     suspend();
      39: int (*sigtstpdfl)();
      40:
      41: double  ccpu;
      42: int     dellave;
      43:
      44: static  WINDOW *wload;          /* one line window for load average */
      45:
      46: main(argc, argv)
      47:         int argc;
      48:         char **argv;
      49: {
      50:
      51:     argc--, argv++;
      52:     while (argc > 0) {
      53:         if (argv[0][0] == '-') {
      54:             struct cmdtab *p;
      55:
      56:             p = lookup(&argv[0][1]);
      57:             if (p == (struct cmdtab *)-1) {
      58:                 fprintf(stderr, "%s: unknown request\n",
      59:                     &argv[0][1]);
      60:                 exit(1);
      61:             }
      62:             curcmd = p;
      63:         } else {
      64:             naptime = atoi(argv[1]);
      65:             if (naptime < 5)
      66:                 naptime = 5;
      67:         }
      68:         argc--, argv++;
      69:     }
      70:         nlist("/vmunix", nlst);
      71:     if (nlst[X_CCPU].n_type == 0) {
      72:         fprintf(stderr, "Couldn't namelist /vmunix.\n");
      73:         exit(1);
      74:     }
      75:     kmemf = "/dev/kmem";
      76:     kmem = open(kmemf, O_RDONLY);
      77:     if (kmem < 0) {
      78:         perror(kmemf);
      79:         exit(1);
      80:     }
      81:     memf = "/dev/mem";
      82:     mem = open(memf, O_RDONLY);
      83:     if (mem < 0) {
      84:         perror(memf);
      85:         exit(1);
      86:     }
      87:     swapf = "/dev/drum";
      88:     swap = open(swapf, O_RDONLY);
      89:     if (swap < 0) {
      90:         perror(swapf);
      91:         exit(1);
      92:     }
      93:         signal(SIGINT, die);
      94:         signal(SIGQUIT, die);
      95:         signal(SIGTERM, die);
      96:
      97:         /*
      98: 	 * Initialize display.  Load average appears in a one line
      99: 	 * window of its own.  Current command's display appears in
     100: 	 * an overlapping sub-window of stdscr configured by the display
     101: 	 * routines to minimize update work by curses.
     102: 	 */
     103:         initscr();
     104:     CMDLINE = LINES - 1;
     105:     wnd = (*curcmd->c_open)();
     106:     if (wnd == NULL) {
     107:         fprintf(stderr, "Couldn't initialize display.\n");
     108:         die();
     109:     }
     110:     wload = newwin(1, 0, 3, 20);
     111:     if (wload == NULL) {
     112:         fprintf(stderr, "Couldn't set up load average window.\n");
     113:         die();
     114:     }
     115:
     116:         gethostname(hostname, sizeof (hostname));
     117:         lseek(kmem, nlst[X_CCPU].n_value, L_SET);
     118:         read(kmem, &ccpu, sizeof (ccpu));
     119:         lccpu = log(ccpu);
     120:     hz = getw(nlst[X_HZ].n_value);
     121:     phz = getw(nlst[X_PHZ].n_value);
     122:     (*curcmd->c_init)();
     123:     curcmd->c_flags |= CF_INIT;
     124:         labels();
     125:
     126:         known[0].k_uid = -1;
     127:     known[0].k_name[0] = '\0';
     128:         numknown = 1;
     129:     procs[0].pid = -1;
     130:     strcpy(procs[0].cmd, "<idle>");
     131:     numprocs = 1;
     132:         dellave = 0.0;
     133:
     134:         signal(SIGALRM, display);
     135:         sigtstpdfl = signal(SIGTSTP, suspend);
     136:         display();
     137:         noecho();
     138:         crmode();
     139:     keyboard();
     140:     /*NOTREACHED*/
     141: }
     142:
     143: labels()
     144: {
     145:
     146:     if (curcmd->c_flags & CF_LOADAV) {
     147:         mvaddstr(2, 20,
     148:             "/0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10");
     149:         mvaddstr(3, 5, "Load Average");
     150:     }
     151:         (*curcmd->c_label)();
     152: #ifdef notdef
     153:         mvprintw(21, 25, "CPU usage on %s", hostname);
     154: #endif
     155:         refresh();
     156: }
     157:
     158: display()
     159: {
     160:         register int i, j;
     161:
     162:         /* Get the load average over the last minute. */
     163:         lseek(kmem, nlst[X_AVENRUN].n_value, L_SET);
     164:     read(kmem, avenrun, sizeof (avenrun));
     165:         (*curcmd->c_fetch)();
     166:     if (curcmd->c_flags & CF_LOADAV) {
     167:         j = 5.0*avenrun[0] + 0.5;
     168:         dellave -= avenrun[0];
     169:         if (dellave >= 0.0)
     170:             c = '<';
     171:         else {
     172:             c = '>';
     173:             dellave = -dellave;
     174:         }
     175:         if (dellave < 0.1)
     176:             c = '|';
     177:         dellave = avenrun[0];
     178:         wmove(wload, 0, 0); wclrtoeol(wload);
     179:         for (i = (j > 50) ? 50 : j; i > 0; i--)
     180:             waddch(wload, c);
     181:         if (j > 50)
     182:             wprintw(wload, " %4.1f", avenrun[0]);
     183:     }
     184:         (*curcmd->c_refresh)();
     185:     if (curcmd->c_flags & CF_LOADAV)
     186:         wrefresh(wload);
     187:         wrefresh(wnd);
     188:         move(CMDLINE, col);
     189:         refresh();
     190:         alarm(naptime);
     191: }
     192:
     193: load()
     194: {
     195:     double  avenrun[3];
     196:
     197:     lseek(kmem, nlst[X_AVENRUN].n_value, L_SET);
     198:     read(kmem, avenrun, sizeof (avenrun));
     199:     mvprintw(CMDLINE, 0, "%4.1f %4.1f %4.1f",
     200:         avenrun[0], avenrun[1], avenrun[2]);
     201:     clrtoeol();
     202: }
     203:
     204: die()
     205: {
     206:
     207:         endwin();
     208:         exit(0);
     209: }
     210:
     211: error(fmt, a1, a2, a3)
     212: {
     213:
     214:     mvprintw(CMDLINE, 0, fmt, a1, a2, a3);
     215:     clrtoeol();
     216:     refresh();
     217: }

#### Defined functions

die defined in line 204; used 7 times

- in line 36, 93-95(3), 108-113(2)
- in /usr/src/ucb/PORT/systat/cmds.c line 36

display defined in line 158; used 5 times

- in line 37, 134-136(2)
- in /usr/src/ucb/PORT/systat/cmds.c line 74, 106

error defined in line 211; used 35 times

- in /usr/src/ucb/PORT/systat/cmds.c line 67, 80, 90-93(2), 111, 148
- in /usr/src/ucb/PORT/systat/disks.c line 44-49(2), 119, 162, 206-211(2)
- in /usr/src/ucb/PORT/systat/fetch.c line 104, 114, 121, 134
- in /usr/src/ucb/PORT/systat/iostat.c line 77, 121
- in /usr/src/ucb/PORT/systat/mbufs.c line 109
- in /usr/src/ucb/PORT/systat/netcmds.c line 101
- in /usr/src/ucb/PORT/systat/netstat.c line 111, 134, 151, 205
- in /usr/src/ucb/PORT/systat/pigs.c line 168
- in /usr/src/ucb/PORT/systat/swap.c line 143-147(2), 165, 203, 250, 261, 275
- in /usr/src/ucb/PORT/systat/vmstat.c line 38, 165, 193

labels defined in line 143; used 2 times

- in line 124
- in /usr/src/ucb/PORT/systat/cmds.c line 105

load defined in line 193; used 1 times

- in /usr/src/ucb/PORT/systat/cmds.c line 38

main defined in line 46; never used

#### Defined variables

ccpu defined in line 41; used 3 times

- in line 118-119(3)

copyright defined in line 8; never used
dellave defined in line 42; used 7 times

- in line 132, 168-177(6)

kmem defined in line 31; used 8 times

- in line 76-77(2), 117-118(2), 163-164(2), 197-198(2)

mem defined in line 32; used 2 times

- in line 82-83(2)

naptime defined in line 34; used 4 times

- in line 64-66(3), 190

nlst defined in line 19; used 7 times

- in line 70-71(2), 117-121(3), 163, 197

sccsid defined in line 14; never used
swap defined in line 33; used 2 times

- in line 88-89(2)

#### Defined macros

X_AVENRUN defined in line 22; used 2 times

- in line 163, 197

X_CCPU defined in line 20; used 2 times

- in line 71, 117

X_HZ defined in line 24; used 1 times

- in line 120

X_PHZ defined in line 26; used 1 times

- in line 121

Last modified: 1985-08-13 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1165 |