-int dmmin;
-int dmmax;
-int dmtext;
-int nswdev;
-#define MAXSWAPDEV 4
-short buckets[MAXSWAPDEV][NDMAP];
-struct swdevt *swdevt;
-int colwidth;
-
-extern union {
- struct user user;
- char upages[UPAGES][NBPG];
-} user;
-#define u user.user
-
-showswap()
-{
- register int i, j;
- register struct proc *pp;
- register struct text *xp;
- register int row;
- register int ts;
- register swblk_t *dp;
-
- if (xtext == 0)
- return;
- for (xp = xtext; xp < &xtext[ntext]; xp++) {
- if (xp->x_vptr == NULL)
- continue;
- ts = ctod(xp->x_size);
- dp = xp->x_daddr;
- for (i = 0; i < ts; i += dmtext) {
- j = ts - i;
- if (j > dmtext)
- j = dmtext;
-#define swatodev(addr) (((addr) / dmmax) % nswdev)
- buckets[swatodev(*dp)][dmtoindex(j)]++;
- dp++;
- }
- if ((xp->x_flag & XPAGV) && xp->x_ptdaddr)
- buckets[swatodev(xp->x_ptdaddr)]
- [dmtoindex(ctod(ctopt(xp->x_size)))]++;
- }
- row = swapdisplay(2, dmtext, 'X');
- if (kprocp == NULL)
- return;
- for (i = 0, pp = kprocp; i < nproc; i++, pp++) {
- if (pp->p_stat == 0 || pp->p_stat == SZOMB)
- continue;
- if (pp->p_flag & SSYS)
- continue;
- if (getu(pp) == 0)
- continue;
- vsacct(&u.u_dmap);
- vsacct(&u.u_smap);
-#ifdef notdef
- if ((pp->p_flag & SLOAD) == 0)
- vusize(pp);
-#endif
- }
- (void) swapdisplay(1+row, dmmax, 'X');
-}
-
-#define OFFSET 5 /* left hand column */
-
-swapdisplay(baserow, dmbound, c)
- int baserow, dmbound;
- char c;
-{
- register int i, j, k, row;
- register short *pb;
- char buf[10];
-
- for (row = baserow, i = dmmin; i <= dmbound; i *= 2, row++) {
- for (j = 0; j < nswdev; j++) {
- pb = &buckets[j][row - baserow];
- wmove(wnd, row, OFFSET + j * (1 + colwidth));
- k = MIN(*pb, colwidth);
- if (*pb > colwidth) {
- sprintf(buf, " %d", *pb);
- k -= strlen(buf);
- while (k--)
- waddch(wnd, c);
- waddstr(wnd, buf);
- } else {
- while (k--)
- waddch(wnd, c);
- k = MAX(colwidth - *pb, 0);
- while (k--)
- waddch(wnd, ' ');
- }
- *pb = 0;
- }
- }
- return (row);
-}
-
-vsacct(dmp)
- register struct dmap *dmp;
-{
- register swblk_t *ip;
- register int blk = dmmin, index = 0;
-
- for (ip = dmp->dm_map; dmp->dm_alloc > 0; ip++) {
- if (ip - dmp->dm_map >= NDMAP) {
- error("vsacct NDMAP");
- break;
- }
- if (*ip == 0)
- error("vsacct *ip == 0");
- buckets[swatodev(*ip)][index]++;
- dmp->dm_alloc -= blk;
- if (blk < dmmax) {
- blk *= 2;
- index++;
- }
- }
-}
-
-dmtoindex(dm)
- int dm;
-{
- register int i, j;
-
- for (j = 0, i = dmmin; i <= dmmax; i *= 2, j++)
- if (dm <= i)
- return (j);
- error("dmtoindex(%d)", dm);
- return (NDMAP - 1);
-}
-
-static struct nlist nlst[] = {
-#define X_PROC 0
- { "_proc" },
-#define X_NPROC 1
- { "_nproc" },
-#define X_USRPTMAP 2
- { "_Usrptmap" },
-#define X_USRPT 3
- { "_usrpt" },
-#define X_NSWAP 4
- { "_nswap" },
-#define X_DMMIN 5
- { "_dmmin" },
-#define X_DMMAX 6
- { "_dmmax" },
-#define X_DMTEXT 7
- { "_dmtext" },
-#define X_NSWDEV 8
- { "_nswdev" },
-#define X_SWDEVT 9
- { "_swdevt" },
-#define X_NTEXT 10
- { "_ntext" },
-#define X_TEXT 11
- { "_text" },
- { "" }
-};
-