+ strlwr (spec_file_prefix);
+#endif /* MSDOS */
+ short_base_name = xstrdup (spec_file_prefix);
+ base_name = XMALLOC (char,
+ strlen (short_base_name) + strlen (EXT_TAB) + 1);
+ stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
+
+ /* Computes the extensions from the garmmar file name. */
+ ext_index = get_extension_index (infile);
+ /* If the initial segment of extension contains a 'y' or a 'Y', I assume
+ that it is a yacc or bison grammar file. */
+ if (ext_index)
+ ext_index = (strspn (infile + ext_index + 1, "yY")) ? ext_index : 0;
+ if (ext_index)
+ compute_exts_from_gf (infile + ext_index);
+
+ return;
+ }
+
+ /* If neither -o nor --file-prefix were specified, and the input
+ file is foo.y, BASE_NAME is `foo.tab', and SHORT_BASE_NAME is
+ `foo'.
+
+ If --yacc is used, do as if the input file was `y.y'. */
+ {
+ const char *name_base = yacc_flag ? "y.y" : infile;
+
+ /* BASE_LENGTH gets length of BASE_NAME, sans ".y" suffix if any. */
+
+ base_length = strlen (name_base);
+
+ ext_index = get_extension_index (name_base);
+ /* If the initial segment of extension contains a 'y' or a 'Y', I assume
+ that it is a yacc or bison grammar file. */
+ if (ext_index)
+ ext_index = (strspn (name_base + ext_index + 1, "yY")) ? ext_index : 0;
+ if (ext_index)
+ {
+ base_length -= strlen (name_base + ext_index);
+ compute_exts_from_gf (name_base + ext_index);
+ }
+
+ short_base_length = base_length;
+ short_base_name = strndup (name_base, short_base_length);
+
+ base_name = XMALLOC (char,
+ strlen (short_base_name) + strlen (EXT_TAB) + 1);
+ stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
+
+ return;
+ }
+}
+
+/*-------------------------------------------------------.
+| Close the open files, compute the output files names. |
+`-------------------------------------------------------*/
+
+void
+compute_output_file_names (void)
+{
+ compute_base_names ();
+
+ parser_file_name =
+ spec_outfile ? spec_outfile : stringappend (base_name, src_extension);
+
+ /* If not yet done. */
+ if (!src_extension)
+ src_extension = ".c";
+ if (!header_extension)
+ header_extension = ".h";
+
+ /* It the defines filename if not given, we create it. */
+ if (!spec_defines_file)
+ spec_defines_file = stringappend (base_name, header_extension);
+
+ /* It the graph filename if not given, we create it. */
+ if (!spec_graph_file)
+ spec_graph_file = stringappend (short_base_name, ".vcg");
+
+ spec_verbose_file = stringappend (short_base_name, EXT_OUTPUT);
+
+ attrsfile = stringappend (short_base_name, EXT_STYPE_H);
+#ifndef MSDOS
+ attrsfile = stringappend (attrsfile, header_extension);