]> git.saurik.com Git - bison.git/blobdiff - src/files.c
#
[bison.git] / src / files.c
index 00342429f4602efb0eddbdd683ba13e9fbdf77ed..9fa9b4bb5847b7433f8089f65e380a659afe4163 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -18,7 +18,7 @@ along with Bison; see the file COPYING.  If not, write to
 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
@@ -29,10 +29,19 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #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;
@@ -58,6 +67,8 @@ char *tmpattrsfile;
 char *tmptabfile;
 char *tmpdefsfile;
 
+extern int noparserflag;
+
 extern char    *mktemp();      /* So the compiler won't complain */
 extern char    *getenv();
 extern void    perror();
@@ -108,7 +119,7 @@ openfiles()
   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.";
@@ -122,6 +133,15 @@ openfiles()
   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)
@@ -150,7 +170,7 @@ openfiles()
       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
@@ -190,20 +210,23 @@ openfiles()
 
   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)
     {
@@ -217,19 +240,29 @@ openfiles()
       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+");
 
@@ -239,12 +272,13 @@ openfiles()
       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)
@@ -278,22 +312,26 @@ open_extra_files()
   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");
@@ -373,8 +411,8 @@ int k;
         }
     }
 
-#ifdef VMS
-  if (faction)
+#if defined (VMS) & !defined (__VMS_POSIX)
+  if (faction && ! noparserflag)
     delete(actfile);
   if (fattrs)
     delete(tmpattrsfile);
@@ -383,12 +421,12 @@ int k;
   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 */
 }