This documents the changes between the second `public' release of CWRU bash
and this, its third release.  It summarizes, without going into detail, the
changes that have been made. 

NEW FEATURES

	o Some performance work was done.  Scripts are now somewhat faster.
	  Bash will never be a speed demon -- it allocates, frees, and
	  copies way too many times.

	o Added a new readline variable `prefer-visual-bell'.  If this is
	  set, and the `vb' termcap capability exists, visual rather than
	  audible bells will be used.

	o `bash file' will now search the $PATH for `file' if it is not
	  found in the current directory.

	o new machines.h variables: HAVE_MULTIPLE_GROUPS, HAVE_RESOURCE

	o new machines.h entries: AIX/PS2, System V.4 on 386, AIX/370, Ardent
	  Titan, DG AViiON, Harris Nighthawk, SGI Iris

	o all filenames are now fewer than 14 characters

	o The FIGNORE variable was implemented

NOTABLE BUG FIXES

	o When expanding commands, word splitting is no longer performed on
	  all words, but only the output of command, arithmetic, and variable
	  and parameter substitution

	o The close-on-exec code now also passes around a bitmap of file
	  descriptors to close in child processes.  This is necessary
	  because of the way bash does pipes.  Details on request.

	o Fixed readline to do correct cursor motion when using Sun's
	  shelltool or cmdtool.

	o Fixed command substitution so that old-style substitution (``)
	  passes the characters between the backquotes through verbatim.

	o Fixed reading here documents to obey newline quoting

                                   11/19
                                   -----
nojobs.c
	- removed bogus call to set_process_resource_limits

test.c
	- changed references to SYSV to USG

readline/readline.c
	- added support for visible bells, turned on by the startup file
	  variable "prefer-visible-bell"
	- changed rl_signal_handler() so that sigsetmask() is not called
	  on vanilla SYSV machines
	- made include declarations correct for USG machines that define
	  TIOCGWINSZ in sys/ioctl.h

variables.c
	- s5r3 invokes getenv() before main() in some cases.  Make sure
	  that the variable hash table is created there if it does not
	  exist.  (BSD systems using gprof also do this, by the way.)

                                   11/20
                                   -----
readline/readline.c
	- Make sure HACK_TERMCAP_MOTION is not defined.  It's faster to
	  print a character than an escape sequence for a non-destructive
	  space, and it screws up on OpenWindows shelltool and cmdtool.

subst.c
	- Finally fixed the word splitting bug.  Bash now splits only the
	  results of command, parameter, and arithmetic expansion that do
	  not appear in double quotes.  As currently implemented, the change
	  has expand_word_internal return a flag indicating whether or not
	  it expanded something.  If not, the word is not split.  This is
	  only noticed by expand_words_1; all other functions that call
	  expand_word_internal ignore the result -- they are either supposed
	  to or not supposed to do word splitting and they take care of it
	  themselves.  This latter bit may have to be changed later.

readline/emacs_keymap.c
	- Make M-TAB insert a tab.  The binding had been inadvertently
	  omitted.

builtins.c, builtins.c.posix
	- make read_builtin() call string_list_dollar_star when more words
	  are read than variables specified, because Posix specifies that in
	  this case, the intervening separators are preserved in the
	  remaining words (``the leftover words and their intervening
	  separators are assigned to the last var'').  This allows the
	  following to work correctly:

		while read line
		do
			echo "$line"
		done < /etc/passwd

subst.c
	- remove from list_string the requirement that the word be quoted to
	  make sequences of characters in $IFS expand to separate arguments.
	  I can't remember why it was there.

builtins.c, builtins.c.posix
	- both ksh and the s5r3 sh remove the trailing newline from a line
	  input to `read', so now bash does, too.

                                   11/21
                                   -----
execute_cmd.c
	- Finally do things the *right* way, and pass around a bitmap of
	  file descriptors to close when forking.  The way bash does
	  pipes forces this.

builtins.c, builtins.c.posix
	- change the call to execute_command_internal in parse_and_execute
	  to call it with an empty bitmap of file descriptors to close.

shell.c
	- make the fd that we open to read a script argument be close-on-exec

shell.c, variables.c, readline/readline.c
	- add endpwent() everywhere getpwnam or getpwuid is called -- they
	  leave an open file descriptor on systems with YP code derived
	  from Sun's 3.x release.


                                   11/25
                                   -----
builtins.c, builtins.c.posix
	- use the same logic for locating a program when in the exec builtin as
	  when finding a program normally -- pathnames with slashes in them
	  anywhere are not looked up via $PATH.

shell.c
	- when invoked as `bash file', use $PATH to look up `file', using the
	  same logic as the `.' builtin.  (Said logic is possibly faulty --
	  files with slashes in their names are still looked up in the path.
	  This is different from ksh86, at least.)  Do this only if `file'
	  is not found in the current directory.
	- when invoked as an interactive login shell, close all file
	  descriptors < 20 first thing.  There is a fairly common bug in the
	  Sun NFS code that leaves an open file descriptor when you use one
	  of the getpw* C library functions. 

                                   11/28
                                   -----
shell.c
	- make sure history_expansion is set to 0 if interactive is set to 0.
	  This fix makes rn's mbox.saver run correctly, rather than report
	  the famous `Event not found' error.

                                   11/29
                                   -----
variables.c
	- make sure the hash table is created in getenv if necessary on all
	  systems; gprof requires it.

builtins.c, builtins.c.posix
	- make read return 1 only on EOF

shell.c
	- make `bash file' look through $PATH only if ./file does not exist.
	  (bug fix for previous improvement)

readline/readline.c
	- need to turn off CRMOD when using the BSD tty driver so that extra
	  carriage returns are not generated

subst.c, parse.y
	- changes so that characters between backquotes in double quotes are
	  passed through verbatim, so this will work: echo "ab `echo "hi"` cd"
	  echoes ab hi cd.  The fixes are to string_extract_double_quoted and
	  read_token.

subst.c
	- small change in command substitution error message printed when
	  pipe(2) fails -- `backquote' --> `command'

                                   12/1
                                   ----
parse.y, shell.c, builtins.c, builtins.c.posix, make_cmd.c
	- changed the way parsing of here documents works in the presence
	  of continued lines (unquoted backslash-newline pair or via quoting).
	  Now the shell reads up to an unquoted newline before trying to
	  read the contents of the here-document (that's the way sh works).
	  The changes are spread out over multiple files.

	  The cases that this fixes are these:

		cat << EOF | sed -n \
			-e 'blah blah...' \
			-e 'more more...'
		input
		to
		cat
		for
		sed
		EOF

		cat << EOF | echo 'a b c
		d e f
		g h i'
		EOF

	  Previously, the yacc-generated bash parser would resolve the
	  `<< EOF' redirection and immediately try to create the here
	  document, and the rest of the command would become part of
	  the here document.

	  Changes by file:
		parse.y:
			added two new variables, need_here_doc, and
			redirection_needing_here_doc.  The yacc actions
			associated with the here-document productions
			were modified to set these variables appropriately.
			Changed read_token to read the text of any pending
			here-documents just before it returns an unquoted
			newline to the parser.
		make_cmd.c:
			moved the code that reads the text of the
			here-document out of make_redirection into a new
			function named make_here_document.  The cases in
			make_redirection don't do anything now; they just
			set the EOF marker and return
		shell.c:
			added a wrapper function around yyparse called
			parse_command that initializes the above variables,
			calls parse_command, then makes the here-document
			if necessary by calling make_here_document (usually
			it doesn't need to; read_token has already done it).
		builtins.c.posix:
		builtins.c:
			changed the call to yyparse to a call to parse_command
			(in parse_and_execute)

subst.c
	- for some reason which I have not yet fully divined, a shell whose
	  standard output (file descriptor 1) is closed cannot perform
	  backquote substitution if the child closes both sides of the pipe
	  after dup2(fildes[1], 1).  The obvious fix is to not close 
	  fildes[0] in the child, but it's not intuitive.  I got the example
	  from the Dec Ultrix 4.0 release notes:

		exec >&-
		echo `echo hi` >&2

	  The 4.3 BSD sh has the same problem.  I'm stumped.

	  (LATER NOTE:  I'm not stumped anymore.)

                                   12/2
                                   ----
shell.c
	- shells started to execute scripts (`bash file') should set
	  remember_on_history and history_expansion to 0.
	- redid maybe_execute_file to eliminate a possibly unnecessary
	  call to stat.  Just open the file immediately and call fstat
	  to get the size.  Return if the open fails.

execute_cmd.c
	- redid same_file to eliminate some calls to stat().  Added two
	  new parameters, which, if non-null, are pointers to status
	  information about the pathnames passed.  This required changes
	  to find_user_command_in_path.
	- eliminated some calls to strlen in find_user_command_in_path

builtins.c, builtins.c.posix
	- changed calls to same_file to pass the two extra parameters

parse.y
	- only call pre_process_line in shell_getc if the shell is
	  interactive, because history expansion and remembering lines
	  on the history are not done for script shells
	- make the shell echo comment lines (lines whose first character
	  is `#') by moving the after_pre_process label to just before 
	  that code
	- eliminated several calls to xrealloc in shell_getc when the
	  shell is non-interactive by correcting confusing uses of
	  shell_input_line_size -- after pre_process_line is called, it
	  must be set to strlen(shell_input_line) because we don't know
	  what the `true' allocated size of that block is, but not if
	  pre_process_line is never called.  This became apparent
	  as a result of the previous two changes.

readline/history.c
	- make history_do_write abort on write errors instead of ignoring
	  them.

                                   12/3
                                   ----
general.c
	- defined bcopy in terms of memcpy for USG systems
	- changed the USG getwd to return the result of getcwd

                                   12/4
                                   ----
readline/vi_keymap.c, readline/funmap.c
	- changed #ifdef FILE to #ifdef BUFSIZ as the test for a
	  previous inclusion of stdio.h

general.c
	- changed USG getwd emulation to return an error message in the
	  buffer if the getcwd fails

subst.c
	- fixed extern declaration of copy_word

variables.c
	- set_var_auto_export does a complete new lookup of the variable
	  it's setting.  Most of the time in initialize_shell_variables
	  it's called immediately after bind_variable or set_if_not on
	  the same variable.  Made set_if_not return a SHELL_VAR * like
	  bind_variable, then replaced the calls to set_var_auto_export
	  with calls to a new function set_auto_export that is passed a
	  SHELL_VAR * and skips the lookup.

execute_cmd.c
	- don't call print_simple_command in execute_simple_command if the
	  shell is not interactive, since the only place that's ever used
	  is pretty_print_job, which is never called if the shell is not
	  interactive.  This might need to be changed.

                                   12/5
                                   ----
parse.y
	- made read_token call atoi(3) instead of using sscanf("%d") when
	  reading numbers

variables.c
	- changed a call to sprintf in put_command_name_into_env into two
	  assignment statements and a call to strcpy

variables.c
	- changed a call to sprintf in make_var_array into two calls to
	  strcpy and an assignment statement

execute_cmd.c
	- only call geteuid() once in executable_file and cache the result

general.h
	- added definitions for STREQ and STREQN, which are replacements for
	  strcmp(a, b) == 0 and strncmp(a, b, n) == 0 that check the first
	  character to possibly save a function call.  From C News.

variables.c
	- changed add_or_supercede to use STREQN 

parse.y
	- changed most instances of strcmp() in read_token to use STREQ.
	  Rearranged some code to reduce the number of times this is called.
	  The idea is to rewrite code like

		if ((this token is xx) && (certain conditions hold))

	  to be

		if ((certain conditions hold) && (this token is xx))

	  to take advantage of left-to-right evaluation done by many (most?)
	  C compilers.

subst.c
	- changed instance of strcmp() in stupidly_hack_special_variables
	  to STREQ

alias.c
	- changed instance of strcmp() in find_alias to STREQ

hash.c
	- changed instance of strcmp() in find_hash_item to STREQ

execute_cmd.c
	- changed instance of strcmp() in find_shell_builtin to STREQ

unwind_prot.c
	- changed instance of strcmp() in unwind_frame_discard_internal
	  to STREQ

                                   12/6
                                   ----
readline/readline.c
	- In rl_complete_internal, when listing all completion possibilities,
	  if the length of the longest item to be listed is greater than the
	  screen width, a divide-by-0 exception can result.  Fix is to always
	  make sure `limit' is at least 1.

                                   12/7
                                   ----
readline/readline.c
	- Add a new #define, HAVE_BSD_SIGNALS.  This is for hybrid systems
	  like HP-UX (pre-Posix) that have both termio and the BSD reliable
	  signal mechanism (sigmask, sigblock, sigsetmask, etc.).  This
	  allows better use of `critical sections' when changing the terminal
	  parameters.

readline/history.c
	- Need to #include <fcntl.h> for System V.4

makeargs.sh
	- If we are on System V.4, define USGr4 and make it show through to
	  the rest of the build process

machines.h
	- changed the i386 entry to add support for recognizing System V.4
	  machines

                                   12/8
                                   ----
shell.c
	- made the TMOUT code be executed only for interactive shells
	- .bashrc should not be run if the standard input and standard
	  output are not ttys

machines.h
	- reorganized the `i386' section so that all defines for a single
	  machine/OS combination are now grouped

                                   12/9
                                   ----
shell.c
	- make the -s flag force interactive use only if all the other
	  conditions for interactive use are met
	- since the same conditions are used to mark the shell as
	  interactive and to decide whether or not to execute the .bashrc,
	  only execute the .bashrc if we are interactive, and use the
	  value of `interactive' in the test
	- only test if `file' in `bash file' is a binary file if the file
	  descriptor obtained by opening it is not a tty.  An argument of
	  /dev/fd/xx is always a tty, and we can't read on it and seek
	  back to the beginning.

variables.c
	- replaced the random number generator functions with the simple
	  linear congruential generator from the ANSI C standard

                                   12/10
                                   -----
machines.h
	- added new defines: HAVE_MULTIPLE_GROUPS for systems that allow
	  multiple simultaneous group membership and support getgroups(2),
	  and HAVE_RESOURCE for systems that define struct rusage and
	  have getrlimit(2) and setrlimit(2)

execute_cmd.c
	- changed executable_file and group_member to obey the new
	  HAVE_MULTIPLE_GROUPS define

ulimit.c
	- allow the full range of options for systems that define
	  HAVE_RESOURCE

builtins.c, builtins.c.posix
	- make systems that have HAVE_RESOURCE defined use the getrusage
	  code in times_builtin

                                   12/11
                                   -----
cpp-Makefile
	- make ulimit.o dependent on `psize' so that psize can use 
	  the same #ifdefs and #defines as the rest of the code

psize.c
	- added definition of memset for those machines that don't have
	  it

psize.sh
	- removed the compilation of psize.c

shell.c
	- save and restore the SIGALRM catcher around the TMOUT code in
	  read_command, in case it's trapped

trap.c, execute_cmd.c, shell.c
	- redid the way traps were done slightly.  Now, instead of calling
	  parse_and_execute out of a signal handler (!), the signal handler
	  just sets a flag that the rest of the code checks at appropriate
	  times.  This means traps are kind of like interrupts, but serviced
	  far fewer times.  It also means a bit of a loss of immediacy.

                                   12/12
                                   -----

shell.c
	- fixed a bug in read_command that caused the handler for SIGALRM
	  to be reset to garbage each time through.

variables.c
	- change makunbound to call stupidly_hack_special_variables so
	  that things like `noclobber' and such can be reset properly
	  on function exit or when a `special' variable is unset.

                                   12/14
                                   -----
parse.y
	- made `<>' without a number specifying the file descriptor open
	  the named file for both standard input and standard output.

cpp-Makefile, jobs.h, endian.c, endian.h, endian.sh
	- made jobs.h include a file `endian.h' if NO_WAIT_H is defined.
	  This file defines either BIG_ENDIAN or LITTLE_ENDIAN, and is
	  automatically generated by `endian' and `endian.sh'.

execute_cmd.c
	- aa && bb & was being executed incorrectly -- the subshell was
	  not being forced for the `aa && bb' portion.  Same for aa || bb &.
	  Of course, if the sh `grammar' was regular `aa && bb &' would
	  be treated the same way as `aa ; bb &'.

cpp-Makefile, psize.sh, ulimit.c
	- changed the `psize' stuff so that ulimit.c includes a file
	  `pipesize.h', which contains a #define for PIPESIZE.
	  pipesize.h depends on psize, which is still made via the standard
	  `make' rules.  It's exactly like the `endian' stuff.

parse.y
	- pre_process_line can return NULL, so we have to take that into
	  account in shell_getc

glob.c
	- fixed glob_pattern_p to only return TRUE for a pattern containing
	  a `[' if there is at least one `]' to match it.  It produces wrong
	  results if allow_null_glob_expansion is set, and is inefficient
	  otherwise (wasted calls to glob_filename).

	  For instance, if some twisted soul sets allow_null_glob_expansion,
	  the following would produce an error without this fix:

		if [ a = a ] ; then echo hi ; fi

                                   12/16
                                   -----
execute_cmd.c, parse.y, shell.h
	- the `subshell bit' in the command struct is being used for two
	  purposes: to signal that the user requested that this command be
	  done in a subshell via `()' and to force some portions of a
	  command to be executed in a subshell, like `{ xx } &'.  We need
	  to differentiate between the two so that the command printed when
	  reporting job status is correct and so the code is clearer.

	  Define two `states' for that value, if non-zero: WANT_SUBSHELL is
	  used when the user requests a subshell, and FORCE_SUBSHELL is used
	  internally by the command execution code.

parse.y
	- clean up some casts, and make sure function arguments are coerced
	  to the correct type

subst.c
	- comment out some unnecessary `break' statements in case statement
	  clauses that immediately follow `goto' statements.  It makes the
	  compilation output cleaner on a compiler that complains about such
	  things, like the IBM/4.3 compiler (High-C).

make_cmd.c
	- move all the error reporting code to the end of the file, so that
	  picky compilers that like to report about mismatches in the number
	  of arguments won't complain about the varargs code.
	- it's not allows to pass a va_list from one function to another, so
	  expand the body of fatal_error to be the same as report_error in
	  the varargs case

                                   12/17
                                   -----
readline/readline.c
	- Use TCXONC in rl_restart_output, if it's defined.

make_cmd.c, builtins.c, builtins.c.posix, shell.c
	- Make all the non-varargs versions of the various error reporting
	  functions take 5 arguments

                                   12/18
                                   -----
builtins.c, builtins.c.posix
	- made the builtins that accept option arguments report errors when
	  they get a bad option, and make these error messages consistent.
	  The builtins affected are: export, hash, history, read, readonly,
	  dirs, jobs, declare, typeset, local, and type.

shell.c
	- make the function that displays the version number of the shell
	  indicate that it's the CWRU version.

readline/readline.c
	- On machines without BSD signals, do a signal(SIGINT, SIG_IGN) in
	  rl_signal_handler if an interrupt is received.  This will take
	  the place of blocking it while in the handler.

jobs.c, jobs.c.posix
	- change the setting of the job control signals SIGTSTP, SIGTTOU,
	  and SIGTTIN to SIG_DFL in make_child when job control is not
	  active

                                   12/19
                                   -----
builtins.c, builtins.c.posix
	- corrected some spelling errors and other mistakes in the help
	  documentation

readline/readline.c
	- Made the inclusion of sys/ptem.h dependent on the definition of
	  USGr4

                                   12/20
                                   -----
machines.h
	- Added -DUSGr4 to SYSDEP_CFLAGS in the System V.4 machines.h entry
	  for the i386 so it will get passed to readline.
	- new entry for Ardent Titan

                                   12/22
                                   -----
general.c
	- added two new functions to print time values in a standard way:
	  print_timeval, which prints the contents of a struct timeval,
	  and print_time_in_hz, which prints a time_t scaled by the value
	  of HZ (which is system-dependent).

builtins.c, builtins.c.posix
	- made times_builtin call the new functions for printing time

                                   12/30
                                   -----
general.h
	- made the definition of `sighandler' as `void' or `int' depend
	  on the definition of VOID_SIGHANDLER; provide the definition
	  for those systems already using that code

machines.h
	- new entry for AIX/PS2 1.2

                                   12/31
                                   -----
mailcheck.c
	- When reporting that a mail file has been read, take into account
	  changes in the file size as well, and only report the change if
	  the file has gotten larger.  This help for systems like USG that
	  don't change the access time of /usr/mail/$USER to be the same
	  as the modification time after the mail in the file is manipulated.

                                    1/2
                                    ---
builtins.c, builtins.c.posix
	- the `command' builtin should not reparse its arguments; it screws
	  up quoting (consider "command echo 'foo &'"), so instead of making
	  a string and calling parse_and_execute, make a new simple command
	  struct, put the arguments to `command' in it as its words, and
	  call execute_command recursively.
	- added a correct extern declaration for copy_word_list () in
	  remember_args

make_cmd.c
	- new function: make_bare_simple_command() to support the changes to
	  the command builtin

                                    1/3
                                    ---
builtins.c.posix, jobs.c.posix, jobs.h.posix
	- renamed these to be `.px' to help out systems with short file names

CWRU.changelog, CWRU.changelog.v2
	- renamed these to CWRU.chlog and CWRU.chlog.v2 for the same reason

longest_signal_desc.c
	- renamed to longest_sig.c

enable-posix
	- changed to recognize and use the `.px' suffix

termcap/termcap.texinfo
	- renamed to termcap.tex

makeargs.sh
	- change instance of `uuname' to `uuname -l' for compatibility with
	  more systems
	- look for uuname in /bin as well as /usr/bin

cpp-Makefile
	- always define HAVE_ALLOCA if HAVE_GCC is defined

bashline.c
	- declare functions referred to in several places at the start of
	  the file

jobs.c, jobs.c.px
	- signal handlers should take one argument to be portable

jobs.c.px
	- hack around SCO Unix broken sigsuspend() and the fact that it
	  can't do job control on /dev/tty

variables.c
	- add declaration for sbrand before it is used

machines.h
	- define USGr3 for generic System V.3 entry; it is used in
	  readline/readline.c to conditionally include sys/ptem.h for the
	  `struct winsize' definition.  I'm about to say screw it and
	  define one myself.

readline/readline.c
	- include sys/ptem.h for both system V.3 and V.4 (USGr3 and USGr4)

                                    1/4
                                    ---
shell.h
	- some USG systems have a definition for MAXPATHLEN, so only define
	  it if there is no existing definition

bashline.c
	- changed operate_and_get_next to realize when it is at the end of
	  the stifled history list and to adjust the history pointer to the
	  `next' line appropriately

readline/history.c
	- made three variables needed by the above change to bashline.c
	  public: history_stifled, max_input_history, and history_length

parse.y
	- reset last_read_token and current_token in handle_eof_input_unit
	  so that an alias expansion on the next command entered will be
	  handled correctly.  If these are not reset, last_read_token ends
	  up being `yacc_EOF', which is not something that that will cause
	  command_token_position to return TRUE.

                                    1/7
                                    ---
execute_cmd.c
	- changed the test for matching jobs when testing for auto-resume
	  to make `exact' work as documented

builtins.c, builtins.c.px
	- Change exit_builtin so an interactive shell prints a message
	  when it exits: `logout' if it is a login shell, `exit' otherwise

general.c
	- include <sys/time.h> and compile in print_timeval if HAVE_RESOURCE
	  is defined

readline/readline.c, readline/readline.h, bashline.c
	- added a new readline function to call on filename completion, after
	  the match list has been generated:
	  rl_filename_completion_ignore_function().
	  It gets to munge the list of matches to its satisfaction.  It is
	  used to implement FIGNORE, a colon-separated list of filename
	  suffixes to ignore when doing filename completion

jobs.c, jobs.c.px
	- rewrote pretty_print_job to fix this bug:

		thor$ { sleep 2 ; exit 1 ;} | sleep 10 &
		[1] 11854
		thor$ j
		[1]+  Running                 { sleep 2; exit 1 } | sleep 10 &
		thor$ j
		[1]+  Exit 1                  { sleep 2; exit 1 } | sleep 10 &
		thor$
		[1]+  Exit 1                  { sleep 2; exit 1 } | sleep 10
		thor$ echo $?
		0

	  (since it's the exit status of the last job in the pipeline that
	  bash cares about, make it the one whose status is displayed.)  Also,
	  print "Running" if any processes in the job are still running,
	  instead of the status of the process group leader.  The code was
	  rearranged a bit as well.

                                    1/8
                                    ---
fc.c
	- changed fc_replhist to call history_get with a parameter offset by
	  history_base, like it should have been in the first place

execute_cmd.c
	- call dispose_used_env_vars () after any call to
	  execute_simple_command, because the temporary environment should be
	  in force only for the simple command immediately following it.
	  This fixes the
		a=c printenv a | printenv a
	  bug, which should print nothing, but used to print `c'.
	- added form feed ('\f') to the list of acceptable control characters
	  in check_binary_file

                                    1/9
                                    ---
make_cmd.c
	- fix to make_simple_command to make <> work.  We need to follow the
	  chain of redirections passed as element.redirect to the end, since
	  there might be more than a single redirection there.

                                   1/14
                                   ----
machines.h
        - redid the DEC, Mips, and Sony entries to get rid of the individual
          MIPSEL and MIPSEB entries.  The goal is to isolate everything into
          manufacturer-specific blocks.

                                   1/18
                                   ----
builtins.c, builtins.c.px
	- added call to QUIT to history_builtin, to allow the display of
	  history entries to be interruptible

variables.c
	- made find_variable return the dynamic value for a variable only
	  if this variable is in the current context.  This is to avoid
	  an `extra' value of RANDOM, for instance, being `wasted' in the
	  call to find_variable in make_local_variable

execute_cmd.c, builtins.c, builtins.c.px, shell.h
	- changed the bitmap holding the file descriptors to be closed in
	  the child to be a structure holding a bitmap and a size, rather
	  than use a char * bitmap with a fixed size, which will inevitably
	  be too small.  You'd probably run out of processes before you
	  ran out of file descriptors, though.  Pipe errors now call
	  throw_to_top_level () rather than return an error, because it's
	  no use continuing with the current pipeline.  Not doing so can
	  cause a call to wait_for () for the remainder of the pipeline,
	  which is just going to sit there in a stopped state with no user
	  feedback.

                                   1/20
                                   ----
subst.c
	- increased the amount of memory allocated when adding a number to
	  the string currently being expanded from 10 to 16.  10 characters
	  will not hold the result of 32767 * 32767, for instance.  16
	  should be plenty, but 32 would be better.

                                   1/21
                                   ----
bashline.c
	- added a new emacs-mode readline command to display the shell version
	  (kind of like Korn's C-V, but it displays on a separate line).  It's
	  on C-X C-V.

                                   1/22
                                   ----
shell.c
	- make termination_unwind_protect save the history only for an
	  interactive shell
	- consolidated the loading and saving of the history file into
	  two functions: load_history () and save_history ()
	- changed the history writing behavior so that interactive shells
	  will always try to append the history from the current session
	  to this history file instead of rewriting it every time.

                                   1/23
                                   ----
general.h
	- Posix systems have void signal handlers

ulimit.c, ulimit.c.new, jobs.c.px, jobs.c, general.c
	- moved the getdtablesize() emulation for non-BSD systems to
	  general.c, removing the private copies held by jobs.c.px, jobs.c,
	  ulimit.c, and ulimit.c.new

execute_cmd.c, general.c
	- replaced all references to NOFILE with references to
	  getdtablesize ()

machines.h
	- new entries for DG AViiON and Harris Nighthawk

general.h
	- split the replacement Posix stat definitions into their own
	  header file, `posixstat.h'

test.c
	- removed the Posix S_IS* macro definitions and added an include of
	  posixstat.h to pick them up

general.c
	- added an inclusion of posixstat.h for the replacement Posix stat
	  definitions

posixstat.h
	- this file should be included only after <sys/stat.h>
	- some Posix-wannabe systems do not define the S_IS* macros, and
	  do not define the S_IF macros in favor of _S_IF* macros.

shell.c
	- make all signals in the terminating_signals array be conditionally
	  compiled it -- no signals are assumed to be present

glob.c
	- some Posix systems do not have a member d_ino in struct dirent.
	  Its use is now compiled out if _POSIX_SOURCE is defined.  I don't
	  think the check is necessary anyway; isn't readdir guaranteed to
	  return only active directory entries?

cpp-Makefile
	- added various entries for posixstat.h

subst.c
	- changed the code by add_number in expand_word_internal to call
	  itos() when translating an int to a string

misc.c
	- enlarged MAX_INT_LEN to 32

                                   1/25
                                   ----
shell.c
	- made bash, when invoked with the -c command option, save the rest
	  of the arguments as the positional parameters

                                   1/29
                                   ----

misc.c
	- made itos() handle negative numbers correctly

posixstat.h
	- include <sys/stat.h>, now can be included as a replacement for
	  stat.h

builtins.c, builtins.c.px, execute_cmd.c, mailcheck.c, shell.c, test.c
	- changed to include posixstat.h instead of <sys/stat.h>

                                   1/30
                                   ----

lots of changes to nearly every file as the result of a merge with Brian's
version of this code

                                   1/31
                                   ----

parse.y
	- correctly cast NULL pointer arguments passed to the command
	  construction functions in make_cmd.c

test.c
	- change uses of access(2) to call a new function eaccess(), which
	  performs a stat(2) call and checks the permission bits itself.
	  This means that root no longer finds that /etc/passwd is an
	  executable file.

                                    2/3
                                    ---
test.c
        - make eaccess() use group_member() from execute_cmd.c to test group
          membership against all groups a user is in.  Do this if the system
	  supports multiple groups.

                                    2/5
                                    ---
shell.c
	- bash always executes .bashrc unless it's a login shell or acting
	  like sh.  Brian wants it this way.

parse.y
	- build a stack of tokens that have been alias expanded during a 
	  single call to read_token(), and use it to stop alias loops

                                    2/6
                                    ---
make_cmd.c
	- if redirection_expand returns NULL, it means that the word being
	  expanded expanded into multiple words.  In this case, abort the
	  here-document processing.  Specifically:

		cat << $(date)

	  no longer dumps core calling strlen with a null argument.

                                    2/8
                                    ---
readline/vi_mode.c
	- some changes to rl_vi_eWord to make completion on `*' work
	  right

builtins.c, builtins.c.px
	- made history_builtin add a newline at the end of the history
	  expansions done when the -s option is specified

                                    2/9
                                    ---

variables.c
       - backed out of 1/18 change to find_variable().  It has the effect
	 of making this function always return the same value:

	       rand()
	       {
		       echo $RANDOM
	       }

				   2/10
				   ----
parse.y
	- save the value of eof_encountered around execution of
	  PROMPT_COMMAND, otherwise ignoreeof will not work

documentation/bash.1
	- Add descriptions of the keybindings to go from emacs editing mode
	  to vi and vice versa

				   2/11
				   ----
shell.c
	- added tests for running shell scripts and for stdin being a tty
	  to the test for reading and executing .bashrc.  This means that
	  bash -c command still runs .bashrc (that's next :-).

parse.y
	- added test for interactive to disable alias expansion for
	  non-interactive shells

builtins.c, builtins.c.px
	- history -s is now gone

                                   2/12
                                   ----
shell.c
	- implemented a better (hopefully the final) test for executing
	  ~/.bashrc at shell startup

general.c
	- made dup2() emulation better, based on ideas from Usenet

fc.c
	- made fc_gethnum treat 0 the same as a negative number (an offset
	  from the current command number) so that fc -l -30 0 works
	  correctly
	- make sure history_base is ignored in all calculations, but use it
	  when reporting the command number with the -l flag
	- make `last' default to the current command when the -l flag is
	  given so that fc -l -20 works as it does in ksh

                                   2/20
                                   ----

Many changes from a merge with bfox's version 1.07

                                     2/25
                                     ----

jobs.c.px, jobs.h.px, builtins.c.px
	- These files are no more, having been merged with jobs.c, jobs.h
	  and builtins.c

jobs.c, jobs.h, builtins.c, shell.c, make_cmd.c, subst.c, execute_cmd.c,
nojobs.c
	- Adopted pid_t and WAIT_T as `native' types
	- Propagated pid_t definition around to all necessary files

readline/readline.c
	- Some systems need the USG code without being USG (like HPUX and
	  AIX, for instance)

                                     2/27
                                     ----

fc.c
	- fixed up a few remaining bugs
	- added code that lets options be grouped behind a single `-'
	- added fencepost code that prevents overflow errors

Another merge with Brian's almost-1.07

                                    3/1
                                    ---

A final merge with Brian's 1.07

                                     3/2
                                     ---

execute_cmd.c
	- fixed a problem with asynchronous commands started from `.'
	  scripts (run with parse_and_execute) being waited for
	  inappropriately on systems without job control.  For example,
	  `. foo' where foo contains

		. bar
		echo bar done

	  and bar contains

		sleep 300 &
		sleep 300 &

	  would not echo `bar done' until 5 minutes had passed and both
	  `sleep' processes had exited.  Badness.

nojobs.c
	- fixed up so that bash can be built without job control on BSD
	  systems -- God forbid.

                                    3/7
                                    ---

jobs.c
	- Added code to initialize_jobs () to handle the broken NeXT 2.0
	  rlogind, which starts bash so that the terminal still belongs
	  to the rlogind process and getpgrp () returns 0 (?).  Looks like
	  a setpgrp(0, 0) is being done somewhere, and NeXT is not handling
	  it like 4.3 BSD does.

                                   3/11
                                   ----
shell.c
	- $0 is now initialized to `bash' for interactive shells when there
	  is no argv[0]

                                   3/12
                                   ----

jobs.c
	- Make set_new_line_discipline return 0 when on a termio system
	  without NTTYDISC defined (like HP/UX 6.x)

                                   3/13
                                   ----
                     BASELINE FOR NETWORK WIDE RELEASE
