MiniUnix/usr/source/s2/who.c
/*
* who
*/
int fout;
int buf[256];
main(argc, argv)
char **argv;
{
char *s, *cbuf;
int n, fi, i;
int tty;
struct {
char name[8];
char tty;
char pad1;
int time[2];
char pad2[2];
} *p;
s = "/etc/utmp";
if(argc == 2)
s = argv[1];
fi = open(s, 0);
if(fi < 0) {
write("cannot open wtmp\n", 17);
exit();
}
fout = dup(1);
close(1);
if (argc==3)
tty = ttyn(0);
loop:
n = read(fi, buf, 512);
if(n == 0) {
flush();
if (argc==3)
write(fout, "Nobody.\n", 8);
exit();
}
p = &buf;
for(p = &buf; (n =- 16)>=0; p++) {
if (argc==3 && tty!=p->tty)
continue;
if(p->name[0] == '\0' && argc==1)
continue;
for(i=0; i<8; i++) {
if(p->name[i] == '\0')
p->name[i] = ' ';
putchar(p->name[i]);
}
for(i=0; i<3; i++)
putchar("tty"[i]);
putchar(p->tty);
cbuf = ctime(p->time);
for(i=3; i<16; i++)
putchar(cbuf[i]);
putchar('\n');
if (argc==3) {
flush();
exit();
}
}
goto loop;
}