home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #define LB 256
- int 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);
- }
-