1BSD/s6/where.c
main(narg,parg)
int narg; char **parg;
{ char *cp1,*cp2; int fildes,found,iarg;
char buffer[16];
int ttyname;
fildes = open("/etc/utmp",0);
for (iarg=1;iarg<narg;iarg++)
{ seek(fildes,0,0);
cp1 = parg[iarg];
if (compar(cp1,"is")) continue;
if (compar(cp1,"are")) continue;
if (compar(cp1,"and")) continue;
found = 0;
while (read(fildes,buffer,16))
{ ttyname = buffer[8]; buffer[8] = ' ';
if (ttyname < 033) {
ttyname =+ 'a' - 1;
ttyname =<< 8;
ttyname =| 'C';
}
cp2 = buffer; while (*cp2 != ' ') cp2++; *cp2 = '\0';
if (compar(cp1,buffer))
{ /* found him (her)! */
/*
if (!found)
*/
printf("%s is on tty%c",cp1,ttyname), show(ttyname);
/*
else
printf(" and tty%c",ttyname), show(ttyname);
*/
found++;
}
}
if (!found)
printf("%s is not logged in\n",cp1);
/*
else
printf("\n");
*/
}
}
compar(s1,s2)
char *s1,*s2;
{ while (*s1++ == *s2)
{ if (*s2++ == '\0') return(1); }
return(0);
}
show(ttyname)
int ttyname;
{
register c;
int ibuf[259];
char c1, c2;
c1 = ttyname & 0377;
c2 = ttyname >> 8;
c2 =& 0377;
if (c2 == 0)
c2 = '\t';
close(0);
if (fopen("/etc/ttywhere", 0) < 0)
goto bye;
for (;;) {
c = getc(ibuf);
if (c != 't')
goto skipnl;
c = getc(ibuf);
if (c != 't')
goto skipnl;
c = getc(ibuf);
if (c != 'y')
goto skipnl;
c = getc(ibuf);
if (c != c1)
goto skipnl;
c = getc(ibuf);
if (c != c2)
goto skipnl;
putchar('\t');
for (;;) {
c = getc(ibuf);
if (c == -1 || c == '\n')
break;
putchar(c);
}
close(0);
skipnl:
if (c == -1)
break;
while (c != '\n' && c != -1)
c = getc(ibuf);
}
bye:
putchar('\n');
}