home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / comm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  2.1 KB  |  167 lines

  1. #include <stdio.h>
  2. #define LB 256
  3. int    one;
  4. int    two;
  5. int    three;
  6.  
  7. char    *ldr[3];
  8.  
  9. FILE *ib1;
  10. FILE *ib2;
  11. FILE *openfil();
  12. main(argc,argv)
  13. char    *argv[];
  14. {
  15.     int    l;
  16.     char    lb1[LB],lb2[LB];
  17.  
  18.     ldr[0] = "";
  19.     ldr[1] = "\t";
  20.     ldr[2] = "\t\t";
  21.     if(argc > 1)  {
  22.         if(*argv[1] == '-' && argv[1][1] != 0) {
  23.             l = 1;
  24.             while(*++argv[1]) {
  25.                 switch(*argv[1]) {
  26.                 case'1':
  27.                     if(!one) {
  28.                         one = 1;
  29.                         ldr[1][0] =
  30.                         ldr[2][l--] = '\0';
  31.                     }
  32.                     break;
  33.                 case '2':
  34.                     if(!two) {
  35.                         two = 1;
  36.                         ldr[2][l--] = '\0';
  37.                     }
  38.                     break;
  39.                 case '3':
  40.                     three = 1;
  41.                     break;
  42.                 default:
  43.                 fprintf(stderr,"comm: illegal flag\n");
  44.                 exit(1);
  45.                 }
  46.             }
  47.             argv++;
  48.             argc--;
  49.         }
  50.     }
  51.  
  52.     if(argc < 3) {
  53.         fprintf(stderr,"comm: arg count\n");
  54.         exit(1);
  55.     }
  56.  
  57.     ib1 = openfil(argv[1]);
  58.     ib2 = openfil(argv[2]);
  59.  
  60.  
  61.     if(rd(ib1,lb1) < 0) {
  62.         if(rd(ib2,lb2) < 0)    exit(0);
  63.         copy(ib2,lb2,2);
  64.     }
  65.     if(rd(ib2,lb2) < 0)    copy(ib1,lb1,1);
  66.  
  67.     while(1) {
  68.  
  69.         switch(compare(lb1,lb2)) {
  70.  
  71.             case 0:
  72.                 wr(lb1,3);
  73.                 if(rd(ib1,lb1) < 0) {
  74.                     if(rd(ib2,lb2) < 0)    exit(0);
  75.                     copy(ib2,lb2,2);
  76.                 }
  77.                 if(rd(ib2,lb2) < 0)    copy(ib1,lb1,1);
  78.                 continue;
  79.  
  80.             case 1:
  81.                 wr(lb1,1);
  82.                 if(rd(ib1,lb1) < 0)    copy(ib2,lb2,2);
  83.                 continue;
  84.  
  85.             case 2:
  86.                 wr(lb2,2);
  87.                 if(rd(ib2,lb2) < 0)    copy(ib1,lb1,1);
  88.                 continue;
  89.         }
  90.     }
  91. }
  92.  
  93. rd(file,buf)
  94. FILE *file;
  95. char *buf;
  96. {
  97.  
  98.     register int i, c;
  99.     i = 0;
  100.     while((c = getc(file)) != EOF) {
  101.         *buf = c;
  102.         if(c == '\n' || i > LB-2) {
  103.             *buf = '\0';
  104.             return(0);
  105.         }
  106.         i++;
  107.         buf++;
  108.     }
  109.     return(-1);
  110. }
  111.  
  112. wr(str,n)
  113.     char    *str;
  114. {
  115.  
  116.     switch(n) {
  117.  
  118.         case 1:
  119.             if(one)    return;
  120.             break;
  121.  
  122.         case 2:
  123.             if(two)    return;
  124.             break;
  125.  
  126.         case 3:
  127.             if(three)    return;
  128.     }
  129.     printf("%s%s\n",ldr[n-1],str);
  130. }
  131.  
  132. copy(ibuf,lbuf,n)
  133. FILE *ibuf;
  134. char *lbuf;
  135. {
  136.     do {
  137.         wr(lbuf,n);
  138.     } while(rd(ibuf,lbuf) >= 0);
  139.  
  140.     exit(0);
  141. }
  142.  
  143. compare(a,b)
  144.     char    *a,*b;
  145. {
  146.     register char *ra,*rb;
  147.  
  148.     ra = --a;
  149.     rb = --b;
  150.     while(*++ra == *++rb)
  151.         if(*ra == '\0')    return(0);
  152.     if(*ra < *rb)    return(1);
  153.     return(2);
  154. }
  155. FILE *openfil(s)
  156. char *s;
  157. {
  158.     FILE *b;
  159.     if(s[0]=='-' && s[1]==0)
  160.         b = stdin;
  161.     else if((b=fopen(s,"r")) == NULL) {
  162.         fprintf(stderr,"comm: cannot open %s\n",s);
  163.         exit(1);
  164.     }
  165.     return(b);
  166. }
  167.