|
|
1.1 ! root 1: static char *sccsid = "@(#)comm.c 4.2 (Berkeley) 4/29/83"; ! 2: #include <stdio.h> ! 3: #define LB 256 ! 4: int one; ! 5: int two; ! 6: int three; ! 7: ! 8: char *ldr[3]; ! 9: ! 10: FILE *ib1; ! 11: FILE *ib2; ! 12: FILE *openfil(); ! 13: main(argc,argv) ! 14: char *argv[]; ! 15: { ! 16: int l; ! 17: char lb1[LB],lb2[LB]; ! 18: ! 19: ldr[0] = ""; ! 20: ldr[1] = "\t"; ! 21: ldr[2] = "\t\t"; ! 22: if(argc > 1) { ! 23: if(*argv[1] == '-' && argv[1][1] != 0) { ! 24: l = 1; ! 25: while(*++argv[1]) { ! 26: switch(*argv[1]) { ! 27: case'1': ! 28: if(!one) { ! 29: one = 1; ! 30: ldr[1][0] = ! 31: ldr[2][l--] = '\0'; ! 32: } ! 33: break; ! 34: case '2': ! 35: if(!two) { ! 36: two = 1; ! 37: ldr[2][l--] = '\0'; ! 38: } ! 39: break; ! 40: case '3': ! 41: three = 1; ! 42: break; ! 43: default: ! 44: fprintf(stderr,"comm: illegal flag\n"); ! 45: exit(1); ! 46: } ! 47: } ! 48: argv++; ! 49: argc--; ! 50: } ! 51: } ! 52: ! 53: if(argc < 3) { ! 54: fprintf(stderr,"comm: arg count\n"); ! 55: exit(1); ! 56: } ! 57: ! 58: ib1 = openfil(argv[1]); ! 59: ib2 = openfil(argv[2]); ! 60: ! 61: ! 62: if(rd(ib1,lb1) < 0) { ! 63: if(rd(ib2,lb2) < 0) exit(0); ! 64: copy(ib2,lb2,2); ! 65: } ! 66: if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); ! 67: ! 68: while(1) { ! 69: ! 70: switch(compare(lb1,lb2)) { ! 71: ! 72: case 0: ! 73: wr(lb1,3); ! 74: if(rd(ib1,lb1) < 0) { ! 75: if(rd(ib2,lb2) < 0) exit(0); ! 76: copy(ib2,lb2,2); ! 77: } ! 78: if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); ! 79: continue; ! 80: ! 81: case 1: ! 82: wr(lb1,1); ! 83: if(rd(ib1,lb1) < 0) copy(ib2,lb2,2); ! 84: continue; ! 85: ! 86: case 2: ! 87: wr(lb2,2); ! 88: if(rd(ib2,lb2) < 0) copy(ib1,lb1,1); ! 89: continue; ! 90: } ! 91: } ! 92: } ! 93: ! 94: rd(file,buf) ! 95: FILE *file; ! 96: char *buf; ! 97: { ! 98: ! 99: register int i, c; ! 100: i = 0; ! 101: while((c = getc(file)) != EOF) { ! 102: *buf = c; ! 103: if(c == '\n' || i > LB-2) { ! 104: *buf = '\0'; ! 105: return(0); ! 106: } ! 107: i++; ! 108: buf++; ! 109: } ! 110: return(-1); ! 111: } ! 112: ! 113: wr(str,n) ! 114: char *str; ! 115: { ! 116: ! 117: switch(n) { ! 118: ! 119: case 1: ! 120: if(one) return; ! 121: break; ! 122: ! 123: case 2: ! 124: if(two) return; ! 125: break; ! 126: ! 127: case 3: ! 128: if(three) return; ! 129: } ! 130: printf("%s%s\n",ldr[n-1],str); ! 131: } ! 132: ! 133: copy(ibuf,lbuf,n) ! 134: FILE *ibuf; ! 135: char *lbuf; ! 136: { ! 137: do { ! 138: wr(lbuf,n); ! 139: } while(rd(ibuf,lbuf) >= 0); ! 140: ! 141: exit(0); ! 142: } ! 143: ! 144: compare(a,b) ! 145: char *a,*b; ! 146: { ! 147: register char *ra,*rb; ! 148: ! 149: ra = --a; ! 150: rb = --b; ! 151: while(*++ra == *++rb) ! 152: if(*ra == '\0') return(0); ! 153: if(*ra < *rb) return(1); ! 154: return(2); ! 155: } ! 156: FILE *openfil(s) ! 157: char *s; ! 158: { ! 159: FILE *b; ! 160: if(s[0]=='-' && s[1]==0) ! 161: b = stdin; ! 162: else if((b=fopen(s,"r")) == NULL) { ! 163: perror(s); ! 164: exit(1); ! 165: } ! 166: return(b); ! 167: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.