|
|
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.