+2002-02-13 Guerrero, Juan Manuel <st001906@hrz1.hrz.tu-darmstadt.de>
+
+ * doc/bison.texinfo: Add DJGPP specific information about
+ file name extensions used on different file systems.
+
+ * src/files.c (output_files): MSDOS conditional removed.
+ New macro EXT_TYPE will provide at runtime the appropiate
+ output file extension.
+ (skeleton_find) [MSDOS]: __DJGPP__ conditional added to
+ inhibit the use of DOSish code. POSIX like behaviour.
+
+ * src/getargs.c [AS_FILE_NAME]: __DJGPP__ conditional added.
+ Check at runtime if LFN-API (case preserving) is available or not.
+ Do not unconditionly convert upper case strings in lower case strings.
+
+ * src/system.h [MSDOS] [__GO32__]: __DJGPP__ conditional added.
+ __GO32__ is obsolete and its use is deprecated.
+ [MSDOS]: __DJGPP__ conditional added. Use pathconf
+ to choose POSIX or DOS file extensions at run time.
+ [MSDOS] [__DJGPP__]: New macro EXT_TYPE. If LFN-API is
+ available, the src or header file extension (.c or .h) will be
+ added to the output file name. If no LFN-API is available no src
+ or header file extension will be added to the output file name.
+ [MSDOS] [!__DJGPP__]: New macro EXT_TYPE. Src file and header
+ file extension will never be added to the output file name.
+ [!MSDOS]: New macro EXT_TYPE. Src file and header file
+ extensions will always be added to the output file name.
+
2002-02-11 Akim Demaille <akim@epita.fr>
* tests/regression.at (%nonassoc and eof): Don't include non
Changes in version 1.33a:
+* DJGPP support added.
+
* Fix portability problems within the test suite.
\f
Changes in version 1.33, 2002-02-07:
* Bison Options:: All the options described in detail,
in alphabetical order by short options.
* Option Cross Key:: Alphabetical list of long options.
+* Extension Limitations Under DOS:: Bison output files extension differences
+ depending on the DOS/Windows file system flavour used.
* VMS Invocation:: Bison command syntax on VMS.
Copying This Manual
in alphabetical order by short options.
* Environment Variables:: Variables which affect Bison execution.
* Option Cross Key:: Alphabetical list of long options.
+* Extension Limitations Under DOS:: Bison output files extension differences
+ depending on the DOS/Windows file system flavour used.
* VMS Invocation:: Bison command syntax on VMS.
@end menu
@end example
@end ifinfo
+@node Extension Limitations Under DOS
+@section Extension Limitations under DOS
+@cindex extension limitations under DOS
+@cindex DOS
+
+On DOS/Windows 9X systems the file name extensions of the output files,
+like @file{.tab.c}, that may be used depend on the file system in use.
+The plain DOS file system has limited file name length, does not allow
+the use of a set of certain illicit characters and does not allow more
+than a single dot in the file name.
+
+The DJGPP port of @code{bison} will detect at runtime if (LFN) long file name
+support is available or not. LFN support will be available in a DOS session
+under Windows 9X and successors. Windows NT 4.0 needs a special LFN driver
+(@file(ntlfn08b.zip) or later available at any simtelnet mirror in the /v2misc
+dir) for proper LFN support in a DOS session. If LFN support is available the
+DJGPP port of @code{bison} will use the standard POSIX file name extensions
+of the output files. If LFN support is not available, then the DJGPP port
+of @code{bison} will use DOS specific file name extensions.
+
+@noindent This table summarizes the used extensions:
+
+@multitable @columnfractions 0.1 0.45 0.45
+@item @tab LFN extension (Win9X) @tab SFN extension (plain DOS)
+@item @tab @file{.tab.c} @tab @file{_tab.c}
+@item @tab @file{.tab.h} @tab @file{_tab.h}
+@item @tab @file{.tab.cpp} @tab @file{_tab.cpp}
+@item @tab @file{.tab.hpp} @tab @file{_tab.hpp}
+@item @tab @file{.output} @tab @file{.out}
+@item @tab @file{.stype.h} @tab @file{.sth}
+@item @tab @file{.guard.c} @tab @file{.guc}
+@end multitable
+
@node VMS Invocation
@section Invoking Bison under VMS
@cindex invoking Bison under VMS
{
const char *res = getenv (envvar);
-#if defined (MSDOS) || defined (_WIN32)
+#if (defined (MSDOS) && !defined(__DJGPP__)) || defined (_WIN32)
const char *cp = getenv ("INIT");
if (!res)
{
strcpy (res + (cp - program_name), skel_name);
}
}
-#endif /* defined (MSDOS) || defined (_WIN32) */
+#endif /* (defined (MSDOS) && !defined (__DJGPP__)) || defined (_WIN32) */
if (!res)
res = skeleton_name;
spec_verbose_file = stringappend (short_base_name, EXT_OUTPUT);
attrsfile = stringappend (short_base_name, EXT_STYPE_H);
-#ifndef MSDOS
- attrsfile = stringappend (attrsfile, header_extension);
-#endif /* MSDOS */
+ attrsfile = stringappend (attrsfile, EXT_TYPE (header_extension));
}
obstack_save (&attrs_obstack, attrsfile);
obstack_free (&attrs_obstack, NULL);
temp_name = stringappend (short_base_name, EXT_GUARD_C);
-#ifndef MSDOS
- temp_name = stringappend (temp_name, src_extension);
-#endif /* MSDOS */
+ temp_name = stringappend (temp_name, EXT_TYPE (src_extension));
obstack_save (&guard_obstack, temp_name);
obstack_free (&guard_obstack, NULL);
}
| Process the options. |
`----------------------*/
-/* Under DOS, there is no difference on the case. This can be
+/* Under plain DOS, there is no difference on the case. This can be
troublesome when looking for `.tab' etc. */
#ifdef MSDOS
-# define AS_FILE_NAME(File) (strlwr (File), (File))
+# if defined (__DJGPP__)
+/* Windows 9X and successors are case sensitive. */
+# define AS_FILE_NAME(File) ((pathconf ((File), _PC_NAME_MAX) > 12) ? (File) : (strlwr (File), (File)))
+# else
+# define AS_FILE_NAME(File) (strlwr (File), (File))
+# endif
#else
# define AS_FILE_NAME(File) (File)
#endif
# define MINSHORT -32768
#endif
-#if defined (MSDOS) && !defined (__GO32__)
+#if defined (MSDOS) && !defined (__GO32__) && !defined (__DJGPP__)
# define BITS_PER_WORD 16
# define MAXTABLE 16383
#else
# define EXT_OUTPUT ".output"
# define EXT_STYPE_H "_stype"
# define EXT_GUARD_C "_guard"
+# define EXT_TYPE(ext) (ext)
#else /* ! VMS */
# ifdef MSDOS
- /* MS DOS. */
-# define EXT_TAB "_tab"
-# define EXT_OUTPUT ".out"
-# define EXT_STYPE_H ".sth"
-# define EXT_GUARD_C ".guc"
+# if defined (__DJGPP__)
+ /* DJGPP */
+# define EXT_TAB ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".tab" : "_tab")
+# define EXT_OUTPUT ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".output" : ".out")
+# define EXT_STYPE_H ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".stype" : ".sth")
+# define EXT_GUARD_C ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".guard" : ".guc")
+# define EXT_TYPE(ext) ((pathconf (NULL, _PC_NAME_MAX) > 12) ? (ext) : "")
+# else /* ! __DJGPP__ */
+ /* MS DOS. */
+# define EXT_TAB "_tab"
+# define EXT_OUTPUT ".out"
+# define EXT_STYPE_H ".sth"
+# define EXT_GUARD_C ".guc"
+# define EXT_TYPE(ext) ""
+# endif
# else /* ! MSDOS */
/* Standard. */
# define EXT_TAB ".tab"
# define EXT_OUTPUT ".output"
# define EXT_STYPE_H ".stype"
# define EXT_GUARD_C ".guard"
+# define EXT_TYPE(ext) (ext)
# endif /* ! MSDOS */
#endif /* ! VMS */