Annotation of 43BSDTahoe/usr.bin/comm.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.