
				   4/11
				   ----

machines.h, general.c, cpp-Makefile
	- wrapped the definition of strerror() inside a new machines.h
	  variable, HAVE_STRERROR

machines.h
	- new machine definition for the Encore series 91
	- removed definitions of NO_WAIT_H; let makeargs.sh decide for us

builtins.c
	- the test used in cd_builtin () to decide whether or not to use
	  CDPATH was incorrect.  It now uses CDPATH unless the directory
	  name begins with a slash.

cpp-Makefile, machines.h
	- added SYSDEP_LDFLAGS for flags to ld, analogous to SYSDEP_CFLAGS

				   4/13
				   ----

machines.h
	- more changes to Encore entries from pierson@encore.com
	- added -Wf,-XNl3072 to SYSDEP_CFLAGS for all machines that use the
	  MIPS chip and compilers.  This increases the maximum size of a
	  string constant, which some of the help strings in builtins.c
	  were exceeding

jobs.c
	- include trap.h only if JOB_CONTROL is defined, since nojobs.c
	  does not use its facilities

				     4/14
				     ----

getopts.c
	- changed error handling so that it obeys the Posix.2 draft 11 spec
	  (which is like ksh-88)

				   4/16
				   ----

execute_cmd.c
	- only run the exit trap in a subshell when command_subshell ==
	  USER_SUBSHELL, which means the user forced a subshell with ( )

cpp-Makefile
	- updated the dependency information

quit.h
	- changed the definition of throw_to_top_level to `extern' -- it
	  sometimes matters

readline/vi_mode.c
	- fix to make the vi-mode `b' command work when you type it twice
	  in a row

				   4/17
				   ----

readline/vi_mode.c
	- more fixes for vi `b' and `B' commands
	- fixes for vi `w' and `W' commands
	- fixed `_' command to yank the correct arg from the previous history
	  line

readline/{vi_{mode,keymap}.c,readline.h}
	- added a new function, rl_vi_fetch_history(), to implement the `G'
	  command.  It's not totally right, but it's better than having none
	  at all.

				   4/18
				   ----

builtins.c
	- only call the with_input_from_* functions in set_minus_o_option
	  if the shell is interactive when doing set -o emacs or set -o vi
	  (this prevents core dumps when doing a "set -o emacs" from a
	  startup file, because none of that stuff is initialized when the
	  startup files are run)

bashline.c
	- make sure all of the bindings are done to explicit keymaps, so
	  as to not randomly change the keymap the user has chosen with
	  a set -o in a .bashrc file.  The original ones all assumed the
	  current keymap was the emacs keymap, and this will screw up a
	  vi keymap seriously.

readline.c
	- .inputrc file parsing now recognizes the `$if mode=emacs' or
	  `$if mode=vi' construct in parser_if()

trap.c
	- make sure the jmp_buf stored in top_level is valid during the
	  execution of run_exit_trap, or we may jump off into never-never
	  land.

	  For example, consider a script that runs until it reads eof, and
	  has an exit trap set that contains a call to `exit'.
	  parse_and_execute will be called after reader_loop (and hence the
	  valid definition of top_level) is already off the stack and
	  invalid, and the longjmp in exit_builtin will seg fault.

machines.h
	- for MIPS machines in the BSD universe (-systype bsd), make sure
	  HAVE_UNISTD_H is undefined -- the compiler doesn't let us get to
	  it, even if it is there (wierd)

config.h
	- made the HELP_TEXT define that enables the inclusion of the huge
	  documentation strings for builtins a configurable parameter defined
	  here.  It's undefined by default, which means the long text is
	  not compiled in.

general.c
	- rewrote strip_trailing() to make it handle all cases where the
	  entire string should be stripped (e.g. "\n\n\n\n" when newlines
	  only are to be stripped)

subst.c
	- quoted results of command substitutions should have trailing
	  newlines stripped, not just the last newline as it was doing

builtins.c
	- aliases are no longer required to be legal identifiers, as
	  defined by Posix.2.  This originally came from 1003.2a,
	  draft 5, but I think it's on its way out

				   4/19
				   ----

shell.c
	- fixed a typo in the code that decides whether or not to source
	  ~/.bashrc, so now it sources it when we expect it to (no more
	  sourcing .bashrc for `echo ls | bash').  It was a misplaced
	  paren.

parse.y, subst.c
	- when parsing and evaluating $() and $[] constructs, bash needs
	  to take into account instances of `(' and `[' respectively
	  inside the delimiting characters and adjust the number of closing
	  parens or brackets that need to be read before the construct is
	  complete.  This is so things like $( (pwd) ) or $((pwd)) will
	  work as expected.

				     4/21
				     ----
parse.y
	- consolidated two grammar rules for `function f { echo foo; }'
	  into one -- there was no real difference between the two

variables.c
	- deleted inclusion of version.h.  It was not used.

cpp-Makefile
	- removed dependence of variables.o on version.h.  This caused
	  variables.c to be unnecessarily recompiled each time
	  version.h changed.

trap.h
	- changed the definition of IGNORE_SIG to be SIG_IGN, because
	  defining it as 0 made it the same as SIG_DFL, and hence
	  DEFAULT_SIG

jobs.c, nojobs.c
	- changed the restoration of signals altered by traps to be
	  after SIGINT, SIGQUIT, and SIGTERM are restored to their
	  default state so that ignored signals remain ignored in
	  children

jobs.c
	- SIGINT and SIGQUIT should be ignored by default for asynchronous
	  children
	- changed all calls to signal (s, SIG_DFL) in make_child for SIGINT,
	  SIGQUIT, and SIGTERM to call restore_default_signal() instead
	  (which should really be called restore_original_signal()), because
	  what you really want is for children to have the values for these
	  signals that the shell started with.

trap.c
	- make sure signals set to be ignored in the shell are set to SIG_IGN
	  in the child by calling ignore_signal in restore_original_signals()
	- make the loop that records the original values of the signals for
	  the shell in initialize_traps() run from 1 to NSIG-1

				   4/22
				   ----

shell.c
	- make sure the `i' flag is turned on (so that it appears in $-)
	  before the startup scripts are run

				   4/23
				   ----

general.c
	- changed pathname_backup to not back up past the start of the
	  path it is passed looking for a `/'.  It causes core dumps on
	  a lot of systems.

config.h
	- Ultrix does dup2() wrong, so make it use the dup2() emulation
	  implemented with fcntl() by making sure NO_DUP2 is defined

jobs.c
	- fixed a posix race condition by making the first process in a
	  pipeline wait for all of the processes to be created and have
	  their process group set correctly before returning from
	  make_child().  The synchronization is done around a shared pipe.
	- added a function close_pgrp_pipe() that other files can call to
	  have the pgrp pipe closed for them

subst.c
	- added call to close_pgrp_pipe from the parent half of the command
	  substitution code, since this code will not call start_pipeline
	  or stop_pipeline.  Otherwise the child waits forever trying to
	  read the pipe.

readline/vi_mode.c
	- more changes to the vi mode code, this time to rl_vi_eWord for the
	  `E' command

				   4/24
				   ----

execute_cmd.c
	- only restart an auto-resume job if the job is marked as JSTOPPED.
	  This fixes the `for i in 1 2 3; do who; done | sort' only running
	  `who' once bug.

parse.y
	- removed extern declarations of index(), rindex(); they should be
	  taken care of in general.h

machines.h
	- some changes to the mips and sgi entries

readline/readline.c
	- change rl_redisplay so DEL is echoed as C-?

				   4/25
				   ----

makeargs.sh
	- a new implementation from Brian

jobs.h
	- changed the sense of the test for the presence of sys/wait.h to
	  test HAVE_WAIT_H rather than NO_WAIT_H.  HAVE_WAIT_H is set by
	  makeargs.sh

jobs.c
	- don't bother calling tcsetpgrp() in give_terminal_to() if the
	  process group already owns the terminal

test.c
	- change eaccess() so that root requires execute permission for
	  anyone in order to be able to execute a file

execute_cmd.c
	- change executable_file() so that root can execute a file if any
	  of the u, g, o x-bits are turned on

documentation/features.texinfo
	- fixed a typo on line 352 ({ -> })

documentation/bash.1
	- some cosmetic changes to the manual page

				   4/26
				   ----

parse.y
	- made read_a_line handle a null character being returned from
	  yy_getc () in a reasonable fashion instead of falling out of
	  a loop and returning garbage to its caller

				   4/27
				   ----

shell.c
	- make the file descriptor from which we are reading the text of
	  a script be set to close-on-exec

execute_cmd.c
	- now that Ultrix uses the dup2() emulation in general.c, the code
	  that sets file descriptors to open-on-exec on Ultrix systems
	  can be disabled
	- fixed up the test for root in executable_file()

test.c
	- fixed up the test for root in eaccess() so that root can read or
	  write any file, but only execute executable files

				     4/28
				     ----
braces.c
	- if the text between braces does not contain a comma, just return
	  the text with braces intact.  This is for greater /bin/sh
	  compatibility

				   4/29
				   ----

bashline.c
	- some changes from a merge with bfox bash-1.07

execute_cmd.c
	- added an extern declaration for make_command_string()

general.c
	- made itos() use unsigned arithmetic so that $[ 32768*65536] works
	  right

				   4/30
				   ----

readline/readline.c
	- fixed typo for sys5 termio version of rl_prep_terminal() that
	  called ioctl with the wrong number of parameters
	- made readline handle SIGALRM and clean up after itself when
	  it hits

ulimit.c, ulimit.c.new
	- fixed up return value for -f on HP/UX -- the man page for
	  ulimit(2) lies about its return value

makeargs.sh
	- need to initialize SYSDEF and SHLIB so we don't pick up any
	  values from the environment

readline/history.c
	- fixed typo in `mode' argument in call to open(): 066 -> 0666

builtins.c
	- mark HP/UX as not having resources even though it has
	  /usr/include/sys/resource.h

cpp-Makefile, Makefile, makeargs.sh, config.h
	- changes from bfox bash-1.07

machines.h, builtins.c, general.c
	- changes for bfox port to cadmus

posixstat.h
	- added definitions for Posix file modes for those systems that do
	  not have them

				    5/1
				    ---

subst.c
	- added a function remove_quoted_nulls to do quote removal when we're
	  not doing word splitting.  It's called from expand_string_unsplit

fc.c
	- removed the code that handled EOF from fc_readline
	- fixed possible memory leaks in fc_builtin (line returned from
	  fc_readline()) and fc_readline()
	- fixed calls to builtin_error so they no longer include a literal
	  "fc" in the error string

execute_cmd.c
	- fixed execute_simple_command so that commands called from the
	  command builtin do not have arguments re-expanded by another
	  call to expand_words()

readline/readline.c
	- disable the ONLCR bit in the termio and termios version of
	  rl_prep_terminal so that pesky extra ^M is no longer sent

readline/vi_mode.c
	- fixed a typo that caused a test to be reversed in rl_vi_bword()

				    5/2
				    ---

shell.c
	- preserve leading `-' in argv[0] (and $0) when bash is invoked
	  this way.  Ensure that we do not infinitely recurse executing
	  .bash_profile if there is a shell script that bash executes or
	  a command substitution by incrementing shell_name past a leading
	  `-' when main() is invoked a second time.  Initialize $0 to
	  "bash" if it is null or equal to "-".

builtins.c
	- added symbolic mode printing and arguments (like chmod) to umask.
	  Now, "umask 002" and "umask a=rx,ug+w" are equivalent
	- removed change to unset from Posix.2 draft 11; it is required to
	  use -f if trying to unset a function and it unsets a variable
	  otherwise

bashline.c
	- make sure display_shell_version leaves the cursor at column 0
	  before calling rl_on_new_line()

				    5/3
				    ---

jobs.c
	- defined a `unifying' way to get the process group of an arbitrary
	  process: getpgid(p).  Constructed a bunch of #defines to get it
	  defined correctly in terms of getpgrp().  Used in initialize_jobs

execute_cmd.c
	- converted a call to statmode & S_IFDIR (which was wrong in the
	  first place, should have been (statmode & S_IFMT) == S_IFDIR)
	  into a call to S_ISDIR (statmode) in executable_file
	- for systems with broken (4.2 BSD-style) dup2() calls, which do
	  not set the new descriptor to be open across execs, define
	  DUP2_BROKEN and do the explicit setting ourselves.  Ordinarily,
	  setting NO_DUP2 and using the fcntl emulation is sufficient, but
	  on some systems (Sequent Dynix), fcntl(fd, F_DUPFD, fd2) is
	  broken this way, too.

expr.c, fc.c
	- make sure NULL is defined as 0, redefining it if necessary

				     5/3
				     ---

execute_cmd.c
	- in execute_case_command(), make sure we call expand_word on the
	  case statement pattern with quoting set to Q_KEEP_BACKSLASH, so
	  backslashes are not treated specially depending on the character
	  that follows them.  Here's the comment from the relevant section
	  of the code:

	  /* expand_word calls expand_word_internal, then performs word
	     splitting and dequotes the result.  This causes parameter
	     expansion, command substitution, arithmetic expansion, and
	     quote removal to occur.  What we *really* want is only
	     parameter expansion and " and ' removal.  Calling expand_word
	     with Q_KEEP_BACKSLASH is the way to do part of this.  The
	     command substitution part is still done, but that's OK. */

subst.c
	- break the command substitution code off into its own function,
	  command_substitute()

shell.h, subst.c, execute_cmd.c
	- enumerated the possible values for the `quoted' argument to the
	  expansion functions: Q_DOUBLE_QUOTES, which means expand as if
	  the string were in double quotes, Q_HERE_DOCUMENT, which means
	  expand the string according to the rules for expanding here-
	  documents, and Q_KEEP_BACKSLASH, which means to not treat back-
	  slashes specially at all.

readline/vi_keymap.c
	- bound `*', `=', and `\' in the vi movement keymap to rl_vi_complete

readline/vi_mode.c
	- If the command is cw or cW, we don't want whitespace after the
	  end of the word eaten, so change the w or W to e or E,
	  respectively
	- made rl_vi_complete handle all three kinds of vi_mode completion
	- changed rl_vi_char_search to check boundary conditions and avoid
	  going off the end or start of the current line searching for a 
	  character
	- changed rl_vi_domove to implement the `yy' command

				    5/6
				    ---
subst.c
	- check the return value from expand_string_internal in
	  expand_string_unsplit; make sure we don't try to dereference a
	  null value

machines.h
	- new entry for NCR tower 32 running System V.3
	- changes to IBM AIX entries

		Changes from a merge with bfox 1.07 sources

				    5/7
				    ---

cpp-Makefile
	- take out some explicit `touch' commands that are taken care of
	  by the dependencies
	- added the files created in the build process (endian, psize,
	  sysdefs) to the `make clean' target

nojobs.c
	- don't print a message if a command was terminated by SIGINT
	- removed the call to QUIT from wait_for; the builtin `wait'
	  command does not go through this function
	- added siginterrupt calls so we can run this on a 4.2+ BSD
	  system without job control and interrupt `wait'

Makefile
	- make the command to run to remove runs of blank lines from the
	  cpp output configurable (`cat -s' means nothing on System V;
	  there are some alternatives: ssp on HP/UX, for example)

				    5/8
				    ---
test.c
	- added a `posixtest()' function that implements a proposal to the
	  Posix.2 shell working group by David Korn.  Broke the code that
	  handles unary and binary operators out into individual functions.
	  Added functions that will check whether a string is a valid test
	  unary or binary operator.
	- changed eaccess so that the test for root and X_OK works for
	  both files and directories
	- added a new unary operator, -a, which is true if its argument
	  simply exists in the file system

shell.c
	- changed the test for whether or not we are running under an emacs
	  shell buffer to test if TERM = "emacs", rather than for the
	  presence of the environment variable EMACS

general.c
	- added a function unset_nodelay_mode that will unset either flavor
	  of no-delay mode (O_NONBLOCK or O_NDELAY) for a given file
	  descriptor.  This is called from shell.c$main() for the standard
	  input.

glob.c
	- added code to check that a directory is really a directory before
	  calling opendir on it.  Some systems do not check, and core dump
	  in readdir() (e.g. MIPS)

expr.c
	- allow underscores in the names that the token reader recognizes
	  as variables
	- set a maximum recursion level of 1024 calls to pushexp()

builtins.c
	- parse_and_execute has to setjmp (top_level) (saving the old value,
	  of course) so that bad substitutions and the like that call
	  (longjmp (top_level, DISCARD)) don't jump to the `real' top level,
	  which leaves input still coming from the string passed to
	  parse_and_execute, and sometimes core dumps

shell.c
	- made an option -- signal the end of the options list, as Posix
	  specifies

getopt.c
	- a slightly modified version of the GNU getopt().  The changes
	  are:
		o the addition of a variable optopt, which holds the option
		  character last processed
		o The value of optarg is now specified in the case of
		  return values: if an illegal option is given, optarg
		  is NULL; if a required option argument is missing,
		  optarg[0] == 0
		o a function to programmatically set the option order that
		  getopt will handle to the Posix option order:
		  set_posix_option_order
		o changed the error messages printed to be those that
		  Posix.2 specifies

getopts.c
	- deleted private version of getopt()
	- changes to work with the modified GNU getopt as described above

				    5/9
				    ---
builtins.c
	- added -v option to `unset'; changed it to comply with Hal
	  Jesperson's latest Posix.2 draft

machines.h
	- picked up a machine description for a 386 box running ISC 2.2 from
	  bfox
	- add -DDUP2_BROKEN to the entries for Sequents running Dynix because
	  Dynix does not set the new file descriptor created with dup2() or
	  fcntl(fd, F_DUPFD, ...) to be open across execs

make_cmd.c
	- Make sure all the arguments to make_command are cast to the correct
	  values

general.h, jobs.c, execute_cmd.c
	- moved the definition of FD_CLOEXEC to general.h, which should be
	  included *after* <fcntl.h>

shell.c
	- timeouts should happen only when the shell is interactive, so just
	  move all the code in read_command that deals with it inside an
	  if (interactive) statement.
	- changed message printed by show_shell_version to be that same as
	  that put into the $BASH_VERSION variable

readline/readline.c
	- don't destroy the value of the tty flags when trying to read with
	  O_NDELAY turned off in rl_gather_tyi()

Makefile, squish.awk
	- For systems that do not have a -s option to cat that compresses
	  runs of blank lines to a single blank line, there is an awk script
	  supplied that will do it

parse.y
	- made yy_stream_unget and yy_readline_unget return values, not
	  garbage

				   5/10
				   ----
variables.c
	- don't deallocate the old value in bind_variable until any needed
	  arithmetic evaluation has been done.  If we're performing an
	  assignment statment like `even=even+2' where even has the integer
	  attribute, we'll need the old value to evaluate the RHS

shell.c
	- make throw_to_top_level call bashline_reinitialize so all the
	  function pointers are restored to their correct values on an
	  interrupt (problem observed on a Sun running SunOS 4.1)

				     5/11
				     ----
jobs.c
	- replaced literal `bash:' in error messages with the name of the
	  shell, as given in shell_name

				   5/13
				   ----
nojobs.c
	- make sure the pid passed to wait_for is valid before calling
	  wait() by doing a kill(pid, 0)

test.c
	- test -e should return true if a file exists in the file system,
	  according to Posix.2.  Make it equivalent to -a, document it in
	  the man page and help text, and make -a undocumented
	- all variables global to test.c should be declared as static
	  (e.g. test_exit_status, test_exit_buf)
	- make test -f behave as Posix.2 mandates (file exists and is a
	  regular file) instead of trying to please both BSD and System V

makeargs.sh
	- if the file /etc/xlc.cfg exists and contains the string _IBMR2,
	  assume we're on an RS/6000 and define RISC6000

builtins.c
	- Print traps in trap_builtin only if trap_list[i] is neither of
	  DEFAULT_SIG or IGNORE_SIG

jobs.c
	- run trap on SIGCHLD only if it is neither of DEFAULT_SIG or
	  IGNORE_SIG

trap.c
	- make it an error if trap_handler catches a signal for which the
	  trap_list holds IGNORE_SIG or DEFAULT_SIG

				   5/14
				   ----

execute_cmd.c
	- make redirection_expand return (char *)NULL in the case where the
	  word expands to nothing

jobs.c
	- added two functions: terminate_stopped_jobs, which walks the job
	  list and sends SIGTERM and SIGCONT to each stopped job, and
	  hangup_all_jobs, which walks the job list and sends SIGHUP and,
	  if necessary, SIGCONT to all jobs

shell.c
	- added call to terminate_stopped_jobs() after reader_loop exits,
	  before the shell is about to exit
	- added call to hangup_all_jobs if the shell receives a SIGHUP that
	  causes it to exit

test.c
	- removed remaining vestiges of the special-casing of the -f operator
	  between System V and BSD

				     5/18
				     ----

builtins.c
	- traps should be printed if trap_list[i] == IGNORE_SIG
	- fixed a typo in fg_bg() that would cause a seg fault when
	  decode_job_spec returned DUP_JOB

trap.c
	- don't run a trap on EXIT if set to IGNORE_SIG

shell.c
	- the initialization of traps must be done before we initialize
	  signals, because the shell needs to know that values of signals
	  that it inherited from its parent

execute_cmd.c
	- broke all the stuff bash does after execve into a new function,
	  bash_execve, called exactly like execve.  If it returns, it
	  returns EXECUTION_FAILURE, so the execute_simple_command code can
	  just do exit (bash_execve (command, argv, envp))

builtins.c
	- made the exec builtin call bash_execve so executable shell scripts
	  can be the target of exec

				     5/19
				     ----
subst.c
	- added new functions that will perform quote removal only on
	  strings, WORD_DESCs, and WORD_LISTs.

make_cmd.c
	- quote removal is the only expansion that should be performed on
	  the delimiter of a here document, so call the new quote removal
	  functions in subst.c instead of redirection_expand()

subst.c, shell.h
	- changed expand_word_internal to do the right thing when given
	  a `quoted' argument of Q_KEEP_BACKSLASH; it means to preserve
	  backslashes unconditionally.

	  This causes a flag to be set inside expand_word_internal that it
	  passes to recursive invocations (like when expanding "string").
	  The values for the `quoted' argument have been changed to be
	  distinct bit values so that they can be masked and OR'd together.

execute_cmd.c
	  execute_cmd.c now calls expand_word with an argument of 
	  Q_KEEP_BACKSLASH, so that only parameter expansions and "" and ''
	  removal are performed

				     5/22
				     ----

		      Another big merge with bfox source

builtins.c
	- restore the original values of signals before calling bash_execve
	  in exec_builtin

				   5/23
				   ----
test.c
	- Brian's change to `unop' broke it -- the function now has an
	  integer passed to it, not a string of the form -x
	- ! with 4 arguments should not fall through to the default case;
	  a `break' statement was missing

config.h, machines.h, cpp-Makefile
	- change NO_DUP2 to !HAVE_DUP2

general.c
	- change NO_DUP2 to !HAVE_DUP2
	- add a call to SET_OPEN_ON_EXEC for the new file descriptor in our
	  dup2() emulation using fcntl

execute_cmd.c
	- removed the calls to SET_OPEN_ON_EXEC that were enabled by defining
	  DUP2_BROKEN; now undef HAVE_DUP2 and use the dup2 emulation in
	  general.c for those machines

				   5/24
				   ----
subst.c
	- Even if no expansion is performed in expand_word_internal, and
	  therefore no word splitting is done, the quoted null characters
	  still need to be removed from the WORD_LIST.  Add a new function
	  word_list_remove_quoted_nulls to do the removal for each element
	  of the list, and call it from expand_words_1

bashline.c
	- call tilde_expand on the returned $PATH components in
	  command_word_completion_function

More fixes and changes from a merge with bfox's source

				     5/25
				     ----
execute_cmd.c
	- changed some `pid' declarations to be pid_t instead of int

variables.c
	- dollar_dollar_pid is still an int, so cast the return value
	  of getpid() when assigning to it

				   5/28
				   ----
subst.c
	- more quoted null character fixes -- {de,}quote_string needs to
	  handle quoted null strings, and list_string has to do the
	  right thing with them

builtins.c, execute_cmd.c
	- bash_execve -> shell_execve

makeargs.sh
	- typo fix: elc.cfg -> xlc.cfg

cat-s
	- change the length($0) == 0 to NF == 0 so that lines with only white
	  space are deleted as well as blank lines

subst.c
	- quote_string and dequote_string now return char * and allocate a
	  new string for the return value

expr.c
	- have evalexp() save and restore the old value of evalbuf around
	  possible recursive calls

cpp-Makefile
	- the failure of a `touch' command is no longer a fatal error

readline/readline.c
	- only try to use ONLCR if it is defined

machines.h
	- fixes to the AT&T 3B2 and IBM AIX (RT, 370) descriptions

readline/vi_mode.c
	- now `p' is allowed at the end of a line
	- yank-to (yw, ye) yanked one-too-few characters -- fix in
	  rl_vi_yank_to
	- `r' command should not advance the cursor to the right
	- `cw' now works like ce (and cW like cE) in that the white space
	  after the deleted word is not deleted
	- cw now deletes the last character on the line, when point is the
	  last character on the line when it is executed

				   5/29
				   ----
subst.c
	- fixed a seg fault when trying to do parameter substitution assignment
	  (${a=b}) with a null string:  ${UnDeFiNeD=`false`}

machines.h
	- new entry for Sequent Symmetry running Dynix/ptx (System V.3.2)

builtins.c
	- parse_and_execute needs to handle longjmp(top_level, EXITPROG)
	  (FORCE_EOF, too) by restoring the old value of top_level and
	  doing another longjmp.  This is needed so that an exit inside a
	  `.' script will actually exit the shell
	- make `typeset -f foo' print the definition of the function foo,
	  if one exists.

jobs.h
	- defined NO_PID as -1, a value that cannot possibly be a pid

jobs.c
	- all pid and pgrp variables are initialized to (pid_t) NO_PID

subst.c
	- reorganized the ${} code into several functions
	- make the brace-counting code that gathers the RHS of a ${}
	  parameter substitution use extract_delimited_string
	- if no asynchronous commands have been executed, $! should echo
	  nothing
	- make ${#} work like $#
	- make ${#-foo} a bad substitution
	- test for len_alt_opener == 0 in extract_delimited_string before
	  comparing the string with alt_opener
	- ${special_var?} should echo the standard message ``parameter
	  null or not set''
	- plugged some memory leaks -- memory was not freed before longjmp
	  calls after bad substitutions

				   5/30
				   ----

subst.c
	- more radical reorganization

cpp-Makefile
	- redid the dependencies so that it's no longer required to `touch'
	  a .h file if another .h file changes

glob.c
	- statbuf -> finfo

readline/tilde.c
	- new file that handles the tilde expansion for the shell and readline

readline/readline.c
	- tilde_expand removed from this file; now in tilde.c

general.c
	- new function tilde_initialize to initialize the tilde expansion
	  code
	- bash_tilde_expand is now in general.c, since it should work even
	  if readline is turned off for some reason

shell.c
	- tilde_initialize called as part of shell initialization

				   5/31
				   ----

parse.y
	- aliases consisting entirely of digits are now allowed; simply
	  commented out the !all_digits test

documentation/bash.1
	- the PROMPTING section should make clear the difference between
	  \w and \W

machines.h
	- small fix to isc386 entry -- we still have alloca if we're using
	  gcc
	- add -D_DGUX_SOURCE to the SYSDEP_CFLAGS for the DG/UX entries
	- add -DNLS to the RS6000 SYSDEP_CFLAGS

cppmagic.sh
	- improved the test for gcc-cpp by also looking for the word
	  `recognized' in the error message

readline/readline.c
	- don't declare getpwuid() and getpwnam() if we're on an ISC 386
	  machine

machines.h, posixstat.h, execute_cmd.c
	- changes from Saul Lubkin for Posix bash on ISC 2.2

				    6/1
				    ---

jobs.c
	- make the behavior of jobs started when job control is not active
	  be the following:

		if the shell is interactive, set SIGTSTP, SIGTTIN, and
		SIGTTOU to SIG_IGN.  This way, typing ^Z to a running
		process will not do anything

		if the shell is  non-interactive, set SIGTSTP, SIGTTIN,
		and SIGTTOU to SIG_DFL, so jobs started from scripts
		will stop when the script shell gets a SIGTSTP

	  It might work to simply not change the values of the signals if
	  job_control == 0, since this is how they *should* be, but that
	  seems too chancy.

execute_cmd.c
	- make && and || constructs unstoppable, because there's no other
	  way to prevent the second process from executing immediately
	  if the first one is stopped (this is what ksh appears to do).
	  Make sure that we add an unwind_protect call to restore the
	  value of job_control if the command is interrupted.

				    6/3
				    ---

subst.c
	- tilde expansion should be performed if there is an unquoted tilde
	  anywhere in the word, so we can check for `=~' and `:~'

				    6/4
				    ---

subst.c
	- tilde expansion should be performed in do_assignment_internal
	  only if the `expand' argument is 1 and we do the other expansions
	- pass the word to tilde_expand in expand_words_internal even if
	  its quoted bit (tlist->word->quoted) is set

jobs.c
	- make set_job_control return the old value of job_control, so you
	  can say `old_job_control = set_job_control (0);'

unwind_prot.c
	- added a structure to save the value of an integer variable.  Two
	  new functions use it: unwind_protect_var (&var) allocates this
	  structure, fills it in, then calls add_unwind_protect specifying
	  restore_variable as the function to execute.  restore_variable takes
	  this structure as an argument, restores the specified variable,
	  and frees the structure it gets

builtins.c, execute_cmd.c
	- changes to use unwind_protect_var to restore variables

				    6/5
				    ---

readline/readline.c
	- readline now enables 8-bit input by default for termio, termios
	  systems (c_iflag &= ~ISTRIP)

shell.c, builtins.c
	- special_source_interrupt was renamed to parse_and_execute_level

builtins.c
	- parse_and_execute now uses unwind-protects to clean up after itself,
	  allowing these to be run from another place in the code if necessary
	- special_buf is no longer used as a cleanup mechanism
	- new function parse_and_execute_cleanup that can be called from
	  anywhere that encapsulates all the necessary unwind protects for
	  parse_and_execute
	- period_builtin now calls parse_and_execute_cleanup to have
	  parse_and_execute clean up if the `return' builtin is executed
	  while in the middle of a `.' command and not inside a function

trap.c
	- run_interrupt_trap now prevents recursive calls to itself by
	  making trap_list[SIGINT] null while it is executing

shell.c
	- reorganized throw_to_top_level: run_interrupt_trap is now called
	  as the first thing, and throw_to_top_level calls
	  parse_and_execute_cleanup to make parse_and_execute clean up
	  after itself

subst.c
	- fixed a bug caused by string_rest_of_args returning NULL, which
	  caused parameter_brace_expand_length to get a seg fault because
	  it didn't check the return value when expanding ${#*} with no
	  dollar variables

machines.h
	- fixed up the HP/UX entry.  HP/UX 7.0 and above (the Posix versions)
	  define __hpux to cpp, giving us a way to automatically tell the
	  difference between Posix and non-Posix implementations (whether or
	  not to link with -lBSD)

trap.c
	- save the value of last_command_exit_value while running the exit
	  trap.  This way any exit trap will not change the value of
	  `exit 5', for instance

subst.c
	- added a function unquoted_member (c, s), which behaves like
	  member but tests whether or not c occurs in an unquoted portion
	  of the string
	- made the test for calling tilde expansion be
		((first character is a tilde) ||
		 (tilde appears && word not quoted) ||
		 (tilde appears && tilde is unquoted))
	  this uses unquoted_member (c, s)

shell.c
	- Xenix has the middle two arguments to setvbuf different from
	  every other implementation in the world.  Add #ifdef'd code

machines.h
	- the Xenix 386 definition has to have M_OS and SYSDEP_CFLAGS
	  undefined because they might have already been set if i386
	  is defined

cpp-Makefile
	- make the gcc line for making malloc.o include a -o $@, since we
	  know gcc can handle it

builtins.c
	- preserve the value of last_command_exit_value around the
	  execution of ~/.bash_logout

				    6/6
				    ---
subst.c
	- generalized unquoted_member to unquoted_substring, and changed
	  the tilde expansion tests to call unquoted_substring with the
	  full tilde prefixes as the substrings (:~, =~)

builtins.c
	- `read' now accepts a `--' argument to signal the end of the
	  options

				    6/7
				    ---
documentation/bash.1
	- added description of the `silent' error reporting mechanism of
	  getopts that is enabled when the first character of the option
	  string is a `:'
	- added description of the new features of tilde expansion (:~
	  and =~)

subst.c
	- fixed sv_optind to call getopts_reset with the value of $OPTIND
	  rather than resetting it to 1

getopt.c
	- commented out the code executed when optind is reset to 0 that
	  decides on the option order.  We always want REQUIRE_ORDER

getopts.c
	- only call set_posix_option_order once

builtins.c
	- `type' gets a -- option to signal the end of the option arguments
	- `typeset/declare' gets a -- option to signal the end of the
	  option arguments
	- `hash' gets a -- option to signal the end of the option arguments,
	  and gets rewritten to boot
	- redid `umask' option processing code to be more regular -- fixed
	  the bug where `umask --' would print nothing
	- added Posix.2 `-p' option to `command' builtin, also added a
	  `--' argument with the standard meaning
	- `trap' gets a -- option to signal the end of the option arguments,
	  and gets rewritten to structure it like other builtins
	- set_or_show_attributes was changed so that you can't just make a
	  read-only variable read-write by saying `readonly -n var'

                                    6/8
                                    ---
variables.c
	- if bash is executing a function (variable_context > 0), then look
	  in the temporary environment for a variable's value first

machines.h
	- new entry for Honeywell Bull X20 from lele@idea.sublink.org
	- for hp/ux versions < 7.0, we still need to link with -lPW to
	  get alloca

                                   6/11
                                   ----
subst.c
	- include <sys/types.h>

machines.h
	- change the `catch-all' entries for things like MIPS to use
	  #if defined (mips) && !defined (M_MACHINE)

builtins.c
	- took out the readonly -n change.  Enable it for strict sh
	  compatibility

unwind_prot.c
	- extended the saved variable code to full generality by adding a
	  size field to the struct.  Variables bigger than a char * will
	  be copied into a block of memory allocated to hold their value
	  and restored from there

builtins.c, trap.c, execute_cmd.c
	- changes to unwind_protect_var calls to add value, size arguments

shell.c, jobs.c
	- only catch SIGINT with sigint_sighandler if the shell is
	  interactive; otherwise let termination_unwind_protect get it

shell.c
	- startup files may now be aborted by using the `return' builtin
	- set SIGTERM to SIG_IGN if the shell is interactive, not just if
	  it's a login shell.  Without this, `kill 0' will kill an
	  interactive shell

                                   6/12
                                   ----
jobs.c
	- replace instances of M_UNIX with the more descriptive SCO

machines.h
	- gather all 386 machines into one block, stop #undef'ing i386

builtins.c
	- make exec_builtin not completely expand the command name and
	  stick it in argv[0] if the `-' flag is supplied -- instead,
	  tack a `-' on the front of whatever the user typed

                                   6/13
                                   ----
jobs.c
	- don't change SIGQUIT's signal handler at all in
	  initialize_job_signals

execute_cmd.c
	- change execute_case_command to do string_list on the result of
	  expand_word (word) instead of just taking the first word and
	  assuming no splitting was done
	- in execute_simple_command, make sure the call to bind_lastarg
	  is done before the dispose_words, because lastarg just points
	  at the last word, which is invalid after the dispose_words

machines.h, jobs.c
	- new machine-specific variables: BSD_GETPGRP, TERMIOS_MISSING

glob.c
	- make an incomplete character class (e.g. [X-]) behave as if
	  no class were specified instead of giving an error

filecntl.h
	- new include file that encapsulates fcntl.h and the declarations
	  for close-on-exec stuff

execute_cmd.c, builtins.c, shell.c
	- new arg for execute*command* functions that tells whether or not
	  to obey the -e flag and exit when a simple command exits with a
	  non-zero exit status
	- fixed exit status of while to be success if no commands are
	  executed
	- fixed exit status of until to be success if no commands are
	  executed

                                     6/15
                                     ----
execute_cmd.c
	- since while and until commands are so similar, combined the bodies
	  into execute_while_or_until (), which takes a type argument to
	  decide which one it is.  execute_{while,until}_command just call
	  this function
	- added unwind protect calls to execute_for_command to free up the
	  list (for word in list)
	- eliminated a possible call to find_function in execute_simple_command
	- added unwind protect calls to execute_simple_command
	- plugged a couple of memory leaks in execute_simple_command:
		o freeing the expanded command words when executing a function
		  or builtin with a pipe in or out
		o the name of the command (`command') when executing from a
		  disk file

subst.c
	- implemented the Posix.2-style $(( )) arithmetic substitution.  I
	  think we'll let this remain mercifully undocumented

variables.c
	- removed support for old Posix.2-style exported functions, since
	  Posix.2 no longer specifies exported functions

                                     6/17
                                     ----
nojobs.c
	- make wait_for_single_pid () check the validity of its pid
	  argument before calling wait(2), returning 127 if the pid is
	  invalid

jobs.c
	- if wait_for_single_pid () is called with an argument that does
	  not match a child of the shell, return 127 as Posix.2 specifies


builtins.c
	- made `set' treat `set -' and `set +xv' as equivalent, like the
	  Posix.2 spec mandates (though it does mark the construct as
	  obsolescent)
	- made the strings output by `export' and `readonly' when showing
	  variable definitions match those specified by Posix.2
	- if STRICT_POSIX_COMPATIBILITY is #defined when compiling the
	  shell, the shell will exit in the event that it cannot find the
	  file specified as the first argument to `.'

variables.c
	- turned set_auto_export(var) into a two-statement macro, saving a
	  number of function calls

                                     6/19
                                     ----
execute_cmd.c
	- split the different parts of execute_simple_command into different
	  functions: execute_builtin_or_function, execute_disk_command, and
	  execute_subshell_builtin_or_function to make the whole mess
	  easier to understand

                                     6/21
                                     ----
builtins.c
	- make sure that `type' does not report directories as executable.
	  Call executable_file to make sure.
	- have the `set' builtin check the validity of its flags arguments
	  before actually doing anything with them.  This prevents things
	  like `set -help' from exiting the shell

flags.h
	- added declarations for the functions exported by flags.c
	- added #if defined (_FLAGS_H) protection against multiple inclusion

shell.c
	- don't do the .bashrc if we're a login shell, even if we're not
	  doing the .profile

general.c
	- uts -> ut, since UTS compilers define uts for the C preprocessor

makeargs.sh
	- better treatment of machines that do not have the `hostname'
	  command

                                   6/22
                                   ----
readline/readline.c
	- on termio and termios systems, turn off NL -> CR and CR -> NL
	  input translation so bash will see the two characters distinctly

                                     6/23
                                     ----
ulimit.c
	- cleaned up the shell_ulimit code so there was not so much code
	  duplication (cut 70K from binary!)
	- added -H, -S to use hard, soft BSD resource limits
	- ulimit now allows multiple options: -d -t -c or -dtc
	- ulimit can print multiple options in the same format it uses for
	  -a
	- USG systems can use -p, -n, -a -- there is no longer a ulimit.c.new
	- -n uses RLIMIT_NOFILE for getting as well as setting, and so can
	  use hard and soft limits
	- `ulimit limit' now behaves like `ulimit -f limit'

                                     6/25
                                     ----
execute_cmd.c
	- since do_redirection () is the only place where we have the value
	  of the expanded redirection word, report open () failures there

	- broke the #! emulation code out into a separate function and made
	  it handle the single argument that you can give interpreters

builtins.c
	- make `command -p' use the Posix.2 configuration variable _CS_PATH
	  (with confstr()) or the #define CS_PATH to find the path that will
	  pick up all the standard utilities before falling back to using
	  COMMAND_MINUS_P_PATH

                                   6/26
                                   ----
builtins.c
	- make sure we include `-o' in the list of legal flags when checking
	  for illegal ones in the set builtin

                                   6/29
                                   ----
fc.c
	- parse and execute the entire edited file of commands when doing
	  `fc -e' so that compound commands work

readline/readline.c
	- allow leading whitespace in lines passed to rl_parse_and_bind()

machines.h
	- MIPS machines cannot handle the inclusion of /usr/include/sys/wait.h,
	  so #undef HAVE_WAIT_H

cpp-Makefile
	- pass only a subset of the CFLAGS down to the make in readline,
	  because some make programs and cc's get overloaded

                                     6/30
                                     ----
ulimit.c
	- rewrote to do the 6/23 changes right
	- added -- to mean end of options

execute_cmd.c
	- made a number of functions static
	- changed do_redirection to do_redirection_internal

cpp-Makefile, config.h, builtins.h, builtins.c, subst.c
	- made the inclusion of the getopts code dependent on the definition
	  of GETOPTS_BUILTIN

vprint.c
	- new name for misc.c, since all that it contains now are definitions
	  for v[fs]printf()

builtins.c
	- made help for history_builtin include -s only if HISTORY_DASH_S
	  is defined, to match the code
	- made the help for the ulimit builtin match the code, depending on
	  HAVE_RESOURCE being defined
	- make the help builtin interruptible by adding calls to QUIT in
	  the loop
	- `cd -' now prints the name of the directory it's changing to
	- change the help text for the wait builtin to show that job specs
	  are allowed only on systems which support job control
	- changed an fprintf(stdout, ...) to printf(...) in history_builtin

jobs.c
	- make kill_pid kill the correct pid when walking through all the
	  pids in a job

test.c
	- don't call strlen when we just want to know whether or not a string
	  is null; it suffices to test the first character

bashline.c
	- fixed a typo in the comment text for the FIGNORE code

documentation/bash.1
	- some typo fixes

documentation/features.texi
	- fixed some typos

glob/glob.c
	- if we're not globbing dot filenames, and the first character of the
	  pathname is a `.', make sure the pattern matches it exactly before
	  we call glob_match in glob_vector()

                                    7/1
                                    ---
fc.c
	- use maybe_execute_file instead of calling parse_and_execute
	  when re-executing the file of commands

builtins.c
	- removed the help text #define; the savings is too small to bother

ulimit.c
	- set `verbose_print' after a group of specific options is given,
	  so `ulimit -pdt -m' prints everything verbosely

                                     7/3
                                     ---
getopts.c
	- made it include the Gnu `getopt.h' instead of declaring its
	  variables as extern

getopt.c
	- added a function getopt_set_posix_option_order() to set the
	  default option ordering to that required by Posix.2
	- added a variable default_ordering to hold the default style
	  of option ordering that getopt() handles.  Usually it is
	  PERMUTE, but it can be set to REQUIRE_ORDER

cpp-Makefile
	- made all of the getopts files depend on GETOPTS_BUILTIN being
	  defined; changed some variable names for the getopts files

builtins.c
	- made exit_builtin and logout_builtin return the value of
	  exit_and_logout() instead of expecting exit_and_logout not to
	  return
	- the `type' builtin now prints `keyword' instead of `reserved word'
	  when given the `-type' option

jobs.c
	- removed the final default #else clause for set_new_tty_driver();
	  if none of NEW_TTY_DRIVER, TERMIO_TTY_DRIVER, or TERMIOS_TTY_DRIVER
	  is defined, the compilation is hopeless anyway

                                     7/4
                                     ---
jobs.c
	- added support for another format for pretty_print_job: print the
	  information only of the job is marked as not having been notified,
	  then set the job as having been notified so there will not be
	  multiple lines of information about the same job.  flush_child ()
	  resets this flag to 0 when a job's status changes
	- made a number of private functions static

builtins.c
	- added a Posix.2a-like `-n' flag to the jobs builtin to print only
	  those jobs that have changed status since they were last printed

documentation/bash.1
	- added description of -n option to `jobs' builtin section

                                    7/5
                                    ---
shell.c
	- test help file name for nullness and emptyness (hf && *hf) before
	  trying to read the history from it.  Make the same changes when
	  saving the history.

shell.c, jobs.c, quit.h
	- changed the type of throw_to_top_level from type `sighandler' to
	  void

execute_cmd.c, builtins.c
	- make sure all int-valued functions return some value

readline/readline.c
	- if S_ISDIR is defined, then use it, otherwise use S_IFDIR
	  (Posix vs. traditional Unix)

                                     7/6
                                     ---
builtins.c
	- made the exit status of the kill builtin agree with the Posix.2
	  specification

documentation/bash.1
	- added specifications of the return values of most of the builtins
	  likely to be used in scripts

                                    7/8
                                    ---
execute_cmd.c
	- set this_shell_builtin and last_shell_builtin each time we
	  execute a simple command.  This means that this_shell_builtin
	  being non-null will indicate we are running a builtin

variables.c
	- if we're executing a builtin, look in the temp environment first
	  for a variable before looking in the variable hash table

                                   7/11
                                   ----
test.c
	- fixed precedence bug by making bash adhere to traditional sh
	  grammar for -a and -o

readline/readline.c
	- fixed a bug that would cause core dumps when trying to use ^P
	  to get to a line longer than rl_line_buffer_len, then trying
	  to insert something.



[Radical reorganization of the shell sources, inclusion of builtins/*]
