|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "cbtype.h" ! 3: char *getl(); ! 4: char *filename; ! 5: int lineno; ! 6: char *beg1, *beg2; ! 7: char left = '\0'; ! 8: char right = '\0'; ! 9: main(argc,argv) ! 10: char *argv[]; ! 11: { ! 12: int doub = 0; ! 13: ! 14: if(argc <= 1){ ! 15: filename = "stdin"; ! 16: doub = work(); ! 17: } ! 18: else { ! 19: while(argc > 1){ ! 20: argc--; argv++; ! 21: if(freopen(argv[0], "r", stdin) == NULL){ ! 22: fprintf(stderr,"DOUBLE CANNOT OPEN FILE %s\n",argv[0]); ! 23: continue; ! 24: } ! 25: filename = argv[0]; ! 26: doub += work(); ! 27: } ! 28: } ! 29: exit(doub); ! 30: } ! 31: char buf1[512]; ! 32: char buf2[512]; ! 33: int toggle; ! 34: char *p1, *p2; ! 35: char word[80], prev[80]; ! 36: char delim[] = "delim"; ! 37: work() ! 38: { ! 39: char *b; ! 40: int doub; ! 41: int flag, lend; ! 42: int skip; ! 43: int l; ! 44: doub = 0; ! 45: lend = 1; ! 46: lineno = 1; ! 47: skip = 0; ! 48: beg1 = p1 = getl(buf1); ! 49: toggle = 1; ! 50: strcpy(prev,"qqxz"); ! 51: while((flag=getword()) != 0){ ! 52: if(flag == 2) ! 53: if(toggle == 1)b=beg2; ! 54: else b=beg1; ! 55: else if(toggle == 1)b = beg1; ! 56: else b = beg2; ! 57: if(*b == '.'){ ! 58: if(strcmp(word,"TS") == 0 || strcmp(word,"EQ")== 0 || ! 59: strcmp(word,"DS") == 0 || strcmp(word,"PS") == 0){ ! 60: skip++; ! 61: continue; ! 62: } ! 63: else if(strcmp(word, "TE") == 0|| strcmp(word,"EN") == 0 || ! 64: strcmp(word,"DE") == 0 ||strcmp(word,"PE") == 0){ ! 65: if(--skip < 0)skip = 0; ! 66: continue; ! 67: } ! 68: } ! 69: if(strcmp(word, delim) == 0 && skip){ ! 70: getdel(); ! 71: continue; ! 72: } ! 73: if (strcmp(word, prev) ==0 && skip == 0){ ! 74: if(word[1]=='\0' && word[0] !='a') ! 75: ; ! 76: else { ! 77: if(lend == 1 && flag != 3){ ! 78: if(flag == 2)l=lineno-1; ! 79: else l=lineno; ! 80: printf("%s twice line %d file %s\n",prev,l,filename); ! 81: if(flag == toggle) ! 82: printf("%s\n",buf1); ! 83: else printf("%s\n",buf2); ! 84: } ! 85: else { ! 86: printf("%s twice beginning line %d file %s\n",prev,lineno-1,filename); ! 87: if(toggle == 2)printf("%s%s\n",buf1,buf2); ! 88: else printf("%s%s\n",buf2,buf1); ! 89: } ! 90: doub++; ! 91: flag = 1; ! 92: } ! 93: } ! 94: strcpy(prev,word); ! 95: lend = flag; ! 96: } ! 97: return(doub); ! 98: } ! 99: getword() ! 100: { ! 101: char *p, *w; ! 102: int reset; ! 103: int ret; ! 104: int skip; ! 105: ret = 1; ! 106: reset=skip=0; ! 107: w = word; ! 108: if(toggle == 1)p=p1; ! 109: else p=p2; ! 110: rest: ! 111: while(*p != '\n'){ ! 112: if(*p == left){ ! 113: if(skip == 1 && *p == right)skip = 0; ! 114: else { ! 115: skip = 1; ! 116: strcpy(prev,"qqxz"); ! 117: } ! 118: p++; ! 119: continue; ! 120: } ! 121: if(*p == right){ ! 122: skip = 0; ! 123: p++; ! 124: continue; ! 125: } ! 126: if(skip){ ! 127: p++; ! 128: continue; ! 129: } ! 130: if(isalpha(*p) ||(w > word &&(*p == '-' || *p == '\''|| isdigit(*p)))) ! 131: *w++ = *p++; ! 132: else if(w == word){ ! 133: if(*p == '\\'){ ! 134: p++; ! 135: if(*p == '(')p+=2; ! 136: strcpy(prev,"qqxz"); ! 137: ret=1; ! 138: reset=1; ! 139: } ! 140: if(isdigit(*p) || isop(*p)|| *p == '/' || *p == '('){ ! 141: strcpy(prev,"qqxz"); ! 142: ret=1; ! 143: reset=1; ! 144: } ! 145: p++; ! 146: } ! 147: else { ! 148: *w = '\0'; ! 149: if(toggle == 1)p1 = p; ! 150: else p2 = p; ! 151: return(ret); ! 152: } ! 153: } ! 154: lineno++; ! 155: if(toggle == 1){ ! 156: beg2 = p = p2 = getl(buf2); ! 157: toggle = 2; ! 158: } ! 159: else { ! 160: beg1 = p = p1 = getl(buf1); ! 161: toggle = 1; ! 162: } ! 163: if(p == 0)return(0); ! 164: if(w == word){ ! 165: if(reset == 0)ret = 3; ! 166: goto rest; ! 167: } ! 168: *w = '\0'; ! 169: return(2); ! 170: } ! 171: char * ! 172: getl(p) ! 173: char *p; ! 174: { ! 175: int c; ! 176: char *q; ! 177: q = p; ! 178: while((*q++ = c = getchar()) != '\n'){ ! 179: if(q >= p + 511){ ! 180: printf("out of buffer space\n"); ! 181: exit(1); ! 182: } ! 183: if(c == EOF) ! 184: return(0); ! 185: } ! 186: *q = '\0'; ! 187: return(p); ! 188: } ! 189: getdel(){ ! 190: char *p; ! 191: if(toggle == 1)p=p1; ! 192: else p=p2; ! 193: while(*p == ' ')p++; ! 194: left = *p++; ! 195: right = *p++; ! 196: if(toggle == 1)p1=p; ! 197: else p2=p; ! 198: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.