X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fcca25ad3cb7b800a5dddeaafb1743fc273cdb61..4562bb77645125f427751de0320774e5f0d92fba:/src/files.c diff --git a/src/files.c b/src/files.c index 020111f5..9fa9b4bb 100644 --- a/src/files.c +++ b/src/files.c @@ -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. @@ -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 #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(); @@ -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) @@ -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 != NULL) + if (! noparserflag) { - filename = xmalloc(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 != NULL) + if (! noparserflag) { - filename = xmalloc(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"); @@ -374,7 +412,7 @@ int k; } #if defined (VMS) & !defined (__VMS_POSIX) - if (faction) + 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, or __VMS_POSIX */ }