10 char *file_prefix = "y";
11 char *myname = "yacc";
12 char *temp_form = "yacc.XXXXXXX";
17 char *action_file_name;
19 char *defines_file_name;
20 char *input_file_name = "";
21 char *output_file_name;
23 char *union_file_name;
24 char *verbose_file_name;
26 FILE *action_file; /* a temp file, used to save actions associated */
27 /* with rules until the parser is written */
28 FILE *code_file; /* y.code.c (used when the -r option is specified) */
29 FILE *defines_file; /* y.tab.h */
30 FILE *input_file; /* the input file */
31 FILE *output_file; /* y.tab.c */
32 FILE *text_file; /* a temp file, used to save text until all */
33 /* symbols have been defined */
34 FILE *union_file; /* a temp file, used to save the union */
35 /* definition until all symbol have been */
37 FILE *verbose_file; /* y.output */
59 extern char *mktemp();
60 extern char *getenv();
66 if (action_file) { fclose(action_file); unlink(action_file_name); }
67 if (text_file) { fclose(text_file); unlink(text_file_name); }
68 if (union_file) { fclose(union_file); unlink(union_file_name); }
83 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
84 signal(SIGINT, onintr);
87 if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
88 signal(SIGTERM, onintr);
91 if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
92 signal(SIGHUP, onintr);
99 fprintf(stderr, "usage: %s [-dlrtv] [-b file_prefix] filename\n", myname);
111 if (argc > 0) myname = argv[0];
112 for (i = 1; i < argc; ++i)
115 if (*s != '-') break;
120 if (i + 1 < argc) usage();
125 goto no_more_options;
131 file_prefix = argv[i];
195 if (i + 1 != argc) usage();
196 input_file_name = argv[i];
221 tmpdir = getenv("TMPDIR");
222 if (tmpdir == 0) tmpdir = "/tmp";
224 len = strlen(tmpdir);
226 if (len && tmpdir[len-1] != '/')
229 action_file_name = MALLOC(i);
230 if (action_file_name == 0) no_space();
231 text_file_name = MALLOC(i);
232 if (text_file_name == 0) no_space();
233 union_file_name = MALLOC(i);
234 if (union_file_name == 0) no_space();
236 strcpy(action_file_name, tmpdir);
237 strcpy(text_file_name, tmpdir);
238 strcpy(union_file_name, tmpdir);
240 if (len && tmpdir[len - 1] != '/')
242 action_file_name[len] = '/';
243 text_file_name[len] = '/';
244 union_file_name[len] = '/';
248 strcpy(action_file_name + len, temp_form);
249 strcpy(text_file_name + len, temp_form);
250 strcpy(union_file_name + len, temp_form);
252 action_file_name[len + 5] = 'a';
253 text_file_name[len + 5] = 't';
254 union_file_name[len + 5] = 'u';
256 mktemp(action_file_name);
257 mktemp(text_file_name);
258 mktemp(union_file_name);
260 len = strlen(file_prefix);
262 output_file_name = MALLOC(len + 7);
263 if (output_file_name == 0)
265 strcpy(output_file_name, file_prefix);
266 strcpy(output_file_name + len, OUTPUT_SUFFIX);
270 code_file_name = MALLOC(len + 8);
271 if (code_file_name == 0)
273 strcpy(code_file_name, file_prefix);
274 strcpy(code_file_name + len, CODE_SUFFIX);
277 code_file_name = output_file_name;
281 defines_file_name = MALLOC(len + 7);
282 if (defines_file_name == 0)
284 strcpy(defines_file_name, file_prefix);
285 strcpy(defines_file_name + len, DEFINES_SUFFIX);
290 verbose_file_name = MALLOC(len + 8);
291 if (verbose_file_name == 0)
293 strcpy(verbose_file_name, file_prefix);
294 strcpy(verbose_file_name + len, VERBOSE_SUFFIX);
305 input_file = fopen(input_file_name, "r");
307 open_error(input_file_name);
310 action_file = fopen(action_file_name, "w");
311 if (action_file == 0)
312 open_error(action_file_name);
314 text_file = fopen(text_file_name, "w");
316 open_error(text_file_name);
320 verbose_file = fopen(verbose_file_name, "w");
321 if (verbose_file == 0)
322 open_error(verbose_file_name);
327 defines_file = fopen(defines_file_name, "w");
328 if (defines_file == 0)
329 open_error(defines_file_name);
330 union_file = fopen(union_file_name, "w");
332 open_error(union_file_name);
335 output_file = fopen(output_file_name, "w");
336 if (output_file == 0)
337 open_error(output_file_name);
341 code_file = fopen(code_file_name, "w");
343 open_error(code_file_name);
346 code_file = output_file;