|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.