diff -acrpNC5 byacc-1.9.orig/defs.h byacc-1.9.djgpp/defs.h
*** byacc-1.9.orig/defs.h	Wed Aug 10 17:33:12 1994
--- byacc-1.9.djgpp/defs.h	Sun Jul  9 02:33:34 2000
***************
*** 1,9 ****
  #include <assert.h>
  #include <ctype.h>
  #include <stdio.h>
! 
  
  /*  machine-dependent definitions			*/
  /*  the following definitions are for the Tahoe		*/
  /*  they might have to be changed for other machines	*/
  
--- 1,11 ----
  #include <assert.h>
  #include <ctype.h>
  #include <stdio.h>
! #ifdef __DJGPP__
! #include <unistd.h>
! #endif
  
  /*  machine-dependent definitions			*/
  /*  the following definitions are for the Tahoe		*/
  /*  they might have to be changed for other machines	*/
  
***************
*** 43,57 ****
  #define	BACKSLASH	'\\'    /*  backslash  */
  
  
  /* defines for constructing filenames */
  
! #define CODE_SUFFIX	".code.c"
! #define	DEFINES_SUFFIX	".tab.h"
! #define	OUTPUT_SUFFIX	".tab.c"
! #define	VERBOSE_SUFFIX	".output"
! 
  
  /* keyword codes */
  
  #define TOKEN 0
  #define LEFT 1
--- 45,87 ----
  #define	BACKSLASH	'\\'    /*  backslash  */
  
  
  /* defines for constructing filenames */
  
! #ifdef __MSDOS__
! # ifdef __DJGPP__
! /* sflag is defined in main.c and is 0
!    if the command-line option `-s' has not been specified.
! */
! #  define CODE_SUFFIX     ((pathconf (NULL, _PC_NAME_MAX) > 12) \
!                            ? ((sflag == 0) \
!                               ? ".code.c" : "_code.c") \
!                            : "_code.c")
! #  define DEFINES_SUFFIX  ((pathconf (NULL, _PC_NAME_MAX) > 12) \
!                            ? ((sflag == 0) \
!                               ? ".tab.h" : "_tab.h") \
!                            : "_tab.h")
! #  define OUTPUT_SUFFIX   ((pathconf (NULL, _PC_NAME_MAX) > 12) \
!                            ? ((sflag == 0) \
!                               ? ".tab.c" : "_tab.c") \
!                            : "_tab.c")
! #  define VERBOSE_SUFFIX  ((pathconf (NULL, _PC_NAME_MAX) > 12) \
!                            ? ((sflag == 0) \
!                               ? ".output" : ".out") \
!                            : ".out")
! # else /* ! __DJGPP__ */
! #  define CODE_SUFFIX     "_code.c"
! #  define DEFINES_SUFFIX  "_tab.h"
! #  define OUTPUT_SUFFIX   "_tab.c"
! #  define VERBOSE_SUFFIX  ".out"
! # endif /* ! __DJGPP__ */
! #else /* ! MSDOS */
! # define CODE_SUFFIX      ".code.c"
! # define DEFINES_SUFFIX   ".tab.h"
! # define OUTPUT_SUFFIX    ".tab.c"
! # define VERBOSE_SUFFIX   ".output"
! #endif /* ! __MSDOS__ */
  
  /* keyword codes */
  
  #define TOKEN 0
  #define LEFT 1
*************** struct action
*** 179,188 ****
--- 209,221 ----
  /* global variables */
  
  extern char dflag;
  extern char lflag;
  extern char rflag;
+ #ifdef __DJGPP__
+ extern char sflag;
+ #endif
  extern char tflag;
  extern char vflag;
  extern char *symbol_prefix;
  
  extern char *myname;
diff -acrpNC5 byacc-1.9.orig/main.c byacc-1.9.djgpp/main.c
*** byacc-1.9.orig/main.c	Wed Aug 10 17:33:14 1994
--- byacc-1.9.djgpp/main.c	Sun Jul  9 02:34:24 2000
***************
*** 2,18 ****
  #include "defs.h"
  
  char dflag;
  char lflag;
  char rflag;
  char tflag;
  char vflag;
  
  char *symbol_prefix;
  char *file_prefix = "y";
! char *myname = "yacc";
  char *temp_form = "yacc.XXXXXXX";
  
  int lineno;
  int outline;
  
  char *action_file_name;
--- 2,32 ----
  #include "defs.h"
  
  char dflag;
  char lflag;
  char rflag;
+ #ifdef __DJGPP__
+ /* DJGPP specific flag:
+    A value of 0 means that the command-line option `-s'
+    has not been specified and 1 that it has been specified.
+    sflag = 0: use LFN on Win9X with LFN support available.
+    sflag = 1: use SFN on Win9X with LFN support available.
+    sflag is ignored on plain DOS and Win9X without LFN support available.
+ */
+ char sflag = 0;
+ #endif
  char tflag;
  char vflag;
  
  char *symbol_prefix;
  char *file_prefix = "y";
! char *myname = "byacc";
! #ifdef __MSDOS__
! char *temp_form = "yXXXXXXX";
! #else /* ! __MSDOS__ */
  char *temp_form = "yacc.XXXXXXX";
+ #endif /* ! MSDOS */
  
  int lineno;
  int outline;
  
  char *action_file_name;
*************** set_signals()
*** 96,106 ****
  }
  
  
  usage()
  {
!     fprintf(stderr, "usage: %s [-dlrtv] [-b file_prefix] [-p symbol_prefix] filename\n", myname);
      exit(1);
  }
  
  
  getargs(argc, argv)
--- 110,120 ----
  }
  
  
  usage()
  {
!     fprintf(stderr, "usage: %s [-dlrstv] [-b file_prefix] [-p symbol_prefix] filename\n", myname);
      exit(1);
  }
  
  
  getargs(argc, argv)
*************** char *argv[];
*** 154,163 ****
--- 168,183 ----
  
  	case 'r':
  	    rflag = 1;
  	    break;
  
+ #ifdef __DJGPP__
+ 	case 's':
+ 	    sflag = 1;
+ 	    break;
+ #endif
+ 
  	case 't':
  	    tflag = 1;
  	    break;
  
  	case 'v':
*************** char *argv[];
*** 185,194 ****
--- 205,219 ----
  
  	    case 'r':
  		rflag = 1;
  		break;
  
+ #ifdef __DJGPP__
+ 	    case 's':
+ 		sflag = 1;
+ 		break;
+ #endif
  	    case 't':
  		tflag = 1;
  		break;
  
  	    case 'v':
*************** unsigned n;
*** 224,238 ****
  }
  
  
  create_file_names()
  {
!     int i, len;
      char *tmpdir;
  
      tmpdir = getenv("TMPDIR");
!     if (tmpdir == 0) tmpdir = "/tmp";
  
      len = strlen(tmpdir);
      i = len + 13;
      if (len && tmpdir[len-1] != '/')
  	++i;
--- 249,275 ----
  }
  
  
  create_file_names()
  {
!     int i = 0, len;
      char *tmpdir;
  
      tmpdir = getenv("TMPDIR");
! #ifdef __MSDOS__
!     if (tmpdir == NULL) tmpdir = getenv("TMP");
!     if (tmpdir == NULL) tmpdir = getenv("TEMP");
!     if (tmpdir == NULL) tmpdir = ".";
!     while (tmpdir[i] != NULL)
!     {
!       if (tmpdir[i] == BACKSLASH)
!         tmpdir[i] = '/';
!       i++;
!     }
! #else
!     if (tmpdir == NULL) tmpdir = "/tmp";
! #endif
  
      len = strlen(tmpdir);
      i = len + 13;
      if (len && tmpdir[len-1] != '/')
  	++i;
*************** create_file_names()
*** 258,270 ****
--- 295,313 ----
  
      strcpy(action_file_name + len, temp_form);
      strcpy(text_file_name + len, temp_form);
      strcpy(union_file_name + len, temp_form);
  
+ #ifdef __MSDOS__
+     action_file_name[len + 1] = 'a';
+     text_file_name[len + 1] = 't';
+     union_file_name[len + 1] = 'u';
+ #else
      action_file_name[len + 5] = 'a';
      text_file_name[len + 5] = 't';
      union_file_name[len + 5] = 'u';
+ #endif
  
      mktemp(action_file_name);
      mktemp(text_file_name);
      mktemp(union_file_name);
  
diff -acrpNC5 byacc-1.9.orig/Makefile byacc-1.9.djgpp/Makefile
*** byacc-1.9.orig/Makefile	Wed Aug 10 17:33:10 1994
--- byacc-1.9.djgpp/Makefile	Sun Jul  9 02:27:32 2000
***************
*** 1,16 ****
! DEST	      = .
  
  HDRS	      = defs.h
  
! CFLAGS	      = -O -DNDEBUG
  
  LDFLAGS	      =
  
  LIBS	      =
  
! LINKER	      = cc
  
  MAKEFILE      = Makefile
  
  OBJS	      = closure.o \
  		error.o \
--- 1,20 ----
! DEST	      = ${DJDIR}
! 
! EXEEXT     = .exe
  
  HDRS	      = defs.h
  
! CFLAGS        = -O2 -g -DNDEBUG
  
  LDFLAGS	      =
  
  LIBS	      =
  
! LINKER	      = gcc
! 
! INSTALL       = /dev/env/DJDIR/bin/ginstall.exe
  
  MAKEFILE      = Makefile
  
  OBJS	      = closure.o \
  		error.o \
*************** OBJS	      = closure.o \
*** 25,35 ****
  		verbose.o \
  		warshall.o
  
  PRINT	      = pr -f -l88
  
! PROGRAM	      = yacc
  
  SRCS	      = closure.c \
  		error.c \
  		lalr.c \
  		lr0.c \
--- 29,39 ----
  		verbose.o \
  		warshall.o
  
  PRINT	      = pr -f -l88
  
! PROGRAM	      = byacc$(EXEEXT)
  
  SRCS	      = closure.c \
  		error.c \
  		lalr.c \
  		lr0.c \
*************** SRCS	      = closure.c \
*** 40,74 ****
  		skeleton.c \
  		symtab.c \
  		verbose.c \
  		warshall.c
  
! all:		$(PROGRAM)
  
  $(PROGRAM):     $(OBJS) $(LIBS)
  		@echo -n "Loading $(PROGRAM) ... "
  		@$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
  		@echo "done"
  
  clean:;		@rm -f $(OBJS)
  
! clobber:;	@rm -f $(OBJS) $(PROGRAM)
  
  depend:;	@mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
  
  index:;		@ctags -wx $(HDRS) $(SRCS)
  
! install:	$(PROGRAM)
  		@echo Installing $(PROGRAM) in $(DEST)
! 		@install -s $(PROGRAM) $(DEST)
  
  listing:;	@$(PRINT) Makefile $(HDRS) $(SRCS) | lpr
  
  lint:;		@lint $(SRCS)
  
  program:        $(PROGRAM)
  
  tags:           $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
  
  ###
  closure.o: defs.h
  error.o: defs.h
--- 44,85 ----
  		skeleton.c \
  		symtab.c \
  		verbose.c \
  		warshall.c
  
! all:		$(PROGRAM) yacc$(EXEEXT)
  
  $(PROGRAM):     $(OBJS) $(LIBS)
  		@echo -n "Loading $(PROGRAM) ... "
  		@$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS)
  		@echo "done"
  
  clean:;		@rm -f $(OBJS)
  
! clobber:;	@rm -f $(OBJS) $(PROGRAM) yacc$(EXEEXT)
  
  depend:;	@mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
  
  index:;		@ctags -wx $(HDRS) $(SRCS)
  
! install:	$(PROGRAM) yacc$(EXEEXT)
  		@echo Installing $(PROGRAM) in $(DEST)
! 		@$(INSTALL) -d $(DEST)/bin
! 		@$(INSTALL) -d $(DEST)/man/man1
! 		@$(INSTALL) -s $(PROGRAM) $(DEST)/bin/$(PROGRAM)
! 		@$(INSTALL)    yacc$(EXEEXT) $(DEST)/bin/yacc$(EXEEXT)
! 		@$(INSTALL)    yacc.1 $(DEST)/man/man1/yacc.1
  
  listing:;	@$(PRINT) Makefile $(HDRS) $(SRCS) | lpr
  
  lint:;		@lint $(SRCS)
  
  program:        $(PROGRAM)
  
+ yacc$(EXEEXT):  $(PROGRAM)
+ 		ln -s $(PROGRAM) yacc
+ 
  tags:           $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
  
  ###
  closure.o: defs.h
  error.o: defs.h
diff -acrpNC5 byacc-1.9.orig/yacc.1 byacc-1.9.djgpp/yacc.1
*** byacc-1.9.orig/yacc.1	Wed Aug 10 17:33:18 1994
--- byacc-1.9.djgpp/yacc.1	Sun Jul  9 02:27:32 2000
***************
*** 3,13 ****
  .TH YACC 1 "July\ 15,\ 1990"
  .UC 6
  .SH NAME
  Yacc \- an LALR(1) parser generator
  .SH SYNOPSIS
! .B yacc [ -dlrtv ] [ -b
  .I file_prefix
  .B ] [ -p
  .I symbol_prefix
  .B ]
  .I filename
--- 3,13 ----
  .TH YACC 1 "July\ 15,\ 1990"
  .UC 6
  .SH NAME
  Yacc \- an LALR(1) parser generator
  .SH SYNOPSIS
! .B yacc [ -dlrstv ] [ -b
  .I file_prefix
  .B ] [ -p
  .I symbol_prefix
  .B ]
  .I filename
*************** reads the grammar specification in the f
*** 18,28 ****
  and generates an LR(1) parser for it.
  The parsers consist of a set of LALR(1) parsing tables and a driver routine
  written in the C programming language.
  .I Yacc
  normally writes the parse tables and the driver routine to the file
! .IR y.tab.c.
  .PP
  The following options are available:
  .RS
  .TP
  \fB-b \fIfile_prefix\fR
--- 18,49 ----
  and generates an LR(1) parser for it.
  The parsers consist of a set of LALR(1) parsing tables and a driver routine
  written in the C programming language.
  .I Yacc
  normally writes the parse tables and the driver routine to the file
! .IR y.tab.c
! The same file name is usualy used on Win9X if LFN support is available.
! On Win9X with LFN support available, you can control the type of
! .IR tab
! .IR extension
! .IR separator
! you prefer to use by seting or omiting the
! .B -s
! command-line option. On Win9X with LFN support available and an omited
! .B -s
! option a dot is used as extension separator in all file names and you will
! get the same file names as on a posix system.
! On plain DOS the 
! .B -s
! option is ignored.
! On Win9X with LFN support available, you can force the use of
! .IR y_tab.c
! as file name if you specify the
! .B -s
! option. On plain DOS
! .IR y_tab.c
! is always used as file name.
  .PP
  The following options are available:
  .RS
  .TP
  \fB-b \fIfile_prefix\fR
*************** The default prefix is the character
*** 36,58 ****
  .TP
  .B -d
  The \fB-d\fR option causes the header file
  .IR y.tab.h
  to be written.
  .TP
  .B -l
  If the
  .B -l
  option is not specified,
  .I yacc
! will insert \#line directives in the generated code.
! The \#line directives let the C compiler relate errors in the
  generated code to the user's original code.
  If the \fB-l\fR option is specified,
  .I yacc
! will not insert the \#line directives.
! \&\#line directives specified by the user will be retained.
  .TP
  \fB-p \fIsymbol_prefix\fR
  The
  .B -p
  option changes the prefix prepended to yacc-generated symbols to
--- 57,90 ----
  .TP
  .B -d
  The \fB-d\fR option causes the header file
  .IR y.tab.h
  to be written.
+ The
+ .IR y.tab.h
+ file name is also used on Win9X if LFN support is available
+ and the
+ .B -s
+ option has been omited.
+ On plain DOS or Win9X with LFN support available and with the
+ .B -s
+ option specified,
+ .IR y_tab.h
+ will be used as the file name.
  .TP
  .B -l
  If the
  .B -l
  option is not specified,
  .I yacc
! will insert #line directives in the generated code.
! The #line directives let the C compiler relate errors in the
  generated code to the user's original code.
  If the \fB-l\fR option is specified,
  .I yacc
! will not insert the #line directives.
! #line directives specified by the user will be retained.
  .TP
  \fB-p \fIsymbol_prefix\fR
  The
  .B -p
  option changes the prefix prepended to yacc-generated symbols to
*************** The
*** 66,78 ****
  .B -r
  option causes
  .I yacc
  to produce separate files for code and tables.  The code file
  is named
! .IR y.code.c,
  and the tables file is named
  .IR y.tab.c.
  .TP
  .B -t
  The
  .B -t
  option changes the preprocessor directives generated by
--- 98,155 ----
  .B -r
  option causes
  .I yacc
  to produce separate files for code and tables.  The code file
  is named
! .IR y.code.c
  and the tables file is named
  .IR y.tab.c.
+ The
+ .IR y.code.c
+ and
+ .IR y.tab.c
+ file names are also used on Win9X if LFN support is available and the
+ .B -s
+ option has been omited.
+ On plain DOS or Win9X with LFN support available
+ .IR y_code.c
+ and
+ .IR y_tab.c
+ are used as file name if the
+ .B -s
+ option has been specified.
+ .TP
+ .B -s
+ The
+ .B -s
+ is a DJGPP specific option that allows the user to choose the
+ type of prefered
+ .IR tab
+ .IR extension
+ .IR separator.
+ The
+ .B -s
+ option is ignored on plain DOS and Win9X without LFN support.
+ In this case always file names with an underscore as
+ .IR tab
+ .IR extension
+ .IR separator
+ will be used.
+ On Win9X with LFN support available, if the
+ .B -s
+ option is specified, always file names with an undersore as
+ .IR tab
+ .IR extension
+ .IR separator
+ will be used.
+ On Win9X with LFN support available, if the
+ .B -s
+ option is omited, always file names with a dot as
+ .IR tab
+ .IR extension
+ .IR separator
+ will be used.
  .TP
  .B -t
  The
  .B -t
  option changes the preprocessor directives generated by
*************** so that debugging statements will be inc
*** 83,97 ****
--- 160,187 ----
  The
  .B -v
  option causes a human-readable description of the generated parser to
  be written to the file
  .IR y.output.
+ The
+ .IR y.output
+ file name is also used on Win9X if LFN support is available and the
+ .B -s
+ option has not been specified.
+ On plain DOS or Win9X with LFN support available
+ .IR y.out
+ is used as file name if the
+ .B -s
+ option has been specified.
  .RE
  .PP
  If the environment variable TMPDIR is set, the string denoted by
  TMPDIR will be used as the name of the directory where the temporary
  files are created.
+ On MS-DOS the string denoted by one of the following environment variables TMPDIR, TMP
+ or TEMP (in this order) will be used as the name of the directory where the temporary
+ files are created. If non of them are set, the working directory will be used.
  .SH FILES
  .IR y.code.c
  .br
  .IR y.tab.c
  .br
*************** files are created.
*** 102,111 ****
--- 192,242 ----
  .IR /tmp/yacc.aXXXXXX
  .br
  .IR /tmp/yacc.tXXXXXX
  .br
  .IR /tmp/yacc.uXXXXXX
+ 
+ 
+ On Win9X with LFN support available and the
+ .B -s
+ option omited the following files will be generated:
+ 
+ .IR y.code.c
+ .br
+ .IR y.tab.c
+ .br
+ .IR y.tab.h
+ .br
+ .IR y.output
+ .br
+ .IR $TMPDIR/yaXXXXXX
+ .br
+ .IR $TMPDIR/ytXXXXXX
+ .br
+ .IR $TMPDIR/yuXXXXXX
+ 
+ On plain DOS and Win9X with LFN support available and the
+ .B -s
+ option specified the following files will be generated:
+ 
+ .IR y_code.c
+ .br
+ .IR y_tab.c
+ .br
+ .IR y_tab.h
+ .br
+ .IR y.out
+ .br
+ .IR $TMPDIR/yaXXXXXX
+ .br
+ .IR $TMPDIR/ytXXXXXX
+ .br
+ .IR $TMPDIR/yuXXXXXX
+ 
+ $TMPDIR denotes the value of one of the environment variables TMPDIR, TMP or TEMP or the working
+ directory if non of them are set.
+ 
  .SH DIAGNOSTICS
  If there are rules that are never reduced, the number of such rules is
  reported on standard error.
  If there are any LALR(1) conflicts, the number of conflicts is reported
  on standard error.
