rmdel is already linked
[unix-history] / usr / src / usr.bin / systat / swap.c
index a5e167a..94602f4 100644 (file)
@@ -1,17 +1,27 @@
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)swap.c      1.5 (Lucasfilm) %G%";
-#endif
+static char sccsid[] = "@(#)swap.c     5.4 (Berkeley) %G%";
+#endif not lint
 
 #include "systat.h"
 
 #include "systat.h"
+#include <sys/dir.h>
+#include <sys/user.h>
+#include <sys/proc.h>
+#include <sys/text.h>
+#include <sys/conf.h>
+#include <sys/vmmac.h>
+#include <machine/pte.h>
 
 WINDOW *
 openswap()
 {
 
 WINDOW *
 openswap()
 {
-       static WINDOW *w = NULL;
 
 
-        if (w == NULL)
-               w = newwin(20, 70, 3, 5);
-       return (w);
+       return (subwin(stdscr, LINES-5-1, 0, 5, 0));
 }
 
 closeswap(w)
 }
 
 closeswap(w)
@@ -20,10 +30,9 @@ closeswap(w)
 
        if (w == NULL)
                return;
 
        if (w == NULL)
                return;
-       move(5, 0);
-       clrtobot();
        wclear(w);
        wrefresh(w);
        wclear(w);
        wrefresh(w);
+       delwin(w);
 }
 
 int    dmmin;
 }
 
 int    dmmin;
@@ -69,7 +78,7 @@ showswap()
                        buckets[swatodev(xp->x_ptdaddr)]
                            [dmtoindex(ctod(ctopt(xp->x_size)))]++;
        }
                        buckets[swatodev(xp->x_ptdaddr)]
                            [dmtoindex(ctod(ctopt(xp->x_size)))]++;
        }
-       row = swapdisplay(4, dmtext, 'X');
+       row = swapdisplay(2, dmtext, 'X');
        if (kprocp == NULL)
                return;
         for (i = 0, pp = kprocp; i < nproc; i++, pp++) {
        if (kprocp == NULL)
                return;
         for (i = 0, pp = kprocp; i < nproc; i++, pp++) {
@@ -86,9 +95,11 @@ showswap()
                        vusize(pp);
 #endif
         }
                        vusize(pp);
 #endif
         }
-       (void) swapdisplay(row + 1, dmmax, 'X');
+       (void) swapdisplay(1+row, dmmax, 'X');
 }
 
 }
 
+#define        OFFSET  5                       /* left hand column */
+
 swapdisplay(baserow, dmbound, c)
        int baserow, dmbound;
        char c;
 swapdisplay(baserow, dmbound, c)
        int baserow, dmbound;
        char c;
@@ -100,7 +111,7 @@ swapdisplay(baserow, dmbound, c)
        for (row = baserow, i = dmmin; i <= dmbound; i *= 2, row++) {
                for (j = 0; j < nswdev; j++) {
                        pb = &buckets[j][row - baserow];
        for (row = baserow, i = dmmin; i <= dmbound; i *= 2, row++) {
                for (j = 0; j < nswdev; j++) {
                        pb = &buckets[j][row - baserow];
-                       wmove(wnd, row, j * (1 + colwidth));
+                       wmove(wnd, row, OFFSET + j * (1 + colwidth));
                        k = MIN(*pb, colwidth);
                        if (*pb > colwidth) {
                                sprintf(buf, " %d", *pb);
                        k = MIN(*pb, colwidth);
                        if (*pb > colwidth) {
                                sprintf(buf, " %d", *pb);
@@ -190,7 +201,7 @@ initswap()
                nlist("/vmunix", nlst);
                if (nlst[X_PROC].n_type == 0) {
                        error("namelist on /vmunix failed");
                nlist("/vmunix", nlst);
                if (nlst[X_PROC].n_type == 0) {
                        error("namelist on /vmunix failed");
-                       return;
+                       return(0);
                }
        }
         if (nswdev == 0) {
                }
        }
         if (nswdev == 0) {
@@ -198,6 +209,8 @@ initswap()
                 dmmax = getw(nlst[X_DMMAX].n_value);
                 dmtext = getw(nlst[X_DMTEXT].n_value);
                 nswdev = getw(nlst[X_NSWDEV].n_value);
                 dmmax = getw(nlst[X_DMMAX].n_value);
                 dmtext = getw(nlst[X_DMTEXT].n_value);
                 nswdev = getw(nlst[X_NSWDEV].n_value);
+               if (nswdev > MAXSWAPDEV)
+                       nswdev = MAXSWAPDEV;
                swdevt = (struct swdevt *)calloc(nswdev, sizeof (*swdevt));
                klseek(kmem, nlst[X_SWDEVT].n_value, L_SET);
                read(kmem, swdevt, nswdev * sizeof (struct swdevt));
                swdevt = (struct swdevt *)calloc(nswdev, sizeof (*swdevt));
                klseek(kmem, nlst[X_SWDEVT].n_value, L_SET);
                read(kmem, swdevt, nswdev * sizeof (struct swdevt));
@@ -213,11 +226,12 @@ initswap()
        if (kprocp == NULL)
                 kprocp = (struct proc *)calloc(nproc, sizeof (struct proc));
         if (usrpt != NULL)
        if (kprocp == NULL)
                 kprocp = (struct proc *)calloc(nproc, sizeof (struct proc));
         if (usrpt != NULL)
-                return;
+                return(1);
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
        if (pt == NULL)
                pt = (struct p_times *)malloc(nproc * sizeof (struct p_times));
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
        if (pt == NULL)
                pt = (struct p_times *)malloc(nproc * sizeof (struct p_times));
+       return(1);
 }
 
 fetchswap()
 }
 
 fetchswap()
@@ -252,19 +266,20 @@ char      *devnames[] =
      { "hp", "ht", "up", "rk", "sw", "tm", "ts", "mt", "tu", "ra", "ut",
        "rb", "rx", "rl" };
 #endif
      { "hp", "ht", "up", "rk", "sw", "tm", "ts", "mt", "tu", "ra", "ut",
        "rb", "rx", "rl" };
 #endif
+#ifdef tahoe
+char   *devnames[] = { "ud", "vd", "xp", "cy", "sw" };
+#endif
 
 labelswap()
 {
 
 labelswap()
 {
-       register int i, j;
        register int row;
 
        if (nswdev == 0) {
                error("Don't know how many swap devices.\n");
                return;
        }
        register int row;
 
        if (nswdev == 0) {
                error("Don't know how many swap devices.\n");
                return;
        }
-        move(5, 0);
-       colwidth = (70 - (nswdev - 1)) / nswdev;
-       row = swaplabel(5, dmtext, 1);
+       colwidth = (COLS - OFFSET - (nswdev - 1)) / nswdev;
+       row = swaplabel(0, dmtext, 1);
        (void) swaplabel(row, dmmax, 0);
 }
 
        (void) swaplabel(row, dmmax, 0);
 }
 
@@ -275,23 +290,22 @@ swaplabel(row, dmbound, donames)
        register int i, j;
 
        for (i = 0; i < nswdev; i++) {
        register int i, j;
 
        for (i = 0; i < nswdev; i++) {
-               if (donames) {
-                       move(row, 5 + i * (1 + colwidth) + (colwidth - 3) / 2);
-                       printw("%s%d", devnames[major(swdevt[i].sw_dev)],
-                           minor(swdevt[i].sw_dev) >> 3);
-               }
-               for (j = 0; j + 5 < colwidth; j += 5) {
-                       move(row + donames, 5 + i * (1 + colwidth) + j);
-                       printw("/%-2d  ", j);
-               }
+               if (donames)
+                       mvwprintw(wnd,
+                           row, OFFSET + i*(1 + colwidth) + (colwidth - 3)/2,
+                           "%s%d", devnames[major(swdevt[i].sw_dev)],
+                               minor(swdevt[i].sw_dev) >> 3);
+               for (j = 0; j + 5 < colwidth; j += 5)
+                       mvwprintw(wnd, row + donames,
+                           OFFSET + i*(1 + colwidth) + j, "/%-2d  ", j);
        }
        row += 1 + donames;
        for (j = 0, i = dmmin; i <= dmbound; i *= 2, j++, row++) {
                int k;
 
        }
        row += 1 + donames;
        for (j = 0, i = dmmin; i <= dmbound; i *= 2, j++, row++) {
                int k;
 
-               mvprintw(row, 0, "%4d|", i);
+               mvwprintw(wnd, row, 0, "%4d|", i);
                for (k = 1; k < nswdev; k++)
                for (k = 1; k < nswdev; k++)
-                       mvwaddch(wnd, row - 3, k * (1 + colwidth) - 1, '|');
+                       mvwaddch(wnd, row, OFFSET + k*(1 + colwidth) - 1, '|');
        }
        return (row);
 }
        }
        return (row);
 }