static char *sccsid
= "@(#)swap.c 1.5 (Lucasfilm) %G%";
w
= newwin(20, 70, 3, 5);
short buckets
[MAXSWAPDEV
][NDMAP
];
char upages
[UPAGES
][NBPG
];
register struct proc
*pp
;
register struct text
*xp
;
for (xp
= xtext
; xp
< &xtext
[ntext
]; xp
++) {
for (i
= 0; i
< ts
; i
+= dmtext
) {
#define swatodev(addr) (((addr) / dmmax) % nswdev)
buckets
[swatodev(*dp
)][dmtoindex(j
)]++;
if ((xp
->x_flag
& XPAGI
) && xp
->x_ptdaddr
)
buckets
[swatodev(xp
->x_ptdaddr
)]
[dmtoindex(ctod(ctopt(xp
->x_size
)))]++;
row
= swapdisplay(4, dmtext
, 'X');
for (i
= 0, pp
= kprocp
; i
< nproc
; i
++, pp
++) {
if (pp
->p_stat
== 0 || pp
->p_stat
== SZOMB
)
if ((pp
->p_flag
& SLOAD
) == 0)
(void) swapdisplay(row
+ 1, dmmax
, 'X');
swapdisplay(baserow
, dmbound
, c
)
register int i
, j
, k
, row
;
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
));
sprintf(buf
, " %d", *pb
);
k
= MAX(colwidth
- *pb
, 0);
register struct dmap
*dmp
;
register int blk
= dmmin
, index
= 0;
for (ip
= dmp
->dm_map
; dmp
->dm_alloc
> 0; ip
++) {
if (ip
- dmp
->dm_map
>= NDMAP
) {
error("vsacct *ip == 0");
buckets
[swatodev(*ip
)][index
]++;
for (j
= 0, i
= dmmin
; i
<= dmmax
; i
*= 2, j
++)
error("dmtoindex(%d)", dm
);
static struct nlist nlst
[] = {
if (nlst
[X_PROC
].n_type
== 0) {
if (nlst
[X_PROC
].n_type
== 0) {
error("namelist on /vmunix failed");
dmmin
= getw(nlst
[X_DMMIN
].n_value
);
dmmax
= getw(nlst
[X_DMMAX
].n_value
);
dmtext
= getw(nlst
[X_DMTEXT
].n_value
);
nswdev
= getw(nlst
[X_NSWDEV
].n_value
);
swdevt
= (struct swdevt
*)calloc(nswdev
, sizeof (*swdevt
));
klseek(kmem
, nlst
[X_SWDEVT
].n_value
, L_SET
);
read(kmem
, swdevt
, nswdev
* sizeof (struct swdevt
));
ntext
= getw(nlst
[X_NTEXT
].n_value
);
textp
= getw(nlst
[X_TEXT
].n_value
);
procp
= getw(nlst
[X_PROC
].n_value
);
nproc
= getw(nlst
[X_NPROC
].n_value
);
xtext
= (struct text
*)calloc(ntext
, sizeof (struct text
));
kprocp
= (struct proc
*)calloc(nproc
, sizeof (struct proc
));
usrpt
= (struct pte
*)nlst
[X_USRPT
].n_value
;
Usrptma
= (struct pte
*)nlst
[X_USRPTMAP
].n_value
;
pt
= (struct p_times
*)malloc(nproc
* sizeof (struct p_times
));
if (nlst
[X_PROC
].n_type
== 0)
kprocp
= (struct proc
*)malloc(sizeof (*kprocp
) * nproc
);
lseek(kmem
, procp
, L_SET
);
if (read(kmem
, kprocp
, sizeof (struct proc
) * nproc
) !=
sizeof (struct proc
) * nproc
) {
error("couldn't read proc table");
xtext
= (struct text
*)calloc(ntext
, sizeof (struct text
));
lseek(kmem
, textp
, L_SET
);
if (read(kmem
, xtext
, ntext
* sizeof (struct text
)) !=
sizeof (struct text
) * ntext
)
error("couldn't read text table");
{ "hp", "ht", "up", "rk", "sw", "tm", "ts", "mt", "tu", "ra", "ut",
error("Don't know how many swap devices.\n");
colwidth
= (70 - (nswdev
- 1)) / nswdev
;
row
= swaplabel(5, dmtext
, 1);
(void) swaplabel(row
, dmmax
, 0);
swaplabel(row
, dmbound
, donames
)
for (i
= 0; i
< nswdev
; i
++) {
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
);
for (j
= 0, i
= dmmin
; i
<= dmbound
; i
*= 2, j
++, row
++) {
mvprintw(row
, 0, "%4d|", i
);
for (k
= 1; k
< nswdev
; k
++)
mvwaddch(wnd
, row
- 3, k
* (1 + colwidth
) - 1, '|');