|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.