V10/cmd/telno.c

Compare this file to the similar file:
Show the results in this format:

#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);
		}
	}
}