Annotation of researchv10no/cmd/cmp.c, revision 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.