AUSAM/source/S/tee.c

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

#include <stat.h>

int open[15] { 1 };	/* 15 is a little optimistic */
int t;			/* set if any char outputs */
int n 1;		/* number of open files in open */

main(argc, argv)
char **argv;
{
	int register r, w, p;
	char in[512], out[512];
	struct statb buf;

	fstat(1, &buf);
	t = (buf.i_mode&IFMT) == IFCHR;
	while(argc-- > 1)
	{
		if((open[n] = creat(argv[1], 0600)) == -1)
		{
			perror(argv[1]);
		}
		else
		{
			n++;
			if(stat(argv[1], &buf) != 0)
				if((buf.i_mode&IFMT) == IFCHR)
					t++;
		}
		argv++;
	}
	r = w = 0;
	for(;;)
	{
		for(p = 0; p < 512; )
		{
			if(r >= w)
			{
				if(t > 0 && p > 0)
					break;
				w = read(0, in, 512);
				r = 0;
				if(w <= 0)
				{
					stash(p,out);
					return;
				}
			}
			out[p++] = in[r++];
		}
		stash(p,out);
	}
}

stash(p,out)
char *out;
{
	register int k, i, d;

	d = t?10:p;
	for(i = 0; i < p; i =+ d)
		for(k = 0; k < n; k++)
			write(open[k], out+i, d < p-i ? d : p-i);
}