Annotation of coherent/d/bin/comm.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * comm -- see which lines two sorted files have in common
        !             3:  * Tom Duff 80.08.08 (how symmetrical)
        !             4:  */
        !             5: 
        !             6: #include <stdio.h>
        !             7: 
        !             8: #define        LLEN    512     /* maximum line length */
        !             9: 
        !            10: int col1 = 1;
        !            11: int col2 = 1;
        !            12: int col3 = 1;
        !            13: char line1[LLEN];
        !            14: char line2[LLEN];
        !            15: FILE *fd1, *fd2;
        !            16: 
        !            17: main(argc, argv)
        !            18: char *argv[];
        !            19: {
        !            20:        register int s;
        !            21: 
        !            22:        if (argc < 2)
        !            23:                usage();
        !            24:        if (argv[1][0]=='-' && argv[1][1]!='\0') {
        !            25:                while (argv[1][1]) {
        !            26:                        switch (argv[1][1]) {
        !            27:                        case '1':
        !            28:                                col1 = 0;
        !            29:                                break;
        !            30: 
        !            31:                        case '2':
        !            32:                                col2 = 0;
        !            33:                                break;
        !            34: 
        !            35:                        case '3':
        !            36:                                col3 = 0;
        !            37:                                break;
        !            38: 
        !            39:                        default:
        !            40:                                usage();
        !            41:                        }
        !            42:                        ++argv[1];
        !            43:                }
        !            44:                --argc;
        !            45:                argv++;
        !            46:        }
        !            47:        if (argc != 3)
        !            48:                usage();
        !            49:        if (strcmp(argv[1], "-") == 0)
        !            50:                fd1 = stdin;
        !            51:        else if ((fd1 = fopen(argv[1], "r")) == NULL){
        !            52:                fprintf(stderr, "comm: can't open %s\n", argv[1]);
        !            53:                exit(1);
        !            54:        }
        !            55:        if (strcmp(argv[2], "-") == 0)
        !            56:                fd2 = stdin;
        !            57:        else if ((fd2 = fopen(argv[2], "r")) == NULL){
        !            58:                fprintf(stderr, "comm: can't open %s\n", argv[2]);
        !            59:                exit(1);
        !            60:        }
        !            61:        fgets(line1, LLEN, fd1);
        !            62:        fgets(line2, LLEN, fd2);
        !            63:        while (!feof(fd1) && !feof(fd2))
        !            64:                if ((s = strcmp(line1, line2)) < 0)
        !            65:                        print1();
        !            66:                else if (s > 0)
        !            67:                        print2();
        !            68:                else
        !            69:                        print3();
        !            70:        while (!feof(fd1))
        !            71:                print1();
        !            72:        while (!feof(fd2))
        !            73:                print2();
        !            74:        exit(0);
        !            75: }
        !            76: 
        !            77: print1()
        !            78: {
        !            79:        if (col1)
        !            80:                printf("%s", line1);
        !            81:        fgets(line1, LLEN, fd1);
        !            82: }
        !            83: 
        !            84: print2()
        !            85: {
        !            86:        if (col2){
        !            87:                if (col1)
        !            88:                        putchar('\t');
        !            89:                printf("%s", line2);
        !            90:        }
        !            91:        fgets(line2, LLEN, fd2);
        !            92: }
        !            93: 
        !            94: print3()
        !            95: {
        !            96:        if (col3){
        !            97:                if (col1)
        !            98:                        putchar('\t');
        !            99:                if (col2)
        !           100:                        putchar('\t');
        !           101:                printf("%s", line1);
        !           102:        }
        !           103:        fgets(line1, LLEN, fd1);
        !           104:        fgets(line2, LLEN, fd2);
        !           105: }
        !           106: 
        !           107: usage()
        !           108: {
        !           109:        fprintf(stderr, "Usage: comm [-[123]] file1 file2\n");
        !           110:        exit(1);
        !           111: }

unix.superglobalmegacorp.com

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