user count for mon - couldn't leave well enough alone
George W. Sherouse
sherouse at unc.UUCP
Tue Dec 18 07:38:57 AEST 1984
If mon is the greatest thing since sliced bread, and I for
one think it is, then just think how good it will be after you
apply this hack to get it to *also* tell you how many users
are logged in. There were these 10 empty characters up near
the top of the screen, you see, and nature abhors a vacuum...
George W. Sherouse
Associate Physicist
Division of Radiation Therapy
North Carolina Memorial Hospital
Chapel Hill, NC 27514
(919) 966-1101
<decvax!mcnc!unc!godot!sherouse>
===========================================
# This is a shell archive. Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file". (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# diff1 diff2 user_count.c
echo x - diff1
cat > "diff1" << '//E*O*F diff1//'
*** old/Makefile Mon Dec 17 10:07:28 1984
--- Makefile Mon Dec 17 10:15:25 1984
***************
*** 3,9
#
# Beware dependencies on mon.h are not properly stated.
#
! OBJS = mon.o io.o vm.o netif.o display.o readnames.o
all: mon
--- 3,9 -----
#
# Beware dependencies on mon.h are not properly stated.
#
! OBJS = mon.o io.o vm.o netif.o display.o readnames.o user_count.o
all: mon
***************
*** 14,17
rm -f core *.o mon a.out
print:
! qpr mon.h mon.c io.c vm.c netif.c readnames.c display.c
--- 14,17 -----
rm -f core *.o mon a.out
print:
! qpr mon.h mon.c io.c vm.c netif.c readnames.c display.c user_count.c
//E*O*F diff1//
echo x - diff2
cat > "diff2" << '//E*O*F diff2//'
*** old/mon.c Mon Dec 17 10:07:30 1984
--- mon.c Mon Dec 17 10:20:54 1984
***************
*** 94,99
long clock;
struct timeval tintv;
int i, tin;
/* set up signals */
signal(SIGINT, done);
--- 94,100 -----
long clock;
struct timeval tintv;
int i, tin;
+ int users, user_count();
/* set up signals */
signal(SIGINT, done);
***************
*** 116,121
mvprintw(0,13,"%4.2f %4.2f %4.2f %4.2f", loadavg[3], loadavg[0], loadavg[1], loadavg[2]);
time(&clock);
mvprintw(0,40,ctime(&clock));
dispupdate();
mvprintw(LINES-1, 0, "CMD> ");
refresh();
--- 117,129 -----
mvprintw(0,13,"%4.2f %4.2f %4.2f %4.2f", loadavg[3], loadavg[0], loadavg[1], loadavg[2]);
time(&clock);
mvprintw(0,40,ctime(&clock));
+
+ users = user_count();
+ if (users == 1)
+ mvprintw(0, 70, "1 user");
+ else
+ mvprintw(0, 70, "%d users", users);
+
dispupdate();
mvprintw(LINES-1, 0, "CMD> ");
refresh();
//E*O*F diff2//
echo x - user_count.c
cat > "user_count.c" << '//E*O*F user_count.c//'
#include <stdio.h>
#include <utmp.h>
int user_count()
{
static int first = 1;
static FILE *strm;
struct utmp utmp;
int count = 0;
if (first)
{
strm = fopen("/etc/utmp", "r");
first = 0;
}
rewind(strm);
while(fread(&utmp, sizeof(utmp), 1, strm))
{
if (utmp.ut_name[0] != '\0')
count++;
}
return(count);
}
//E*O*F user_count.c//
echo Possible errors detected by \'wc\' [hopefully none]:
temp=/tmp/shar$$
trap "rm -f $temp; exit" 0 1 2 3 15
cat > $temp <<\!!!
32 104 664 diff1
42 116 1115 diff2
25 47 337 user_count.c
99 267 2116 total
!!!
wc diff1 diff2 user_count.c | sed 's=[^ ]*/==' | diff -b $temp -
exit 0
More information about the Comp.sources.unix
mailing list