V10/cmd/telno.c
#include <ipc.h>
#include <fio.h>
/*
name<tab>company<tab>dialcode<tab>phone<tab>location<tab>room<tab>org<tab>mail<\n>
*/
int fd;
timeout(){
fprint(2, "telno: timeout\n");
exit(1);
}
main(argc, argv)
char *argv[];
{
register i;
if(argc==1){
fprint(2, "usage: telno datum...\n");
return 1;
}
fd=ipcopen(ipcpath("nj/homer/dq", "dk", "dq1"), "light");
if(fd==-1){
fprint(2, "telno: call failed: %s\n", errstr);
return 1;
}
copy("-\n", 0);
nap(20);
for(i=1; i<argc; i++)
lookup(argv[i]);
return 0;
}
char peekbuf[20];
int npeek=0;
#define unget(c) (peekbuf[npeek++]=(c))
lookup(s)
char *s;
{
char buf[256];
sprint(buf, "%s\n", s);
write(fd, buf, strlen(buf));
copy("\n", 0);
unget('\n');
copy("\n.\n", 1);
return 0;
}
get(){
register n, c;
char buf[sizeof peekbuf];
if(npeek==0){
n=read(fd, buf, sizeof peekbuf);
if(n<=0){
fprint(2, "telno: read error\n");
exit(1);
}
while(--n>=0)
unget(buf[n]);
}
c=peekbuf[--npeek];
c&=0x7F;
if(c<' ' && c!='\n')
return get();
return c;
}
copy(end, output)
register char *end;
{
register n=0;
register char *e;
char c;
for(;;){
c=get();
if(output)
Fputc(1, c);
e=end;
while(c==*e && *++e)
c=get();
if(*e==0)
break;
if(e>end){
unget(c);
while(e>end+1)
unget(*--e);
}
}
}