* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
static char sccsid
[] = "@(#)pigs.c 5.1 (Berkeley) %G%";
* Pigs display from Bill Reeves at Lucasfilm
return (subwin(stdscr
, LINES
-5-1, 0, 5, 0));
struct passwd
*getpwuid();
register struct p_times
*ptptr
;
register struct users
*knptr
;
char *getpname(), *pnamp
;
/* Accumulate the percent of cpu per user. */
for (i
= 0; i
< nproc
; i
++) {
/* discard inactive processes */
if (ptptr
->pt_uid
== -1) {
/* Accumulate the percentage. */
total
+= ptptr
->pt_pctcpu
;
pt
[numprocs
].pt_pctcpu
= 1.0 - total
;
pt
[numprocs
].pt_uid
= -1;
pt
[numprocs
].pt_pid
= -1;
pt
[numprocs
].pt_pp
= NULL
;
/* Find the top few by executing a "bubble pass" ten times. */
for (i
= 0; i
< y
; i
++) {
for (j
= i
; j
< numprocs
+ 1; j
++) {
if (ptptr
->pt_pctcpu
> max
) {
for (; i
> 0 && ptptr
->pt_pctcpu
> 0.01; i
--) {
/* Find the user's name. */
for (j
= numknown
- 1; j
>= 0; j
--) {
if (knptr
->k_uid
== auid
) {
knptr
= &known
[numknown
];
namp
= strncpy(knptr
->k_name
,
getpwuid(auid
)->pw_name
, 15);
knptr
->k_name
[15] = '\0';
namp
= getpwuid(auid
)-> pw_name
;
pnamp
= getpname(ptptr
->pt_pid
, ptptr
->pt_pp
);
mvwaddstr(wnd
, y
, 0, namp
);
sprintf(pidname
, "%10.10s", pnamp
);
mvwaddstr(wnd
, y
, 9, pidname
);
for (j
= ptptr
->pt_pctcpu
*factor
+ 0.5; j
> 0; j
--)
wmove(wnd
, y
, 0); wclrtobot(wnd
);
static struct nlist nlst
[] = {
if (nlst
[X_PROC
].n_type
== 0) {
if (nlst
[X_PROC
].n_type
== 0) {
error("namelist on /vmunix failed");
procp
= getw(nlst
[X_PROC
].n_value
);
nproc
= getw(nlst
[X_NPROC
].n_value
);
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
*)calloc(nproc
, sizeof (struct p_times
));
register struct p_times
*prt
;
register struct proc
*pp
;
if (nlst
[X_PROC
].n_type
== 0)
kprocp
= (struct proc
*)calloc(nproc
, sizeof (struct proc
));
pt
= (struct p_times
*)calloc(nproc
, sizeof (struct p_times
));
lseek(kmem
, procp
, L_SET
);
read(kmem
, kprocp
, sizeof (struct proc
) * nproc
);
for (i
= 0, pp
= kprocp
; i
< nproc
; i
++, pp
++) {
if (time
== 0 || (pp
->p_flag
& SLOAD
) == 0)
prt
->pt_pctcpu
= pp
->p_pctcpu
/ (1.0 - exp(time
* lccpu
));
for (; prt
< &pt
[nproc
]; prt
++)
wmove(wnd
, 0, 0); wclrtoeol(wnd
);
"/0 /10 /20 /30 /40 /50 /60 /70 /80 /90 /100");