PWB1/sys/source/s1/fd2.c

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

static char Sccsid[] "@(#)fd2.c	1.4";
/*
	Command to open file descriptor 2 to a file and exec
	a command.  Four forms:

		fd2 comd ...		[write on "msg.out"]
		fd2 -file comd ...	[write on "file"]
		fd2 --file comd ...	[append to "file"]
		fd2 -- comd ...		[append to "msg.out"]

	Additional usage:

		fd2 + comd ...

	causes file descriptor 2 to be made same as 1.
*/

main(argc,argv)
int argc;
char *argv[];
{
	char *file, app, path[100];
	int fd, start;

	if(argv[1][0] == '+') {
		start = 2;
		close(2);
		dup(1);
	}
	else {
		if(argv[1][0] != '-') {
			file = "\0";
			app = 0;
			start = 1;
		}
		else if(argv[1][1] != '-') {
			file = &argv[1][1];
			app = 0;
			start = 2;
		}
		else {
			file = &argv[1][2];
			app = 1;
			start = 2;
		}
		if(file[0] == '\0') file = "msg.out";
	
		if(app)
			if((fd=open(file,1)) < 0) app = 0;
			else seek(fd,0,2);
		if(!app)
			fd = creat(file,0666);
		if (fd > 2) {
			close(2);
			if (dup(fd) != 2) {
				write(open("/dev/tty",1),"bad file descriptor?!?\n",23);
				exit(1);
			}
			close(fd);
		}
	}

	argv[argc] = 0;
	pexec(argv[start],&argv[start]);
	exit(1);
}