Annotation of coherent/d/bin/comm.c, revision 1.1.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.