|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1653 (0x675) Types: TextFile Notes: UNIX file Names: »comm.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─⟦this⟧ »cmd/comm.c«
/* * comm -- see which lines two sorted files have in common * Tom Duff 80.08.08 (how symmetrical) */ #include <stdio.h> #define LLEN 512 /* maximum line length */ int col1 = 1; int col2 = 1; int col3 = 1; char line1[LLEN]; char line2[LLEN]; FILE *fd1, *fd2; main(argc, argv) char *argv[]; { register int s; if (argc < 2) usage(); if (argv[1][0]=='-' && argv[1][1]!='\0') { while (argv[1][1]) { switch (argv[1][1]) { case '1': col1 = 0; break; case '2': col2 = 0; break; case '3': col3 = 0; break; default: usage(); } ++argv[1]; } --argc; argv++; } if (argc != 3) usage(); if (strcmp(argv[1], "-") == 0) fd1 = stdin; else if ((fd1 = fopen(argv[1], "r")) == NULL){ fprintf(stderr, "comm: can't open %s\n", argv[1]); exit(1); } if (strcmp(argv[2], "-") == 0) fd2 = stdin; else if ((fd2 = fopen(argv[2], "r")) == NULL){ fprintf(stderr, "comm: can't open %s\n", argv[2]); exit(1); } fgets(line1, LLEN, fd1); fgets(line2, LLEN, fd2); while (!feof(fd1) && !feof(fd2)) if ((s = strcmp(line1, line2)) < 0) print1(); else if (s > 0) print2(); else print3(); while (!feof(fd1)) print1(); while (!feof(fd2)) print2(); } print1() { if (col1) printf("%s", line1); fgets(line1, LLEN, fd1); } print2() { if (col2){ if (col1) putchar('\t'); printf("%s", line2); } fgets(line2, LLEN, fd2); } print3() { if (col3){ if (col1) putchar('\t'); if (col2) putchar('\t'); printf("%s", line1); } fgets(line1, LLEN, fd1); fgets(line2, LLEN, fd2); } usage() { fprintf(stderr, "Usage: comm [-[123]] file1 file2\n"); exit(1); }