Annotation of researchv10no/cmd/cmp.c, revision 1.1.1.1

1.1       root        1: #define BUF    4096
                      2: 
                      3: int sflag = 0;
                      4: int lflag = 0;
                      5: int Lflag = 0;
                      6: 
                      7: main(argc, argv)
                      8:        char **argv;
                      9: {
                     10:        register n1, n2, n;
                     11:        unsigned char buf1[BUF], buf2[BUF];
                     12:        register unsigned char *p, *q;
                     13:        int f1, f2, i, nn;
                     14:        long nc = 1, o, atol(), l=1, l1;
                     15:        char *name1, *name2, *a;
                     16:        unsigned char *b1s, *b1e, *b2s, *b2e;
                     17: 
                     18:        for(n=1; n<argc && (*argv[n] == '-'); n++)
                     19:                for(a = &argv[n][1]; *a; a++)
                     20:                        switch(*a) {
                     21:                        case 's':       sflag = 1; break;
                     22:                        case 'l':       lflag = 1; break;
                     23:                        case 'L':       Lflag = 1; break;
                     24:                        default:        usage();
                     25:                        }
                     26:        if(n > argc-2)
                     27:                usage();
                     28:        if((f1 = open(name1 = argv[n++], 0)) == -1)
                     29:                argerr(name1);
                     30:        if((f2 = open(name2 = argv[n++], 0)) == -1)
                     31:                argerr(name2);
                     32:        if(n < argc){
                     33:                o = atol(argv[n++]);
                     34:                if(lseek(f1, o, 0) < 0)
                     35:                        argerr("cmp: lseek by offset1");
                     36:        }
                     37:        if(n < argc){
                     38:                o = atol(argv[n++]);
                     39:                if(lseek(f2, o, 0) < 0)
                     40:                        argerr("cmp: lseek by offset2");
                     41:        }
                     42:        if(n < argc)
                     43:                usage();
                     44:        b1s = b1e = buf1;
                     45:        b2s = b2e = buf2;
                     46:        for(;;){
                     47:                if(b1s >= b1e){
                     48:                        if(b1s >= &buf1[BUF])
                     49:                                b1s = buf1;
                     50:                        n1 = read(f1, b1s,  &buf1[BUF] - b1s);
                     51:                        b1e = b1s + n1;
                     52:                }
                     53:                if(b2s >= b2e){
                     54:                        if(b2s >= &buf2[BUF])
                     55:                                b2s = buf2;
                     56:                        n2 = read(f2, b2s,  &buf2[BUF] - b2s);
                     57:                        b2e = b2s + n2;
                     58:                }
                     59:                n = n2;
                     60:                if(n1 < n2) n = n1;
                     61:                if(n <= 0)
                     62:                        break;
                     63:                if(memcmp(b1s, b2s, n) != 0){
                     64:                        if(sflag)
                     65:                                exit(1);
                     66:                        l1 = 0;
                     67:                        for(p = b1s, q = b2s, i = 0, nn = n; nn > 0; nn--, p++, q++, i++) {
                     68:                                if(*p=='\n')
                     69:                                        l1++;
                     70:                                if(*p != *q){
                     71:                                        if(!lflag){
                     72:                                                printf("%s %s differ: char %d",
                     73:                                                    name1, name2, nc+i);
                     74:                                                printf(Lflag?" line %d\n":"\n", l+l1);
                     75:                                                exit(1);
                     76:                                        }
                     77:                                        printf("%6ld %3o %3o\n", nc+i, *p, *q);
                     78:                                }
                     79:                        }
                     80:                }               
                     81:                if(Lflag)
                     82:                        for(p = b1s; p < b1e;)
                     83:                                if(*p++=='\n')
                     84:                                        l++;
                     85:                nc += n;
                     86:                b1s += n;
                     87:                b2s += n;
                     88:        }
                     89:        if(n1 == n2)
                     90:                exit(0);
                     91:        if(!sflag)
                     92:                printf("EOF on %s\n", (n1 > n2)? name2 : name1);
                     93:        exit(1);
                     94: }
                     95: 
                     96: long
                     97: atol(s)
                     98: char *s;
                     99: {
                    100:        long n;
                    101:        int f;
                    102: 
                    103:        n = 0;
                    104:        f = 0;
                    105:        while (*s == ' ' || *s == '\t')
                    106:                s++;
                    107:        if (*s == '-') {
                    108:                f = 1;
                    109:                s++;
                    110:        }
                    111:        if (s[0] == '0' && s[1]){
                    112:                if (s[1] == 'x' || s[1] == 'X') {
                    113:                        s += 2;
                    114:                        for (;;) {
                    115:                                if (*s >= '0' && *s <= '9')
                    116:                                        n = n*16 + *s++ - '0';
                    117:                                else if (*s >= 'a' && *s <= 'f')
                    118:                                        n = n*16 + *s++ - 'a' + 10;
                    119:                                else if (*s >= 'A' && *s <= 'F')
                    120:                                        n = n*16 + *s++ - 'A' + 10;
                    121:                                else
                    122:                                        break;
                    123:                        }
                    124:                }
                    125:                else
                    126:                        while (*s >= '0' && *s <= '7')
                    127:                                n = n*8 + *s++ - '0';
                    128:        }
                    129:        else
                    130:                while (*s >= '0' && *s <= '9')
                    131:                        n = n*10 + *s++ - '0';
                    132:        if (f)
                    133:                n = -n;
                    134:        return n;
                    135: }
                    136: 
                    137: argerr(s)
                    138: char *s;
                    139: {
                    140:        if(sflag == 0)
                    141:                perror(s);
                    142:        exit(2);
                    143: }
                    144: 
                    145: usage()
                    146: {
                    147:        printf("Usage: cmp [-ls] file1 file2 [offset1 [offset2] ]\n");
                    148:        exit(2);
                    149: }

unix.superglobalmegacorp.com

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