/* Open and close files for bison,
- Copyright (C) 1984, 1986, 1989 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1986, 1989, 1992 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
-#ifdef VMS
+#if defined (VMS) & !defined (__VMS_POSIX)
#include <ssdef.h>
#define unlink delete
#ifndef XPFILE
#endif
#endif
+#if defined (_MSC_VER)
+#ifndef XPFILE
+#define XPFILE "c:/usr/local/lib/bison.simple"
+#endif
+#ifndef XPFILE1
+#define XPFILE1 "c:/usr/local/lib/bison.hairy"
+#endif
+#endif
+
#include <stdio.h>
#include "system.h"
#include "files.h"
-#include "new.h"
+#include "alloc.h"
#include "gram.h"
FILE *finput = NULL;
char *tmptabfile;
char *tmpdefsfile;
+extern int noparserflag;
+
extern char *mktemp(); /* So the compiler won't complain */
extern char *getenv();
extern void perror();
int base_length;
int short_base_length;
-#ifdef VMS
+#if defined (VMS) & !defined (__VMS_POSIX)
char *tmp_base = "sys$scratch:b_";
#else
char *tmp_base = "/tmp/b.";
strlwr (infile);
#endif /* MSDOS */
+#if (defined(_WIN32) && !defined(__CYGWIN32__))
+ tmp_base = getenv ("TEMP"); /* Windows95 defines this ... */
+ if (tmp_base == 0)
+ tmp_base = getenv ("Temp"); /* ... while NT prefers this */
+ if (tmp_base == 0)
+ tmp_base = "";
+ strlwr (infile);
+#endif /* _WIN32 && !__CYGWIN32__ */
+
tmp_len = strlen (tmp_base);
if (spec_outfile)
short_base_length = strlen (spec_file_prefix);
/* Count room for `.tab'. */
base_length = short_base_length + 4;
- name_base = (char *) mallocate (base_length + 1);
+ name_base = (char *) xmalloc (base_length + 1);
/* Append `.tab'. */
strcpy (name_base, spec_file_prefix);
#ifdef VMS
finput = tryopen(infile, "r");
- filename = getenv("BISON_SIMPLE");
-#ifdef MSDOS
- /* File doesn't exist in current directory; try in INIT directory. */
- cp = getenv("INIT");
- if (filename == 0 && cp != 0)
+ if (! noparserflag)
{
- filename = malloc(strlen(cp) + strlen(PFILE) + 2);
- strcpy(filename, cp);
- cp = filename + strlen(filename);
- *cp++ = '/';
- strcpy(cp, PFILE);
- }
+ filename = getenv("BISON_SIMPLE");
+#ifdef MSDOS
+ /* File doesn't exist in current directory; try in INIT directory. */
+ cp = getenv("INIT");
+ if (filename == 0 && cp != NULL)
+ {
+ filename = xmalloc(strlen(cp) + strlen(PFILE) + 2);
+ strcpy(filename, cp);
+ cp = filename + strlen(filename);
+ *cp++ = '/';
+ strcpy(cp, PFILE);
+ }
#endif /* MSDOS */
- fparser = tryopen(filename ? filename : PFILE, "r");
+ fparser = tryopen(filename ? filename : PFILE, "r");
+ }
if (verboseflag)
{
foutput = tryopen(outfile, "w");
}
+ if (noparserflag)
+ {
+ /* use permanent name for actions file */
+ actfile = stringappend(name_base, short_base_length, ".act");
+ faction = tryopen(actfile, "w");
+ }
+
#ifdef MSDOS
- actfile = mktemp(stringappend(tmp_base, tmp_len, "acXXXXXX"));
+ if (! noparserflag)
+ actfile = mktemp(stringappend(tmp_base, tmp_len, "acXXXXXX"));
tmpattrsfile = mktemp(stringappend(tmp_base, tmp_len, "atXXXXXX"));
tmptabfile = mktemp(stringappend(tmp_base, tmp_len, "taXXXXXX"));
tmpdefsfile = mktemp(stringappend(tmp_base, tmp_len, "deXXXXXX"));
#else
- actfile = mktemp(stringappend(tmp_base, tmp_len, "act.XXXXXX"));
+ if (! noparserflag)
+ actfile = mktemp(stringappend(tmp_base, tmp_len, "act.XXXXXX"));
tmpattrsfile = mktemp(stringappend(tmp_base, tmp_len, "attrs.XXXXXX"));
tmptabfile = mktemp(stringappend(tmp_base, tmp_len, "tab.XXXXXX"));
tmpdefsfile = mktemp(stringappend(tmp_base, tmp_len, "defs.XXXXXX"));
#endif /* not MSDOS */
- faction = tryopen(actfile, "w+");
+ if (! noparserflag)
+ faction = tryopen(actfile, "w+");
fattrs = tryopen(tmpattrsfile,"w+");
ftable = tryopen(tmptabfile, "w+");
fdefines = tryopen(tmpdefsfile, "w+");
}
-#ifndef MSDOS
- unlink(actfile);
+#if !(defined (MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
+ if (! noparserflag)
+ unlink(actfile);
unlink(tmpattrsfile);
unlink(tmptabfile);
unlink(tmpdefsfile);
-#endif
+#endif /* MSDOS || (_WIN32 && !__CYGWIN32__) */
/* These are opened by `done' or `open_extra_files', if at all */
if (spec_outfile)
int c;
char *filename, *cp;
- fclose(fparser);
+ if (fparser)
+ fclose(fparser);
- filename = (char *) getenv ("BISON_HAIRY");
-#ifdef MSDOS
- /* File doesn't exist in current directory; try in INIT directory. */
- cp = getenv("INIT");
- if (filename == 0 && cp != 0)
+ if (! noparserflag)
{
- filename = malloc(strlen(cp) + strlen(PFILE1) + 2);
- strcpy(filename, cp);
- cp = filename + strlen(filename);
- *cp++ = '/';
- strcpy(cp, PFILE1);
- }
+ filename = (char *) getenv ("BISON_HAIRY");
+#ifdef MSDOS
+ /* File doesn't exist in current directory; try in INIT directory. */
+ cp = getenv("INIT");
+ if (filename == 0 && cp != NULL)
+ {
+ filename = xmalloc(strlen(cp) + strlen(PFILE1) + 2);
+ strcpy(filename, cp);
+ cp = filename + strlen(filename);
+ *cp++ = '/';
+ strcpy(cp, PFILE1);
+ }
#endif
- fparser= tryopen(filename ? filename : PFILE1, "r");
+ fparser= tryopen(filename ? filename : PFILE1, "r");
+ }
/* JF change from inline attrs file to separate one */
ftmp = tryopen(attrsfile, "w");
}
}
-#ifdef VMS
- if (faction)
+#if defined (VMS) & !defined (__VMS_POSIX)
+ if (faction && ! noparserflag)
delete(actfile);
if (fattrs)
delete(tmpattrsfile);
if (k==0) sys$exit(SS$_NORMAL);
sys$exit(SS$_ABORT);
#else
-#ifdef MSDOS
- if (actfile) unlink(actfile);
+#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 */
+#endif /* MSDOS || (_WIN32 && !__CYGWIN32__) */
exit(k);
-#endif /* not VMS */
+#endif /* not VMS, or __VMS_POSIX */
}