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