|
|
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: int c; ! 102: char *p, *w; ! 103: int reset; ! 104: int ret; ! 105: int skip; ! 106: ret = 1; ! 107: reset=skip=0; ! 108: w = word; ! 109: if(toggle == 1)p=p1; ! 110: else p=p2; ! 111: rest: ! 112: while(*p != '\n'){ ! 113: if(*p == left){ ! 114: if(skip == 1 && *p == right)skip = 0; ! 115: else { ! 116: skip = 1; ! 117: strcpy(prev,"qqxz"); ! 118: } ! 119: p++; ! 120: continue; ! 121: } ! 122: if(*p == right){ ! 123: skip = 0; ! 124: p++; ! 125: continue; ! 126: } ! 127: if(skip){ ! 128: p++; ! 129: continue; ! 130: } ! 131: if(isalpha(*p) ||(w > word &&(*p == '-' || *p == '\''|| isdigit(*p)))) ! 132: *w++ = *p++; ! 133: else if(w == word){ ! 134: if(*p == '\\'){ ! 135: p++; ! 136: if(*p == '(')p+=2; ! 137: strcpy(prev,"qqxz"); ! 138: ret=1; ! 139: reset=1; ! 140: } ! 141: if(isdigit(*p) || isop(*p)|| *p == '/' || *p == '('){ ! 142: strcpy(prev,"qqxz"); ! 143: ret=1; ! 144: reset=1; ! 145: } ! 146: p++; ! 147: } ! 148: else { ! 149: *w = '\0'; ! 150: if(toggle == 1)p1 = p; ! 151: else p2 = p; ! 152: return(ret); ! 153: } ! 154: } ! 155: lineno++; ! 156: if(toggle == 1){ ! 157: beg2 = p = p2 = getl(buf2); ! 158: toggle = 2; ! 159: } ! 160: else { ! 161: beg1 = p = p1 = getl(buf1); ! 162: toggle = 1; ! 163: } ! 164: if(p == EOF)return(0); ! 165: if(w == word){ ! 166: if(reset == 0)ret = 3; ! 167: goto rest; ! 168: } ! 169: *w = '\0'; ! 170: return(2); ! 171: } ! 172: char * ! 173: getl(p) ! 174: char *p; ! 175: { ! 176: int c; ! 177: char *q; ! 178: q = p; ! 179: while((*q++ = c = getchar()) != '\n'){ ! 180: if(q >= p + 511){ ! 181: printf("out of buffer space\n"); ! 182: exit(1); ! 183: } ! 184: if(c == EOF) ! 185: return((char *)c); ! 186: } ! 187: *q = '\0'; ! 188: return(p); ! 189: } ! 190: getdel(){ ! 191: char *p; ! 192: if(toggle == 1)p=p1; ! 193: else p=p2; ! 194: while(*p == ' ')p++; ! 195: left = *p++; ! 196: right = *p++; ! 197: if(toggle == 1)p1=p; ! 198: else p2=p; ! 199: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.