- tryclose(faction);
- tryclose(fattrs);
- tryclose(fguard);
- tryclose(finput);
- tryclose(fparser);
- tryclose(foutput);
-
- /* JF write out the output file */
- if (!complain_message_count && ftable)
- {
- FILE *ftmp;
- register int c;
-
- ftmp=tryopen(tabfile, "w");
- rewind(ftable);
- while((c=getc(ftable)) != EOF)
- putc(c,ftmp);
- tryclose(ftmp);
- tryclose(ftable);
-
- if (definesflag)
- {
- ftmp = tryopen(defsfile, "w");
- fflush(fdefines);
- rewind(fdefines);
- while((c=getc(fdefines)) != EOF)
- putc(c,ftmp);
- tryclose(ftmp);
- tryclose(fdefines);
- }
- }
-
-#if defined (VMS) & !defined (__VMS_POSIX)
- if (faction && ! noparserflag)
- delete(actfile);
- if (fattrs)
- delete(tmpattrsfile);
- if (ftable)
- delete(tmptabfile);
-/* Don't call exit again, we're in atexit ().
- if (!complain_message_count)
- sys$exit(SS$_NORMAL);
- sys$exit(SS$_ABORT); */
-#else
-#if (defined (MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
- if (actfile && ! noparserflag) unlink(actfile);
- if (tmpattrsfile) unlink(tmpattrsfile);
- if (tmptabfile) unlink(tmptabfile);
- if (tmpdefsfile) unlink(tmpdefsfile);
-#endif /* MSDOS || (_WIN32 && !__CYGWIN32__) */
-/* Don't call exit again, we're in atexit ().
- exit (complain_message_count ? 1 : 0); */
-#endif /* not VMS, or __VMS_POSIX */
+ xfclose (fguard);
+ xfclose (finput);
+ xfclose (fparser);
+ xfclose (foutput);
+
+ /* Output the main file. */
+ obstack_save (&table_obstack, tabfile);
+
+ /* Output the header file if wanted. */
+ if (defines_flag)
+ obstack_save (&defines_obstack, defsfile);
+
+ /* If we output only the table, dump the actions in ACTFILE.
+ */
+ if (no_parser_flag)
+ obstack_save (&action_obstack, actfile);
+
+ /* If we produced a semantic parser ATTRS_OBSTACK must be dumped
+ into its own file, ATTTRSFILE. */
+ if (semantic_parser)
+ obstack_save (&attrs_obstack, attrsfile);