113 |
|
FILE *fopen(); |
114 |
|
FILE *fp; |
115 |
|
int a; |
116 |
+ |
/* check for array */ |
117 |
+ |
for (a = 1; a < argc; a++) |
118 |
+ |
if (!strcmp(argv[a], "-a")) |
119 |
+ |
return(doarray(argc, argv, a)); |
120 |
|
|
117 |
– |
xav = argv; |
118 |
– |
|
121 |
|
for (a = 1; a < argc; a++) { |
122 |
|
if (argv[a][0] == '-') |
123 |
|
switch (argv[a][1]) { |
124 |
|
case 'n': |
125 |
+ |
if (argv[a][2] || a+1 >= argc) |
126 |
+ |
break; |
127 |
|
idprefix = argv[++a]; |
128 |
|
continue; |
129 |
|
case 'e': |
130 |
+ |
if (argv[a][2]) |
131 |
+ |
break; |
132 |
|
expand = 1; |
133 |
|
continue; |
134 |
|
} |
135 |
|
break; |
136 |
|
} |
137 |
|
|
138 |
+ |
xav = argv; |
139 |
|
xfa = a; |
140 |
|
|
141 |
|
totscale = 1.0; |
146 |
|
if (reverse = totscale < 0.0) |
147 |
|
totscale = -totscale; |
148 |
|
|
149 |
< |
xac = a; |
149 |
> |
if (a < argc && argv[a][0] == '-') { |
150 |
> |
fprintf(stderr, "%s: command line error at '%s'\n", |
151 |
> |
argv[0], argv[a]); |
152 |
> |
exit(1); |
153 |
> |
} |
154 |
|
|
155 |
< |
putchar('#'); /* simple header */ |
155 |
> |
xac = a; |
156 |
> |
/* simple header */ |
157 |
> |
putchar('#'); |
158 |
|
for (a = 0; a < xac; a++) |
159 |
|
printf(" %s", xav[a]); |
160 |
|
putchar('\n'); |
161 |
< |
|
162 |
< |
if (a == argc) |
161 |
> |
/* transform input */ |
162 |
> |
if (xac == argc) |
163 |
|
xform("standard input", stdin); |
164 |
|
else |
165 |
< |
for ( ; a < argc; a++) { |
165 |
> |
for (a = xac; a < argc; a++) { |
166 |
|
if ((fp = fopen(argv[a], "r")) == NULL) { |
167 |
|
fprintf(stderr, "%s: cannot open \"%s\"\n", |
168 |
|
progname, argv[a]); |
172 |
|
fclose(fp); |
173 |
|
} |
174 |
|
|
175 |
< |
exit(0); |
175 |
> |
return(0); |
176 |
|
} |
177 |
|
|
178 |
|
|
179 |
+ |
doarray(ac, av, ai) /* make array */ |
180 |
+ |
char **av; |
181 |
+ |
int ac, ai; |
182 |
+ |
{ |
183 |
+ |
char *newav[256], **avp; |
184 |
+ |
char newid[128], repts[32]; |
185 |
+ |
char *oldid = NULL; |
186 |
+ |
int i, err; |
187 |
+ |
|
188 |
+ |
avp = newav+2; |
189 |
+ |
avp[0] = av[0]; |
190 |
+ |
for (i = 1; i < ac; i++) |
191 |
+ |
if (!strcmp(av[i-1], "-n")) { |
192 |
+ |
oldid = av[i]; |
193 |
+ |
avp[i] = newid; |
194 |
+ |
} else |
195 |
+ |
avp[i] = av[i]; |
196 |
+ |
avp[ai] = "-i"; |
197 |
+ |
avp[ai+1] = repts; |
198 |
+ |
avp[i] = NULL; |
199 |
+ |
if (oldid == NULL) { |
200 |
+ |
newav[0] = av[0]; |
201 |
+ |
newav[1] = "-n"; |
202 |
+ |
newav[2] = newid; |
203 |
+ |
avp = newav; |
204 |
+ |
ac += 2; |
205 |
+ |
} |
206 |
+ |
err = 0; |
207 |
+ |
for (i = 0; i < atoi(av[ai+1]); i++) { |
208 |
+ |
if (oldid == NULL) |
209 |
+ |
sprintf(newid, "a%d", i); |
210 |
+ |
else |
211 |
+ |
sprintf(newid, "%s.%d", oldid, i); |
212 |
+ |
sprintf(repts, "%d", i); |
213 |
+ |
err |= main(ac, avp); |
214 |
+ |
} |
215 |
+ |
return(err); |
216 |
+ |
} |
217 |
+ |
|
218 |
+ |
|
219 |
|
xform(name, fin) /* transform stream by totxform */ |
220 |
|
char *name; |
221 |
|
register FILE *fin; |
234 |
|
} while (c != '\n'); |
235 |
|
} else if (c == '!') { /* command */ |
236 |
|
ungetc(c, fin); |
237 |
< |
if (expand) |
185 |
< |
xfcomm(name, fin); |
186 |
< |
else { |
187 |
< |
putchar('\n'); |
188 |
< |
while ((c = getc(fin)) != EOF && c != '\n') |
189 |
< |
putchar(c); |
190 |
< |
printf(" |"); |
191 |
< |
for (c = 0; c < xac; c++) |
192 |
< |
printf(" %s", xav[c]); |
193 |
< |
putchar('\n'); |
194 |
< |
} |
237 |
> |
xfcomm(name, fin); |
238 |
|
} else { /* object */ |
239 |
|
ungetc(c, fin); |
240 |
|
xfobject(name, fin); |
243 |
|
} |
244 |
|
|
245 |
|
|
246 |
< |
xfcomm(fname, fin) /* expand a command */ |
246 |
> |
xfcomm(fname, fin) /* transform a command */ |
247 |
|
FILE *fin; |
248 |
|
{ |
249 |
|
FILE *popen(); |
250 |
< |
char *fgets(); |
250 |
> |
char *fgetline(); |
251 |
|
FILE *pin; |
252 |
|
char buf[512]; |
253 |
+ |
int i; |
254 |
|
|
255 |
< |
buf[0] = '\0'; |
256 |
< |
fgets(buf, sizeof(buf), fin); |
257 |
< |
if (buf[0] && buf[strlen(buf)-1] == '\n') |
258 |
< |
buf[strlen(buf)-1] = '\0'; |
259 |
< |
if ((pin = popen(buf+1, "r")) == NULL) { |
260 |
< |
fprintf(stderr, "%s: (%s): cannot execute \"%s\"\n", |
261 |
< |
progname, fname, buf); |
262 |
< |
exit(1); |
255 |
> |
fgetline(buf, sizeof(buf), fin); |
256 |
> |
if (expand) { |
257 |
> |
if (xac > 2) { |
258 |
> |
if ((pin = popen(buf+1, "r")) == NULL) { |
259 |
> |
fprintf(stderr, |
260 |
> |
"%s: (%s): cannot execute \"%s\"\n", |
261 |
> |
progname, fname, buf); |
262 |
> |
exit(1); |
263 |
> |
} |
264 |
> |
xform(buf, pin); |
265 |
> |
pclose(pin); |
266 |
> |
} else { |
267 |
> |
fflush(stdout); |
268 |
> |
system(buf+1); |
269 |
> |
} |
270 |
> |
} else { |
271 |
> |
printf("\n%s", buf); |
272 |
> |
if (xac > 1) { |
273 |
> |
printf(" | %s -e", xav[0]); |
274 |
> |
for (i = 1; i < xac; i++) |
275 |
> |
printf(" %s", xav[i]); |
276 |
> |
} |
277 |
> |
putchar('\n'); |
278 |
|
} |
220 |
– |
xform(buf, pin); |
221 |
– |
pclose(pin); |
279 |
|
} |
280 |
|
|
281 |
|
|