static char sccsid
[] = "@(#)ruptime.c 4.16 (Berkeley) 83/11/17";
#include "../etc/rwhod/rwhod.h"
int hscmp(), ucmp(), lcmp(), tcmp();
#define WHDRSIZE (sizeof (awhod) - sizeof (awhod.wd_we))
#define RWHODIR "/usr/spool/rwho"
char *malloc(), *sprintf();
#define down(h) (now - (h)->hs_wd->wd_recvtime > 11 * 60)
char buf
[BUFSIZ
]; int cc
;
register struct hs
*hsp
= hs
;
register struct whod
*wd
;
register struct whoent
*we
;
fprintf(stderr
, "Usage: %s [ -ar [ lut ] ]\n",
if (chdir(RWHODIR
) < 0) {
while (dp
= readdir(dirp
)) {
if (strncmp(dp
->d_name
, "whod.", 5))
fprintf(stderr
, "too many hosts\n");
cc
= read(f
, buf
, BUFSIZ
);
hsp
->hs_wd
= (struct whod
*)malloc(WHDRSIZE
);
bcopy(buf
, hsp
->hs_wd
, WHDRSIZE
);
if (wd
->wd_loadav
[i
] > maxloadav
)
maxloadav
= wd
->wd_loadav
[i
];
we
= (struct whoent
*)(buf
+cc
);
while (--we
>= wd
->wd_we
)
if (aflg
|| we
->we_idle
< 3600)
qsort((char *)hs
, nhosts
, sizeof (hs
[0]), cmp
);
for (i
= 0; i
< nhosts
; i
++) {
printf("%-12.12s%s\n", hsp
->hs_wd
->wd_hostname
,
interval(now
- hsp
->hs_wd
->wd_recvtime
, "down"));
printf("%-12.12s%s, %4d user%s load %*.2f, %*.2f, %*.2f\n",
interval(hsp
->hs_wd
->wd_sendtime
-
hsp
->hs_wd
->wd_boottime
, " up"),
hsp
->hs_nusers
== 1 ? ", " : "s,",
maxloadav
>= 1000 ? 5 : 4,
hsp
->hs_wd
->wd_loadav
[0] / 100.0,
maxloadav
>= 1000 ? 5 : 4,
hsp
->hs_wd
->wd_loadav
[1] / 100.0,
maxloadav
>= 1000 ? 5 : 4,
hsp
->hs_wd
->wd_loadav
[2] / 100.0);
int days
, hours
, minutes
;
if (time
< 0 || time
> 3*30*24*60*60) {
(void) sprintf(resbuf
, " %s ??:??", updown
);
minutes
= (time
+ 59) / 60; /* round to minutes */
hours
= minutes
/ 60; minutes
%= 60;
days
= hours
/ 24; hours
%= 24;
(void) sprintf(resbuf
, "%s %2d+%02d:%02d",
updown
, days
, hours
, minutes
);
(void) sprintf(resbuf
, "%s %2d:%02d",
return (rflg
* strcmp(h1
->hs_wd
->wd_hostname
, h2
->hs_wd
->wd_hostname
));
* Compare according to load average.
(h2
->hs_wd
->wd_loadav
[0] - h1
->hs_wd
->wd_loadav
[0]));
* Compare according to number of users.
return (rflg
* (h2
->hs_nusers
- h1
->hs_nusers
));
* Compare according to uptime.
(down(h2
) ? h2
->hs_wd
->wd_recvtime
- now
: h2
->hs_wd
->wd_sendtime
- h2
->hs_wd
->wd_boottime
)
(down(h1
) ? h1
->hs_wd
->wd_recvtime
- now
: h1
->hs_wd
->wd_sendtime
- h1
->hs_wd
->wd_boottime
)