=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/systat/main.c,v retrieving revision 1.34 retrieving revision 1.35 diff -c -r1.34 -r1.35 *** src/usr.bin/systat/main.c 2006/05/09 17:09:22 1.34 --- src/usr.bin/systat/main.c 2007/02/25 18:21:24 1.35 *************** *** 1,4 **** ! /* $OpenBSD: main.c,v 1.34 2006/05/09 17:09:22 deraadt Exp $ */ /* $NetBSD: main.c,v 1.8 1996/05/10 23:16:36 thorpej Exp $ */ /*- --- 1,4 ---- ! /* $OpenBSD: main.c,v 1.35 2007/02/25 18:21:24 deraadt Exp $ */ /* $NetBSD: main.c,v 1.8 1996/05/10 23:16:36 thorpej Exp $ */ /*- *************** *** 40,46 **** #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/6/93"; #endif ! static char rcsid[] = "$OpenBSD: main.c,v 1.34 2006/05/09 17:09:22 deraadt Exp $"; #endif /* not lint */ #include --- 40,46 ---- #if 0 static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/6/93"; #endif ! static char rcsid[] = "$OpenBSD: main.c,v 1.35 2007/02/25 18:21:24 deraadt Exp $"; #endif /* not lint */ #include *************** *** 53,58 **** --- 53,59 ---- #include #include #include + #include #include #include #include *************** *** 69,75 **** u_int naptime = 5; int verbose = 1; /* to report kvm read errs */ int nflag = 0; ! int hz, stathz; char hostname[MAXHOSTNAMELEN]; WINDOW *wnd; int CMDLINE; --- 70,76 ---- u_int naptime = 5; int verbose = 1; /* to report kvm read errs */ int nflag = 0; ! int ut, hz, stathz; char hostname[MAXHOSTNAMELEN]; WINDOW *wnd; int CMDLINE; *************** *** 81,91 **** int main(int argc, char *argv[]) { - int ch; char errbuf[_POSIX2_LINE_MAX]; const char *errstr; gid_t gid; kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); if (kd == NULL) { error("%s", errbuf); --- 82,98 ---- int main(int argc, char *argv[]) { char errbuf[_POSIX2_LINE_MAX]; const char *errstr; gid_t gid; + int ch; + ut = open(_PATH_UTMP, O_RDONLY); + if (ut < 0) { + error("No utmp"); + exit(1); + } + kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); if (kd == NULL) { error("%s", errbuf); *************** *** 157,163 **** warnx("couldn't initialize display"); die(); } ! wload = newwin(1, 0, 3, 20); if (wload == NULL) { warnx("couldn't set up load average window"); die(); --- 164,170 ---- warnx("couldn't initialize display"); die(); } ! wload = newwin(1, 0, 1, 20); if (wload == NULL) { warnx("couldn't set up load average window"); die(); *************** *** 207,217 **** void labels(void) { ! if (curcmd->c_flags & CF_LOADAV) { ! mvaddstr(2, 20, ! "/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10"); ! mvaddstr(3, 5, "Load Average"); ! } (*curcmd->c_label)(); #ifdef notdef mvprintw(21, 25, "CPU usage on %s", hostname); --- 214,221 ---- void labels(void) { ! if (curcmd->c_flags & CF_LOADAV) ! mvprintw(0, 2 + 4, "users Load"); (*curcmd->c_label)(); #ifdef notdef mvprintw(21, 25, "CPU usage on %s", hostname); *************** *** 229,258 **** void display(void) { - int i, j; - chtype c; - /* Get the load average over the last minute. */ (void) getloadavg(avenrun, sizeof(avenrun) / sizeof(avenrun[0])); (*curcmd->c_fetch)(); if (curcmd->c_flags & CF_LOADAV) { ! j = 5.0*avenrun[0] + 0.5; ! dellave -= avenrun[0]; ! if (dellave >= 0.0) ! c = '<'; ! else { ! c = '>'; ! dellave = -dellave; ! } ! if (dellave < 0.05) ! c = '|'; ! dellave = avenrun[0]; ! wmove(wload, 0, 0); ! wclrtoeol(wload); ! for (i = (j > 50) ? 50 : j; i > 0; i--) ! waddch(wload, c); ! if (j > 50) ! wprintw(wload, " %4.1f", avenrun[0]); } (*curcmd->c_refresh)(); if (curcmd->c_flags & CF_LOADAV) --- 233,254 ---- void display(void) { /* Get the load average over the last minute. */ (void) getloadavg(avenrun, sizeof(avenrun) / sizeof(avenrun[0])); (*curcmd->c_fetch)(); if (curcmd->c_flags & CF_LOADAV) { ! extern int ucount(); ! char tbuf[26]; ! time_t now; ! ! time(&now); ! strlcpy(tbuf, ctime(&now), sizeof tbuf); ! ! putint(ucount(), 0, 2, 3); ! putfloat(avenrun[0], 0, 2 + 17, 6, 2, 0); ! putfloat(avenrun[1], 0, 2 + 23, 6, 2, 0); ! putfloat(avenrun[2], 0, 2 + 29, 6, 2, 0); ! mvaddstr(0, 2 + 53, tbuf); } (*curcmd->c_refresh)(); if (curcmd->c_flags & CF_LOADAV) *************** *** 352,355 **** --- 348,368 ---- refresh(); endwin(); exit(1); + } + + /* calculate number of users on the system */ + int + ucount(void) + { + int nusers = 0; + struct utmp utmp; + + if (ut < 0) + return (0); + lseek(ut, (off_t)0, SEEK_SET); + while (read(ut, &utmp, sizeof(utmp))) + if (utmp.ut_name[0] != '\0') + nusers++; + + return (nusers); }