comm.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 167 行

C
167
字号
#include <stdio.h>#define LB 256int	one;int	two;int	three;char	*ldr[3];FILE *ib1;FILE *ib2;FILE *openfil();main(argc,argv)char	*argv[];{	int	l;	char	lb1[LB],lb2[LB];	ldr[0] = "";	ldr[1] = "\t";	ldr[2] = "\t\t";	if(argc > 1)  {		if(*argv[1] == '-' && argv[1][1] != 0) {			l = 1;			while(*++argv[1]) {				switch(*argv[1]) {				case'1':					if(!one) {						one = 1;						ldr[1][0] =						ldr[2][l--] = '\0';					}					break;				case '2':					if(!two) {						two = 1;						ldr[2][l--] = '\0';					}					break;				case '3':					three = 1;					break;				default:				fprintf(stderr,"comm: illegal flag\n");				exit(1);				}			}			argv++;			argc--;		}	}	if(argc < 3) {		fprintf(stderr,"comm: arg count\n");		exit(1);	}	ib1 = openfil(argv[1]);	ib2 = openfil(argv[2]);	if(rd(ib1,lb1) < 0) {		if(rd(ib2,lb2) < 0)	exit(0);		copy(ib2,lb2,2);	}	if(rd(ib2,lb2) < 0)	copy(ib1,lb1,1);	while(1) {		switch(compare(lb1,lb2)) {			case 0:				wr(lb1,3);				if(rd(ib1,lb1) < 0) {					if(rd(ib2,lb2) < 0)	exit(0);					copy(ib2,lb2,2);				}				if(rd(ib2,lb2) < 0)	copy(ib1,lb1,1);				continue;			case 1:				wr(lb1,1);				if(rd(ib1,lb1) < 0)	copy(ib2,lb2,2);				continue;			case 2:				wr(lb2,2);				if(rd(ib2,lb2) < 0)	copy(ib1,lb1,1);				continue;		}	}}rd(file,buf)FILE *file;char *buf;{	register int i, c;	i = 0;	while((c = getc(file)) != EOF) {		*buf = c;		if(c == '\n' || i > LB-2) {			*buf = '\0';			return(0);		}		i++;		buf++;	}	return(-1);}wr(str,n)	char	*str;{	switch(n) {		case 1:			if(one)	return;			break;		case 2:			if(two)	return;			break;		case 3:			if(three)	return;	}	printf("%s%s\n",ldr[n-1],str);}copy(ibuf,lbuf,n)FILE *ibuf;char *lbuf;{	do {		wr(lbuf,n);	} while(rd(ibuf,lbuf) >= 0);	exit(0);}compare(a,b)	char	*a,*b;{	register char *ra,*rb;	ra = --a;	rb = --b;	while(*++ra == *++rb)		if(*ra == '\0')	return(0);	if(*ra < *rb)	return(1);	return(2);}FILE *openfil(s)char *s;{	FILE *b;	if(s[0]=='-' && s[1]==0)		b = stdin;	else if((b=fopen(s,"r")) == NULL) {		fprintf(stderr,"comm: cannot open %s\n",s);		exit(1);	}	return(b);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?