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
display defined in line 158; used 5 times
labels defined in line 143; used 2 times
load defined in line 193; used 1 times
main defined in line 46; never used

Defined variables

ccpu defined in line 41; used 3 times
copyright defined in line 8; never used
dellave defined in line 42; used 7 times
kmem defined in line 31; used 8 times
mem defined in line 32; used 2 times
naptime defined in line 34; used 4 times
nlst defined in line 19; used 7 times
sccsid defined in line 14; never used
swap defined in line 33; used 2 times

Defined macros

X_AVENRUN defined in line 22; used 2 times
X_CCPU defined in line 20; used 2 times
X_HZ defined in line 24; used 1 times
X_PHZ defined in line 26; used 1 times
Last modified: 1985-08-13
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1856
Valid CSS Valid XHTML 1.0 Strict