Commit | Line | Data |
---|---|---|
c31d941c BJ |
1 | #include <stdio.h> |
2 | #include <sys/types.h> | |
3 | #include <a.out.h> | |
4 | #include <time.h> | |
5 | ||
6 | struct tm *localtime(); | |
7 | ||
8 | #define DIV60(t) ((t+30)/60) /* x/60 rounded */ | |
9 | ||
10 | struct nlist nl[] = { | |
11 | #define X_BOOTIME 0 | |
12 | { "_bootime" }, | |
13 | #define X_AVENRUN 1 | |
14 | { "_avenrun" }, | |
15 | { 0 } | |
16 | }; | |
17 | ||
18 | time_t now, bootime; | |
19 | double avenrun[3]; | |
20 | ||
21 | int kmem; | |
22 | ||
23 | main(argc, argv) | |
24 | char **argv; | |
25 | { | |
26 | char obuf[BUFSIZ]; | |
27 | register int i, days; | |
28 | register time_t uptime; | |
29 | register struct tm *nowt; | |
30 | ||
31 | setbuf(stdout, obuf); | |
32 | nlist("/vmunix" , nl); | |
33 | if (nl[0].n_value == 0) { | |
34 | fprintf(stderr, "No namelist\n"); | |
35 | exit(1); | |
36 | } | |
37 | kmem = open("/dev/kmem", 0); | |
38 | if (kmem < 0) { | |
39 | fprintf(stderr ,"No kmem\n"); | |
40 | exit(1); | |
41 | } | |
42 | time(&now); | |
43 | nowt = localtime(&now); | |
44 | prtat(nowt); | |
45 | lseek(kmem, (long)nl[X_BOOTIME].n_value, 0); | |
46 | read(kmem, &bootime, sizeof (bootime)); | |
47 | uptime = now - bootime; | |
48 | printf(" up"); | |
49 | days = uptime / (60*60*24); | |
50 | if (days > 0) { | |
51 | printf(" %d day%s, ", days, days>1?"s":""); | |
52 | uptime %= (60*60*24); | |
53 | } | |
54 | prttime(DIV60(uptime), ""); | |
55 | printf("\t\t"); | |
56 | printf("load average:"); | |
57 | lseek(kmem, (long)nl[X_AVENRUN].n_value, 0); | |
58 | read(kmem, avenrun, sizeof(avenrun)); | |
59 | for (i = 0; i < 3; i++) { | |
60 | printf(" %.2f", avenrun[i]); | |
61 | if (i < 2) | |
62 | printf(","); | |
63 | } | |
64 | printf("\n"); | |
65 | } | |
66 | ||
67 | prttime(tim, tail) | |
68 | time_t tim; | |
69 | char *tail; | |
70 | { | |
71 | register int didhrs = 0; | |
72 | ||
73 | if (tim >= 60) { | |
74 | printf("%3d:", tim/60); | |
75 | didhrs++; | |
76 | } else { | |
77 | printf(" "); | |
78 | } | |
79 | tim %= 60; | |
80 | if (tim > 0 || didhrs) { | |
81 | printf(didhrs&&tim<10 ? "%02d" : "%2d", tim); | |
82 | } else { | |
83 | printf(" "); | |
84 | } | |
85 | printf("%s", tail); | |
86 | } | |
87 | ||
88 | /* prtat prints a 12 hour time given a pointer to a time of day */ | |
89 | prtat(p) | |
90 | struct tm *p; | |
91 | { | |
92 | register int t, pm; | |
93 | ||
94 | t = p -> tm_hour; | |
95 | pm = (t > 11); | |
96 | if (t > 11) | |
97 | t -= 12; | |
98 | if (t == 0) | |
99 | t = 12; | |
100 | prttime(t*60 + p->tm_min, pm ? "pm" : "am"); | |
101 | } |