Imported from ../bash-3.1.tar.gz.
authorJari Aalto <jari.aalto@cante.net>
Wed, 7 Dec 2005 14:08:12 +0000 (14:08 +0000)
committerJari Aalto <jari.aalto@cante.net>
Sat, 12 Sep 2009 16:46:57 +0000 (16:46 +0000)
267 files changed:
CHANGES
COMPAT
CWRU/changelog
INSTALL
MANIFEST
MANIFEST.doc [new file with mode: 0644]
Makefile.in
NEWS
POSIX
RBASH
README
aclocal.m4
array.c
arrayfunc.c
arrayfunc.h
bashhist.c
bashhist.h
bashline.c
builtins.h
builtins/Makefile.in
builtins/caller.def
builtins/cd.def
builtins/command.def
builtins/common.c
builtins/common.h
builtins/declare.def
builtins/echo.def
builtins/evalfile.c
builtins/evalstring.c
builtins/exec.def
builtins/exit.def
builtins/fc.def
builtins/fg_bg.def
builtins/getopts.def
builtins/hash.def
builtins/help.def
builtins/history.def
builtins/jobs.def
builtins/kill.def
builtins/mkbuiltins.c
builtins/printf.def
builtins/psize.c
builtins/pushd.def
builtins/read.def
builtins/reserved.def
builtins/set.def
builtins/setattr.def
builtins/shopt.def
builtins/trap.def
builtins/type.def
builtins/ulimit.def
builtins/wait.def
command.h
config-top.h
config.h.in
configure
configure.in
conftypes.h
dispose_cmd.c
dispose_cmd.h
doc/FAQ
doc/article.ps [new file with mode: 0644]
doc/bash.1
doc/bashref.info
doc/bashref.texi
doc/rose94.ps [new file with mode: 0644]
doc/version.texi
eval.c
examples/bashdb/README [new file with mode: 0644]
examples/bashdb/bashdb
examples/loadables/Makefile.in
examples/loadables/getconf.c
examples/misc/aliasconv.bash
execute_cmd.c
expr.c
externs.h
findcmd.c
general.c
general.h
include/shmbutil.h
input.c
jobs.c
jobs.h
lib/glob/Makefile.in
lib/glob/glob.c
lib/glob/glob_loop.c
lib/glob/sm_loop.c
lib/glob/smatch.c
lib/glob/xmbsrtowcs.c
lib/intl/Makefile.in
lib/intl/dcigettext.c
lib/malloc/Makefile.in
lib/malloc/malloc.c
lib/malloc/shmalloc.h
lib/malloc/trace.c
lib/readline/Makefile.in
lib/readline/bind.c
lib/readline/callback.c
lib/readline/chardefs.h
lib/readline/complete.c
lib/readline/display.c
lib/readline/doc/rltech.texi
lib/readline/doc/rluser.texi
lib/readline/doc/rluserman.texi
lib/readline/doc/version.texi
lib/readline/examples/histexamp.c
lib/readline/examples/rl.c
lib/readline/examples/rlcat.c
lib/readline/examples/rltest.c
lib/readline/funmap.c
lib/readline/histexpand.c
lib/readline/history.c
lib/readline/input.c
lib/readline/isearch.c
lib/readline/macro.c
lib/readline/mbutil.c
lib/readline/misc.c
lib/readline/readline.c
lib/readline/readline.h
lib/readline/rldefs.h
lib/readline/rlmbutil.h
lib/readline/rlprivate.h
lib/readline/rltty.c
lib/readline/search.c
lib/readline/shell.c
lib/readline/signals.c
lib/readline/terminal.c
lib/readline/text.c
lib/readline/tilde.c
lib/readline/tilde.h
lib/readline/undo.c
lib/readline/util.c
lib/readline/vi_keymap.c
lib/readline/vi_mode.c
lib/sh/Makefile.in
lib/sh/getenv.c
lib/sh/netconn.c
lib/sh/pathcanon.c
lib/sh/pathphys.c
lib/sh/shmatch.c
lib/sh/shquote.c
lib/sh/snprintf.c
lib/sh/strftime.c
lib/sh/strnlen.c [new file with mode: 0644]
lib/sh/strtoimax.c
lib/sh/strtoumax.c
lib/sh/strtrans.c
lib/sh/winsize.c [new file with mode: 0644]
lib/sh/zread.c
lib/termcap/Makefile.in
lib/tilde/Makefile.in
lib/tilde/doc/Makefile [deleted file]
lib/tilde/doc/tilde.texi [deleted file]
lib/tilde/tilde.c
lib/tilde/tilde.h
locale.c
mailcheck.c
make_cmd.c
make_cmd.h
nojobs.c
parse.y
parser-built
patchlevel.h
pathexp.h
pcomplete.c
po/Makefile.in.in
po/bash.pot
po/builtins.pot [deleted file]
po/en@boldquot.gmo
po/en@boldquot.po
po/en@quot.gmo
po/en@quot.po
print_cmd.c
redir.c
redir.h
shell.c
sig.c
sig.h
subst.c
subst.h
support/Makefile.in
support/config.guess
support/man2html.c
support/mksignames.c
support/mkversion.sh
support/printenv.c
support/recho.c
support/shobj-conf
support/zecho.c
test.c
tests/appendop.right [new file with mode: 0644]
tests/appendop.tests [new file with mode: 0644]
tests/arith-for.right
tests/array.right
tests/array.tests
tests/array1.sub [new file with mode: 0644]
tests/array2.sub [new file with mode: 0644]
tests/array3.sub [new file with mode: 0644]
tests/braces.right
tests/braces.tests
tests/builtins.right
tests/dbg-support.tests
tests/dollar-at-star
tests/dollar-star2.sub [new file with mode: 0644]
tests/dollar.right
tests/errors.right
tests/exec.right
tests/execscript
tests/exp-tests
tests/exp.right
tests/extglob.right
tests/extglob.tests
tests/extglob3.right [new file with mode: 0644]
tests/extglob3.tests [new file with mode: 0644]
tests/func.tests
tests/herestr.right
tests/histexp.right
tests/histexp.tests
tests/history.right
tests/history.tests
tests/ifs-posix.right [new file with mode: 0644]
tests/ifs-posix.tests [new file with mode: 0644]
tests/intl.right [new file with mode: 0644]
tests/intl.tests [new file with mode: 0644]
tests/iquote.right [new file with mode: 0644]
tests/iquote.tests [new file with mode: 0644]
tests/jobs.right
tests/jobs4.sub
tests/more-exp.right
tests/more-exp.tests
tests/new-exp.right
tests/new-exp.tests
tests/new-exp5.sub [new file with mode: 0644]
tests/nquote.right
tests/nquote.tests
tests/printf.right
tests/printf.tests
tests/read.right
tests/redir.right
tests/redir.tests
tests/redir7.sub [new file with mode: 0644]
tests/rhs-exp.right
tests/rhs-exp.tests
tests/run-appendop [new file with mode: 0644]
tests/run-extglob3 [new file with mode: 0644]
tests/run-ifs-posix [new file with mode: 0644]
tests/run-intl [new file with mode: 0644]
tests/run-iquote [new file with mode: 0644]
tests/run-minimal
tests/run-nquote4
tests/run-read
tests/run-tilde
tests/run-tilde2 [new file with mode: 0644]
tests/shopt.right
tests/tilde.tests [moved from tests/tilde-tests with 100% similarity]
tests/tilde2.right [new file with mode: 0644]
tests/tilde2.tests [new file with mode: 0644]
tests/type.right
tests/type.tests
tests/varenv.right
tests/varenv.sh
trap.c
trap.h
variables.c
variables.h
version.c
y.tab.c

diff --git a/CHANGES b/CHANGES
index 159da67..178a55f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,599 @@
+This document details the changes between this version, bash-3.1-release,
+and the previous version, bash-3.1-rc2.
+
+1.  Changes to Readline
+
+a.  Several changes to the multibyte redisplay code to fix problems with
+    prompts containing invisible characters.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-rc2,
+and the previous version, bash-3.1-rc1.
+
+1.  Changes to Bash
+
+a.  Fixed a bug that caused a DEBUG trap to overwrite a command string that's
+    eventually attached to a background job.
+
+b.  Changed some code so that filenames with leading tildes with spaces in the
+    name aren't tilde-expanded by the bash completion code.
+
+c.  Fixed a bug that caused the pushd builtin to fail to change to
+    directories with leading `-'.
+
+d.  Fixed a small memory leak in the programmable completion code.
+
+2.  Changes to Readline
+
+a.  Fixed a redisplay bug caused by moving the cursor vertically to a line
+    with invisible characters in the prompt in a multibyte locale.
+
+b.  Fixed a bug that could cause the terminal special chars to be bound in the
+    wrong keymap in vi mode.
+
+3.  New Features in Bash
+
+a.  If compiled for strict POSIX conformance, LINES and COLUMNS may now
+    override the true terminal size.
+
+4.  New Features in Readline
+
+a.  A new external application-controllable variable that allows the LINES
+    and COLUMNS environment variables to set the window size regardless of
+    what the kernel returns.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-rc1,
+and the previous version, bash-3.1-beta1.
+
+1.  Changes to Bash
+
+a.  Fixed a bug that could cause core dumps due of accessing the current
+    pipeline while in the middle of modifying it.
+
+b.  Fixed a bug that caused pathnames with backslashes still quoting characters
+    to be passed to opendir().
+
+c.  Command word completion now obeys the setting of completion-ignore-case.
+
+d.  Fixed a problem with redirection that caused file descriptors greater than
+    2 to be inappropriately marked as close-on-exec.
+
+e.  In Posix mode, after `wait' is called to wait for a particular process
+    explicitly, that process is removed from the list of processes known to
+    the shell, and subsequent attempts to wait for it return errors.
+
+f.  Fixed a bug that caused extended pattern matching to incorrectly scan
+    backslash-escaped pattern characters.
+
+g.  Fixed a synchronization problem that could cause core dumps when handling
+    a SIGWINCH.
+
+h.  Fixed a bug that caused an unmatched backquote to be accepted without an
+    error when processing here documents.
+
+i.  Fixed a small memory leak in the `cd' builtin.
+
+j.  Fix for MacOS X so it gets the values for the HOSTTYPE, MACHTYPE, and
+    OSTYPE variables at build time, to support universal binaries.
+
+k.  Fixed a bug that could cause an exit trap to return the exit status of
+    the trap command rather than the status as it was before the trap was
+    run as the shell's exit status.
+
+2.  New Features in Bash
+
+3.  Changes to Readline
+
+a.  Fixed a bug that caused reversing the incremental search direction to
+    not work correctly.
+
+b.  Fixed the vi-mode `U' command to only undo up to the first time insert mode
+    was entered, as Posix specifies.
+
+c.  Fixed a bug in the vi-mode `r' command that left the cursor in the wrong
+    place.
+
+4.  New Features in Readline
+
+a.  New application-callable auxiliary function, rl_variable_value, returns
+    a string corresponding to a readline variable's value.
+
+b.  When parsing inputrc files and variable binding commands, the parser
+    strips trailing whitespace from values assigned to boolean variables
+    before checking them.
+
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-beta1,
+and the previous version, bash-3.1-alpha1.
+
+1.  Changes to Bash
+
+a.  Added some system-specific signal names.
+
+b.  Fixed a typo in the ulimit builtin to make `x' the right option to
+    maniuplate the limit on file locks.
+
+c.  Fixed a problem with using += to append to index 0 of an array variable
+    when not using subscript syntax.
+
+d.  A few changes to configure.in to remove calls to obsolete or outdated
+    macros.
+
+e.  Make sure changes to variables bash handles specially (e.g., LC_ALL) are
+    made when the variable is set in the temporary environment to a command.
+
+f.  Make sure changes to variables bash handles specially (e.g., LC_ALL) are
+    made when the variable is modified using `printf -v'.
+
+g.  The export environment is now remade on cygwin when HOME is changed, so
+    DLLs bash is linked against pick up the new value.  This fixes problems
+    with tilde expansion when linking against and already-installed readline.
+
+h.  Small fix to the logic for performing tilde expansion in posix mode, so
+    expansion on the right-hand side of an assignment statement takes place.
+
+i.  Fixed a bug that prevented redirections associated with a shell function
+    from being executed when in a subshell.
+
+j.  Fixed `source' and `.' builtins to not require an executable file when
+    searching $PATH for a file to source.
+
+k.  Fixed a bug that caused incorrect word splitting in a function when IFS
+    was declared local, then unset.
+
+l.  Fixed a problem with the `kill' builtin that prevented sending signals
+    to a process group under certain circumstances when providing a pid < 0.
+
+m.  When in POSIX mode, `pwd' now checks that the value it prints is the same
+    directory as `.', even when displaying $PWD.
+
+n.  Fixed a problem with the `read' builtin when reading a script from standard
+    input and reading data from the same file.
+
+o.  Fixed a problem with the `type' and `command' builtins that caused absolute
+    pathnames to be displayed incorrectly.
+
+p.  Some changes to the `bg' builtin for POSIX conformance.
+
+q.  The `fc' builtin now removes the `fc' command that caused it to invoke an
+    editor on specified history entries from the history entirely, rather than
+    simply ignoring it.
+
+r.  When in POSIX mode, the `v' command in vi editing mode simply invokes vi
+    on the current command, rather than checking $FCEDIT and $EDITOR.
+
+s.  Fixed a small memory leak in the pathname canonicalization code.
+
+t.  Fixed a bug that caused the expanded value of a $'...' string to be
+    incorrectly re-quoted if it occurred within a double-quoted ${...}
+    parameter expansion.
+
+u.  Restored default emacs-mode key binding of M-TAB to dynamic-complete-history.
+
+v.  Fixed a bug that caused core dumps when interrupting loops running builtins
+    on some systems.
+
+w.  Make sure that some of the functions bash provides replacements for are
+    not cpp defines.
+
+x.  The code that scans embedded commands for the parser (`...` and $(...)) is
+    now more aware of embedded comments and their effect on quoted strings.
+
+y.  Changed the `-n' option to the `history' builtin to not reset the number of
+    history lines read in the current session after reading the new lines from
+    the history file if the history is being appended when it is written to
+    the file, since the appending takes care of the problem that the adjustment
+    was intended to solve.
+
+z.  Improved the error message displayed when a shell script fails to execute
+    because the environment and size of command line arguments are too large.
+
+aa. A small fix to make sure that $HISTCMD is evaluated whenever the shell is
+    saving commands to the history list, not just when HISTSIZE is defined.
+
+2.  Changes to Readline
+
+a.  The `change-case' command now correctly changes the case of multibyte
+    characters.
+
+b.  Changes to the shared library construction scripts to deal with Windows
+    DLL naming conventions for Cygwin.
+
+c.  Fixed the redisplay code to avoid core dumps resulting from a poorly-timed
+    SIGWINCH.
+
+d.  Fixed the non-incremental search code in vi mode to dispose of any current
+    undo list when copying a line from the history into the current editing
+    buffer.
+
+e.  The variable assignment code now ignores whitespace at the end of lines
+    when assigning to boolean variables.
+
+f.  The `C-w' binding in incremental search now understands multibyte
+    characters.
+
+3.  New Features in Bash
+
+a.  A new configuration option, `--enable-strict-posix-default', which will
+    build bash to be POSIX conforming by default.
+
+4.  New Features in Readline
+
+a.  If the rl_completion_query_items is set to a value < 0, readline never
+    asks the user whether or not to view the possible completions.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-3.1-alpha1,
+and the previous version, bash-3.0-release.
+
+1.  Changes to Bash
+
+a.  Fixed a bug that caused bash to crash if referencing an unset local array.
+
+b.  Fixed a problem that caused tilde expansion to not be performed before
+    attempting globbing word completion.
+
+c.  Fixed an incompatibility so that a first argument to trap that's a valid
+    signal number will be trated as a signal rather than a command to execute.
+
+d.  Fixed ${#word} expansion to correctly compute the length of a string
+    containing multibyte characters.
+
+e.  Fixed a bug that caused bash to not pass the correct flags for signal
+    disposition to child processes.
+
+f.  Fixed a bug that caused `fc -l' to list one too many history entries.
+
+g.  Some fixes to `fc' for POSIX conformance.
+
+h.  Some fixes to job status display for POSIX conformance.
+
+i.  Fixed a bug that caused `command -v' to display output if a command was not
+    found -- it should be silent.
+
+j.  In POSIX mode, `type' and `command -[vV]' do not report non-executable
+    files, even if the shell will attempt to execute them.
+
+k.  Fixed a bug that caused the `==' operator to the [[ command to not attempt
+    extended pattern matching.
+
+l.  Fixed the brace expansion code to handle characters whose value exceeds 128.
+
+m.  Fixed `printf' to handle strings with a leading `\0' whose length is
+    non-zero.
+
+n.  Fixed a couple of problems with brace expansion where `${' was handled
+    incorrectly.
+
+o.  Fixed off-by-one error when calculating the upper bound of `offset' when
+    processing the ${array[@]:offset:length} expansion.
+
+p.  System-specific configuration changes for: FreeBSD 5.x, Interix, MacOS X
+    10.4, Linux 2.4+ kernels, Linux 3.x kernels, Dragonfly BSD, QNX 6.x,
+    Cygwin
+
+q.  Fixed a bug that caused the shell to ignore the status of the rightmost
+    command in a pipeline when the `pipefail' option was enabled.
+
+r.  Fixed a completion bug that caused core dumps when expanding a directory
+    name.
+
+s.  Fixed a bug that prevented `hash -d' from removing commands from the hash
+    table.
+
+t.  Fixed word splitting to avoid really bad quadratic performance when
+    expanding long lists.
+
+u.  Fixed a bug that caused negative offsets in substring expansion to use the
+    wrong values.
+
+v.  Fixed a bug in printf that caused it to not return failure on write errors.
+
+w.  Fixed a bug that caused commands in subshells to not be properly timed.
+
+x.  The shell parser no longer attempts to parse a compound assignment specially
+    unless in a position where an assignment statement is acceptable or parsing
+    arguments to a builtin that accepts assignment statements.
+
+y.  Fixed a problem that caused a `case' statement to be added to the history
+    incorrectly as a single command if the `case word' was on one line and the
+    `in' on another.
+
+z.  Fixed a problem that caused internal shell quoting characters to be
+    incorrectly quoted with backslashes under some circumstances.
+
+aa. The shell now performs correct word splitting when IFS contains multibyte
+    characters.
+
+bb. The mail checking code now resets the cached file information if the size
+    drops to 0, even if the times don't change.
+
+cc. A completed command name that is found in $PATH as well as the name of a
+    directory in the current directory no longer has a slash appended in certain
+    circumstances:  a single instance found in $PATH when `.' is not in $PATH,
+    and multiple instances found in $PATH, even when `.' is in $PATH.
+
+dd. Incorporated tilde expansion into the word expansion code rather than as a
+    separately-called function, fixing some cases where it was performed
+    inappropriately (e.g., after the second `=' in an assignment statement or
+    in a double-quoted parameter expansion).
+
+ee. Fixed several bugs encountered when parsing compound assignment statements,
+    so that compound assignments appearing as arguments to builtins are no
+    longer double-expanded.
+
+ff. Fixed a bug in the command execution code that caused asynchronous commands
+    containing command substitutions to not put the terminal in the wrong
+    process group.
+
+gg. Bash now handles the case where the WCONTINUED flag causes waitpid() to
+    return -1/EINVAL at runtime as well as configuration time.
+
+hh. Fixed parser to generate an error when the pipeline `argument' to `!' or
+    `time' is NULL.
+
+ii. The shell now takes a little more care when manipulating file descriptors
+    greater than 9 with the `exec' builtin.
+
+jj. Fixed a bug that caused variable assignments preceding the `command' builtin
+    preceding a special builtin to be preserved after the command completed in
+    POSIX mode.
+
+kk. Fixed a bug that allowed variables beginning with a digit to be created.
+
+ll. Fixed a bug that caused a \<newline> to be removed when parsing a $'...'
+    construct.
+
+mm. A shell whose name begins with `-' will now be a restricted shell if the
+    remainder of the name indicates it should be restricted.
+
+nn. Fixed a bug that could cause a core dump if FUNCNAME were changed or unset
+    during a function's execution.
+
+oo. Fixed a bug that caused executing a `return' in a function to not execute
+    a RETURN trap.  The RETURN trap is inherited by shell functions only if
+    function tracing is globally enabled or has been enabled for that function.
+
+pp. Fixed cases where var[@] was not handled exactly like var, when var is a
+    scalar variable.
+
+qq. Fixed a bug that caused the first character after a SIGINT to be discarded
+    under certain circumstances.
+
+rr. Fixed exit status code so that a suspended job returns 128+signal as its
+    exit status (preventing commands after it in `&&' lists from being
+    executed).
+
+ss. Fixed a bug that caused the shell parser state to be changed by executing
+    a shell function as a result of word completion.
+
+tt. Fixed a long-standing bug that caused '\177' characters in variable
+    values to be discarded when expanded in double-quoted strings.
+
+uu. Fixed a bug that caused $RANDOM to be re-seeded multiple times in a
+    subshell environment.
+
+vv. Extensive changes to the job management code to avoid the pid-reuse and
+    pid-aliasing problems caused by retaining the exit status of too many jobs,
+    but still retain as many background job statuses as POSIX requires.
+
+ww. Fixed a parser bug in processing \<newline> that caused things like
+
+               ((echo 5) \
+                (echo 6))
+
+    to not work correctly.
+
+xx. `pwd -P' now sets $PWD to a directory name containing no symbolic links
+    when in posix mode, as POSIX requires.
+
+yy. In posix mode, bash no longer sets $PWD to a name containing no symbolic
+    links if a directory is chosen from $CDPATH.
+
+zz. The word splitting code now treats an IFS character that is not space,
+    tab, or newline and any adjacent IFS white space as a single delimiter, as
+    SUSv3/XPG6 require.
+
+aaa. The `read' builtin now checks whether or not the number of fields read is
+     exactly the same as the number of variables instead of just assigning the
+     rest of the line (minus any trailing IFS white space) to the last
+     variable.  This is what POSIX/SUS/XPG all require.
+
+bbb. Fixed a bug that caused `read' to always check whether or not fd 0 was a
+     pipe, even when reading from another file descriptor.
+
+ccc. Fixed a bug that caused short-circuiting of execution even if the return
+     value was being inverted.
+
+ddd. Fixed a bug that caused a core dump while decoding \W escapes in PS1 if
+     PWD was unset.
+
+eee. Fixed a bug in `read' that counted internal quoting characters for the
+     purposes of `read -n'.
+
+fff. Fixed a bug so that a function definition in a pipeline causes a child
+     process to be forked at the right time.
+
+ggg. Bash will not attempt to link against a readline library that doesn't
+     have rl_gnu_readline_p == 1.
+
+hhh. Fixed a bug that caused `read' to consume one too many characters when
+     reading a fixed number of characters and the Nth character is a backslash.
+
+iii. Fixed a bug that caused `unset' on variables in the temporary environment
+     to leave them set when `unset' completed.
+
+jjj. Fixed a bug that caused bash to close fd 2 if an `exec' failed and the
+     shell didn't exit.
+
+kkk. The completion code is more careful to not turn `/' or `///' into `//',
+     for those systems on which `//' has special meaning.
+
+lll. Fixed a bug that caused command substitution in asynchronous commands to
+     close the wrong file descriptors.
+
+mmm. The shell no longer prints status messages about terminated background
+     processes unless job control is active.
+
+nnn. Fixed a bug that prevented multiple consecutive invocations of `history -s'
+     from adding all the commands to the history list.
+
+ooo. Added a couple of changes to make arithmetic expansion more consistent in
+     all its contexts (still not perfect).
+
+ppp. Fixed a bug that caused the parser to occasionally not find the right
+     terminating "`" in an old-style command substitution.
+
+qqq. Fixed a bug that caused core dumps when the shell was reading its non-
+     interactive input from fd 0 and fd 0 was duplicated and restored using a
+     combination of `exec' (to save) and redirection (to restore).
+
+rrr. Fixed a problem that caused loops in sourced scripts to not be cleaned
+     up properly when a `return' is executed.
+
+sss. Change internal command substitution completion function to append a slash
+     to directory names in the command.
+
+2.  Changes to Readline
+
+a.  Fixed a bug that caused multiliine prompts to be wrapped and displayed
+    incorrectly.
+
+b.  Fixed a bug that caused ^P/^N in emacs mode to fail to display the current
+    line correctly.
+
+c.  Fixed a problem in computing the number of invisible characters on the first
+    line of a prompt whose length exceeds the screen width.
+
+d.  Fixed vi-mode searching so that failure preserves the current line rather
+    than the last line in the history list.
+
+e.  Fixed the vi-mode `~' command (change-case) to have the correct behavior at
+    end-of-line when manipulating multibyte characters.
+
+f.  Fixed the vi-mode `r' command (change-char) to have the correct behavior at
+    end-of-line when manipulating multibyte characters.
+
+g.  Fixed multiple bugs in the redisplay of multibyte characters:  displaying
+    prompts longer than the screen width containing multibyte characters, 
+
+h.  Fix the calculation of the number of physical characters in the prompt
+    string when it contains multibyte characters.
+
+i.  A non-zero value for the `rl_complete_suppress_append' variable now causes
+    no `/' to be appended to a directory name.
+
+j.  Fixed forward-word and backward-word to work when words contained
+    multibyte characters.
+
+k.  Fixed a bug in finding the delimiter of a `?' substring when performing
+    history expansion in a locale that supports multibyte characters.
+
+l.  Fixed a memory leak caused by not freeing the timestamp in a history entry.
+
+m.  Fixed a bug that caused "\M-x" style key bindings to not obey the setting
+    of the `convert-meta' variable.
+
+n.  Fixed saving and restoring primary prompt when prompting for incremental
+    and non-incremental searches; search prompts now display multibyte
+    characters correctly.
+
+o.  Fixed a bug that caused keys originally bound to self-insert but shadowed
+    by a multi-character key sequence to not be inserted.
+
+p.  Fixed code so rl_prep_term_function and rl_deprep_term_function aren't
+    dereferenced if NULL (matching the documentation).
+
+q.  Extensive changes to readline to add enough state so that commands
+    requiring additional characters (searches, multi-key sequences, numeric
+    arguments, commands requiring an additional specifier character like
+    vi-mode change-char, etc.) work without synchronously waiting for
+    additional input.
+
+r.  Lots of changes so readline builds and runs on MinGW.
+
+s.  Readline no longer tries to modify the terminal settings when running in
+    callback mode.
+
+t.  The Readline display code no longer sets the location of the last invisible
+    character in the prompt if the \[\] sequence is empty.
+
+3.  New Features in Bash
+
+a.  Bash now understands LC_TIME as a special variable so that time display
+    tracks the current locale.
+
+b.  BASH_ARGC, BASH_ARGV, BASH_SOURCE, and BASH_LINENO are no longer created
+    as `invisible' variables and may not be unset.
+
+c.  In POSIX mode, if `xpg_echo' option is enabled, the `echo' builtin doesn't
+    try to interpret any options at all, as POSIX requires.
+
+d.  The `bg' builtin now accepts multiple arguments, as POSIX seems to specify.
+
+e.  Fixed vi-mode word completion and glob expansion to perform tilde
+    expansion.
+
+f.  The `**' mathematic exponentiation operator is now right-associative.
+
+g.  The `ulimit' builtin has new options: -i (max number of pending signals),
+    -q (max size of POSIX message queues), and -x (max number of file locks).
+
+h.  A bare `%' once again expands to the current job when used as a job
+    specifier.
+
+i.  The `+=' assignment operator (append to the value of a string or array) is
+    now supported for assignment statements and arguments to builtin commands
+    that accept assignment statements.
+
+j.  BASH_COMMAND now preserves its value when a DEBUG trap is executed.
+
+k.  The `gnu_errfmt' option is enabled automatically if the shell is running
+    in an emacs terminal window.
+
+l.  New configuration option:  --single-help-strings.  Causes long help text
+    to be written as a single string; intended to ease translation.
+
+m.  The COMP_WORDBREAKS variable now causes the list of word break characters
+    to be emptied when the variable is unset.
+
+n.  An unquoted expansion of $* when $IFS is empty now causes the positional
+    parameters to be concatenated if the expansion doesn't undergo word
+    splitting.
+
+o.  Bash now inherits $_ from the environment if it appears there at startup.
+
+p.  New shell option: nocasematch.  If non-zero, shell pattern matching ignores
+    case when used by `case' and `[[' commands.
+
+q.  The `printf' builtin takes a new option: -v var.  That causes the output
+    to be placed into var instead of on stdout.
+
+r.  By default, the shell no longer reports processes dying from SIGPIPE.
+
+s.  Bash now sets the extern variable `environ' to the export environment it
+    creates, so C library functions that call getenv() (and can't use the
+    shell-provided replacement) get current values of environment variables.
+
+4.  New Features in Readline
+
+a.  The key sequence sent by the keypad `delete' key is now automatically
+    bound to delete-char.
+
+b.  A negative argument to menu-complete now cycles backward through the
+    completion list.
+
+c.  A new bindable readline variable:  bind-tty-special-chars.  If non-zero,
+    readline will bind the terminal special characters to their readline
+    equivalents when it's called (on by default).
+
+d.  New bindable command: vi-rubout.  Saves deleted text for possible
+    reinsertion, as with any vi-mode `text modification' command; `X' is bound
+    to this in vi command mode.
+
+------------------------------------------------------------------------------
 This document details the changes between this version, bash-3.0-release,
 and the previous version, bash-3.0-rc1.
 
@@ -184,7 +780,7 @@ n.  Fixed the value of errno set by the pathname canonicalization functions.
 o.  Changed the grammar so that `time' alone on a line times a null command
     rather than being a syntax error.
 
-p.  The pattern substitution coded no longer performs quote removal on the
+p.  The pattern substitution code no longer performs quote removal on the
     pattern before trying to match it, as the pattern removal functions do.
 
 q.  Fixed a bug that could cause core dumps when checking whether a quoted
diff --git a/COMPAT b/COMPAT
index 6858ce7..6d30663 100644 (file)
--- a/COMPAT
+++ b/COMPAT
@@ -1,5 +1,5 @@
 This document details the incompatibilites between this version of bash,
-bash-3.0, and a previous widely-available version, bash-1.14 (which
+bash-3.1, and a previous widely-available version, bash-1.14 (which
 is still the `standard' version for a few Linux distributions).  These
 were discovered by users of bash-2.x and 3.x, so this list is not
 comprehensive. Some of these incompatibilities occur between the current
@@ -212,3 +212,14 @@ and bash-2.0 were significant.)
 
 18.  Bash no longer requires that the body of a function be a group command;
      any compound command is accepted.
+
+19.  As of bash-3.0, the pattern substitution operators no longer perform
+     quote removal on the pattern before attempting the match.  This is the
+     way the pattern removal functions behave, and is more consistent.
+
+20.  After bash-3.0 was released, I reimplemented tilde expansion, incorporating
+     it into the mainline word expansion code.  This fixes the bug that caused
+     the results of tilde expansion to be re-expanded.  There is one
+     incompatibility:  a ${paramOPword} expansion within double quotes will not
+     perform tilde expansion on WORD.  This is consistent with the other
+     expansions, and what POSIX specifies.
index f6ce0b9..6ab5c81 100644 (file)
@@ -2874,7 +2874,7 @@ lib/sh/stringlist.c
 subst.c
        - in skip_to_delim(), if we have an unclosed ${, and it's at the end
          of the string (string[i] == '{', string[i+1] == '{' and
-         string[i+2] == 0, return si (i +2) immediately without bothering
+         string[i+2] == 0, return si (i + 2) immediately without bothering
          to call extract_dollar_brace_string or extract_delimited_string
        - in skip_to_delim(), if string[i] is 0 after a call to
          extract_dollar_brace_string or extract_delimited_string (meaning we
@@ -9638,3 +9638,2840 @@ flags.c
          error messages
 
 [bash-3.0 frozen]
+
+                                  7/27
+                                  ----
+doc/Makefile.in
+       - small fixes
+
+[bash-3.0-released]
+
+                                  7/28
+                                  ----
+array.c
+       - in array_insert(), make sure the value to be added is non-NULL before
+         calling savestring() on it
+
+builtins/reserved.def
+       - fix description of `CDPATH'
+
+lib/readline/display.c
+       - when expanding a prompt that spans multiple lines with embedded
+         newlines, set prompt_physical_chars from the portion after the
+         final newline, not the preceding portion.  Bug reported by
+         "Ralf S. Engelschall" <rse@engelschall.com>
+
+make_cmd.c
+       - explicitly declare `lineno' in function prologue for make_case_command
+
+builtins/evalfile.c
+       - include `trap.h' for declaration for run_return_trap
+
+bashline.c
+       - fix a `return' without a value in enable_hostname_completion
+
+general.c
+       - include test.h for extern declaration for test_eaccess
+
+externs.h
+       - add declaration for zcatfd
+
+tests/{history,histexp}.tests
+       - unset HISTFILESIZE to avoid problems if a value of 0 is inherited
+         from the environment
+
+                                  7/30
+                                  ----
+bashline.c
+       - small changes to glob_expand_word to perform tilde expansion before
+         attempting globbing
+
+builtins/Makefile.in
+       - fix the install-help target to not cd into the `helpfiles'
+         subdirectory, so a value of $INSTALL_DATA containing a relative
+         pathname (e.g., .././support/install.sh) remains valid
+
+                                  7/31
+                                  ----
+subst.c
+       - new function, mbstrlen(s), returns length of a multibyte character
+         string
+
+include/shmbutil.h
+       - new macro, MB_STRLEN(s), calls mbstrlen or STRLEN as appropriate
+
+builtins/trap.def
+       - small change so that a first argument that's a valid signal number
+         (digits only -- no symbolic names) will be treated as a signal and
+         reverted back to the original handling disposition.  Fixes debian
+         complaints
+
+subst.c
+       - call MB_STRLEN instead of STRLEN where appropriate in
+         parameter_brace_expand_length to handle multibyte characters properly
+       - call MB_STRLEN instead of strlen in verify_substring_values so that
+         negative substrings of strings with multibyte chars work properly
+
+                                   8/1
+                                   ---
+jobs.c
+       - describe_pid needs to write to stderr, not stdout (POSIX)
+       - start_job, since it's only used by builtins (fg/bg), needs to write
+         its output to stdout, not stderr (POSIX)
+
+sig.c
+       - add an `orig_flags' member to struct terminating_signal so the
+         original signal handling flags (SA_RESTART, etc.) can be preserved
+         on POSIX systems
+       - make sure to preserve the signal flags state in
+         initialize_terminating_signals and reset them for child processes
+         in reset_terminating_signals
+
+builtins/fc.def
+       - fixed an off-by-one error that caused `fc -l' to list one too many
+         history entries
+       - in posix mode, `fc' should not list any indication as to whether or
+         not history lines have been modified (POSIX)
+       - when in posix mode, the default editor for `fc' should be `ed' (POSIX)
+
+doc/bashref.texi
+       - updated the description of `trap' behavior when given a first
+         argument that is a valid signal number
+       - noted that `fc -l' won't indicate whether a history entry has been
+         modified if the shell is in posix mode
+
+builtins/command.def
+       - fixed bug: `command -v' is supposed to be silent if a command is not
+         found
+
+builtins/hash.def
+       - `hash' should print its `hash table empty' message to stderr
+
+lib/readline/misc.c
+       - back out 7/7 change to _rl_maybe_save_line; it breaks emacs-mode ^P
+
+general.c
+       - changed base_pathname so that it will return reasonable results for
+         non-absolute pathnames -- this is what is intended by all of its
+         callers
+
+arrayfunc.c
+       - fix array_variable_part to return NULL if it finds an invisible
+         variable in the hash table.  Fixes seg fault caused by referring to
+         unset local variable using array notation
+
+{locale,variables}.c
+       - support LC_TIME as a special locale variable so HISTTIMEFORMAT tracks
+         the current locale
+
+                                   8/2
+                                   ---
+variables.c
+       - fixed small memory leak in makunbound() when a local array variable
+         is unset.  Fix from William Park
+
+lib/readline/display.c
+       - fixed a problem when computing the number of invisible characters on
+         the first line of a prompt whose length exceeds the screen width
+         (should only happen when invisible characters occur after the
+         line wrap).  Bug reported by agriffis@gentoo.org
+
+builtins/command.def
+       - `command -V' passes a new flag, CDESC_ABSPATH, which means to convert
+         to an absolute path
+
+builtins/type.def
+       - in posix mode, `type' and `command -v/-V' should not report
+         non-executable files, even if the execution code will attempt to
+         run them.  Other posix shells do this
+
+doc/bashref.texi
+       - add note to POSIX Mode section describing behavior of type and command
+         when finding a non-executable file
+
+execute_cmd.c
+       - force extended_glob to 1 before calling binary_test in
+         execute_cond_node so that the right extended pattern matching gets
+         performed
+
+                                   8/3
+                                   ---
+braces.c
+       - make sure lhs[0] and rhs[0] are cast to `unsigned char' so chars
+         with values > 128 are handled correctly
+
+builtins/printf.def
+       - change bexpand() and printstr() to handle strings with a leading
+         '\0' whose length is non-zero, since that's valid input for the
+         `%b' format specifier
+
+subst.c
+       - fix a couple of instances of find_variable that didn't check the
+         result for an invisible variable
+
+variables.c
+       - BASH_ARGC, BASH_ARGV, BASH_SOURCE, BASH_LINENO no longer created as
+         invisible vars
+
+pcomplete.c
+       - make sure COMP_WORDS is not invisible when bind_comp_words returns
+       - ditto for COMPREPLY in gen_shell_function_matches
+
+                                   8/4
+                                   ---
+braces.c
+       - fix problem where ${ was ignored but did not increment the open
+         brace count.  Bug reported by Tim Waugh <twaugh@redhat.com>
+
+variables.c
+       - if make_local_variable finds a variable in the correct context in
+         the right variable scope, make sure it's not invisible before
+         returning it
+
+                                   8/5
+                                   ---
+builtins/trap.def
+       - fixed usage message to show `action' as not optional, though it
+         actually is when not in posix mode (for a single argument)
+
+                                   8/7
+                                   ---
+configure.in
+       - kfreebsd-gnu has had its sbrk() problems fixed, and no longer needs
+         to be configured --without-gnu-malloc
+
+lib/readline/vi_mode.c
+       - in rl_vi_search, free any saved history line before starting the
+         search, so failure leaves you at that line, not the last line in
+         the history (assuming the current line is not the last history line).
+         Fix from llattanzi@apple.com to replace fix of 7/7
+
+                                   8/9
+                                   ---
+support/Makefile.in
+       - renamed `mostly-clean' target to `mostlyclean'
+
+                                  8/11
+                                  ----
+lib/readline/vi_mode.c
+       - make same change for EOL in multibyte character case of
+         rl_vi_change_char
+
+                                  8/12
+                                  ----
+subst.c
+       - in verify_substring_values, fix off-by-one error checking bounds of
+         `offset', esp. in array values (e.g., getting the highest element
+         of an array)
+
+                                  8/16
+                                  ----
+aclocal.m4
+       - change BASH_CHECK_DEV_FD to make sure that file descriptors > 2 are
+         accessible via /dev/fd, unlike FreeBSD 5.x
+
+lib/sh/strftime.c
+       - make sure `zone' is initialized with gettimeofday before it is used
+       - work around HPUX lack of `altzone' and differing definitions of
+         `timezone'
+
+lib/malloc/malloc.c
+       - internal_memalign and memalign now take a `size_t' as their first
+         argument, which seems to be the prevailing standard
+
+lib/malloc/{malloc.c,shmalloc.h}
+       - change sh_memalign to take a `size_t' as its first argument
+
+builtins/echo.def
+       - if posixly_correct and xpg_echo are both set, don't try to interpret
+         any arguments at all, as POSIX/XOPEN requires (fix inspired by Paul
+         Eggert)
+
+doc/bashref.texi
+       - amend description of bash posix mode to include new echo behavior
+
+builtins/fg_bg.def
+       - allow bg to take multiple job arguments, as posix seems to specify,
+         placing them all in the background, returning the status of the last
+         one as the status of `bg'
+
+lib/readline/vi_mode
+       - fix _rl_vi_change_mbchar_case (multibyte-char version of `~'
+         command) to have the right behavior at EOL -- handle case where vi
+         mode backs up at the end of the line
+
+                                  8/18
+                                  ----
+array.c
+       - check for an empty array in array_rshift before shifting elements
+         and adjusting max_index
+       - check for null array in array_subrange
+
+jobs.c
+       - fix raw_job_exit_status to not ignore exit status of the last
+         process in the pipeline when `set -o pipefail' is enabled
+
+                                  8/19
+                                  ----
+lib/readline/mbutil.c
+       - make sure _rl_find_next_mbchar_internal has a valid multibyte
+         character before it checks whether or not it's a zero-width
+         wide character and adjusts point accordingly
+
+                                  8/24
+                                   ----
+bashline.c
+        - new function, bash_directory_expansion, duplicates the expansions
+          performed on the directory name by rl_filename_completion_function
+        - call bash_directory_expansion in command_word_completion_function
+          if we decide we're doing tilde expansion (and any other
+          canonicalization) on the directory name being completed
+
+                                   8/25
+                                   ----
+configure.in
+        - use new-style AC_CHECK_HEADER to check for sys/ptem.h (which requires
+          sys/stream.h).  The correct checks are in the code, but autoconf
+          complains if sys/stream.h is not included, rather than simply
+          checking for the header's presence
+
+                                  8/26
+                                  ----
+builtins/hash.def
+       - fix a bug that prevented `hash -d' from working right (as soon as
+         hash removed a command from the table, the bug caused it to be added
+         right back)
+
+                                  8/27
+                                  ----
+doc/{bash.1,bashref.texi}
+       - explicitly note that conditional primaries that operate on files
+         operate on the targets of symbolic links rather than the links
+         themselves
+
+                                  8/30
+                                  ----
+lib/readline/display.c
+       - fix multibyte calculation of `physchars' in prompt expansion, to
+         handle double-width multibyte characters correctly
+       - changes to rl_redisplay to handle prompts longer than the screenwidth
+         that might contain double-width multibyte characters.  Fixes from
+         Tomohiro Kubota
+
+                                   9/6
+                                   ---
+subst.c
+       - change word_list_split to avoid really bad behavior caused by calling
+         list_append for each split word -- as the list gets long, you have
+         to traverse it every time.  Keep a pointer to the end of the list and
+         and just tack onto it
+
+                                   9/8
+                                   ---
+lib/readline/complete.c
+       - change fnprint to calculate the displayed width of a filename in
+         the same way as fnwidth
+
+subst.c
+       - in verify_substring_values, when expanding ${array[@]:offset}, make
+         sure negative offsets count from one greater than the array's
+         maximum index so things like ${x[@}: -1} work to give the last element
+         (requires fixing array tests)
+
+builtins/common.c
+       - new error function, sh_wrerror(),  for builtins to call when a write
+         error occurs
+
+builtins/common.h
+       - extern declaration for sh_wrerror()
+
+builtins/cd.def
+       - change builtin_error call to use sh_wrerror()
+
+builtins/echo.def
+       - report write errors with sh_wrerror() instead of just returning
+         failure
+
+builtins/printf.def
+       - change printstr to return failure (-1) or success (0) indication
+         rather than void
+       - report write errors when printstr() fails, return failure
+       - if any of the PF/printf calls fail, report write error and return
+         failure
+
+execute_cmd.c
+       - change execute_in_subshell so the subshell command inherits the
+         command timing flags from the enclosing COMMAND *
+
+                                  9/11
+                                  ----
+[prayers for the victims of 9/11/2001]
+
+lib/sh/strnlen.c
+       - new file, implementation of GNU libc extension function strnlen
+
+lib/sh/Makefile.in, {config.h,configure,Makefile}.in, MANIFEST
+       - changes for strnlen
+
+configure.in
+       - version changed to 3.1-devel
+
+doc/bash.1, lib/readline/doc/rluser.texi
+       - added description of `-o plusdirs' to complete/compgen (thanks,
+         Arnold)
+
+parse.y
+       - new parser_state flag, PST_ASSIGNOK, if set indicates we're parsing
+         arguments to a builtin that accepts assignment statement arguments
+       - turn on PST_ASSIGNOK in read_token_word when appropriate
+       - turn off PST_ASSIGNOK in read_token when appropriate
+       - don't attempt to parse a compound assignment specially unless we're
+         in a position where an assignment statement is acceptable, or
+         PST_ASSIGNOK is set
+
+                                  9/13
+                                  ----
+variables.c
+       - make BASH_ARGC, BASH_ARGV, BASH_LINENO, and BASH_SOURCE
+         non-unsettable, since the shell uses those values internally
+
+expr.c
+       - make exponentiation right-associative, as is apparently correct
+
+                                  9/16
+                                  ----
+arrayfunc.c
+       - make sure convert_var_to_array marks the environment as needing
+         recreation if the converted variable was exported
+
+                                  9/17
+                                  ----
+braces.c
+       - mark ${ as introducing an additional level of braces only if it's
+         not in a quoted string -- quoted strings are handled before brace
+         matching is done
+
+parse.y
+       - fixed an obscure problem in history_delimiting_chars where the `in'
+         in a case statement could have a semicolon added after it, if the
+         `case word' was on a previous line
+
+support/config.guess
+       - support for newest versions of tandem non-stop kernel
+
+lib/readline/display.c
+       - in compute_lcd_of_matches, explicitly cast `text' to `char *' before
+         passing it to rl_filename_dequoting_function
+
+lib/readline/terminal.c
+       - bind the key sequence sent by the keypad `delete' key to delete-char
+         (same as ^D in emacs mode)
+
+builtins/ulimit.def
+       - in print_all_limits, don't print anything if get_limit returns
+         -1/EINVAL, indicating that the kernel doesn't support that particular
+         limit
+       - add -i (max number of pending signals), -q (max size of posix msg
+         queues), -x (max number of file locks) for systems (Linux) that
+         support them
+
+doc/{bash.1,bashref.texi}
+       - fix description of correspondence between FUNCNAME, BASH_LINENO,
+         and BASH_SOURCE indices in description of BASH_LINENO
+
+                                  9/18
+                                  ----
+lib/sh/shquote.c
+       - don't quote CTLESC and CTLNUL with CTLESC in sh_backslash_quote, as
+         long as the resultant string never gets sent to the word expansion
+         functions without going through the shell parser
+
+externs.h
+       - add extern declarations for strnlen and strpbkrk from lib/sh
+
+subst.[ch]
+       - changes to handle case where IFS consists of multibyte characters.
+         Changed: string_extract_verbatim, split_at_delims,
+         string_list_dollar_star, string_list_dollar_at, list_string,
+         get_word_from_string, setifs
+
+                                  9/19
+                                  ----
+mailcheck.c
+       - change file_mod_date_changed to reset the cached mail file data if
+         the file size drops to zero
+
+lib/readline/complete.c
+       - change append_to_match so that a non-zero value for
+         rl_completion_suppress_append will cause no `/' to be appended to a
+         directory name
+
+bashline.c
+       - experimental change to suppress appending a slash for a completed
+         filename that is found in PATH as well as a directory in the current
+         directory under certain circumstances:  a single instance found in
+         $PATH when `.' is not in $PATH, and multiple instances found in the
+         $PATH, even when `.' is in the $PATH
+
+                                  9/24
+                                  ----
+command.h
+       - new word flag: W_ASSIGNRHS, means word is rhs of assignment statement
+       - new word flag: W_NOTILDE, means word is not to be tilde expanded
+       - new word flag (internal): W_ITILDE, means the next character is a
+         tilde that should be expanded
+
+general.c
+       - new set of tilde suffixes for use when parsing the RHS of an
+         assignment statement and =~ should not be subject to tilde expansion
+       - if ASSIGN_P argument to bash_tilde_expand is 2, use tilde prefixes
+         for parsing RHS of assignment statement
+
+general.[ch]
+       - new function bash_tilde_find_word, drop-in replacement for
+         tilde_find_word
+
+subst.c
+       - call bash_tilde_expand with secord argument of 2 when expanding rhs
+         of an assignment statement, so tildes after second and subsequent
+         `=' in an assignment are not expanded
+       - new function, expand_string_assignment, to expand the rhs of an
+         assignment statement
+       - add `~' to EXP_CHAR, the characters that will cause the word
+         expansion functions to be called
+       - move tilde expansion into expand_word_internal instead of many
+         different calls to bash_tilde_expand scattered across different
+         functions.  NOTE:  This means that double quotes surrounding a
+         {paramOPword} expansion will cause tilde expansion to NOT be
+         performed on `word'.  I think this is right, what POSIX specifies,
+         and consistent with the behavior of other characters in the rhs
+
+execute_cmd.c
+       - take out calls to bash_tilde_expand before calling word expansion
+         functions
+
+                                  9/26
+                                  ----
+execute_cmd.c
+       - make sure to call UNBLOCK_CHILD before returning on a pipe creation
+         failure in execute_pipeline
+
+                                  9/27
+                                  ----
+variables.c
+       - change get_bash_command to deal with the_printed_command_except_trap
+         being NULL
+
+execute_cmd.c
+       - fix execute_simple_command to deal with the_printed_command being
+         NULL when assigning to the_printed_command_except_trap -- fixes
+         seg fault in savestring()
+
+parse.y
+       - change the parser so that the closing `)' in a compound variable
+         assignment delimits a token -- ksh93 does it this way
+
+doc/{bash.1,bashref.texi}
+       - change description of tilde expansion to note that expansion is
+         attempted only after the first =~ in an assignment statement
+
+builtins/declare.def
+       - when assigning to an array variable with declare -a x=(...), make
+         sure the last character in the rhs  of the variable assignment is
+         `)', not just that it appears somewhere
+
+                                  9/28
+                                  ----
+command.h
+       - add a `W_NOEXPAND' flag to inhibit all expansion except quote removal
+       - add a `W_COMPASSIGN' flag to denote a word is a compound assignment
+         statement
+
+parse.y
+       - set W_COMPASSIGN on words that appear to be compound assignments
+
+subst.c
+       - pass W_NOXPAND and W_COMPASSIGN through end of expand_word_internal
+
+subst.[ch]
+       - new function, expand_assignment_string_to_string, calls
+         expand_string_assignment and then string_list on the result
+
+variables.c
+       - assign_in_env now calls expand_assignment_string_to_string
+
+                                  9/30
+                                  ----
+builtins/common.c
+       - change get_job_spec so the null job `%' once again means the current
+         job
+
+                                  10/1
+                                  ----
+subst.c
+       - do_assignment_internal now takes a WORD_DESC * as its first
+         argument, and uses its `word' member as the assignment string
+       - change expand_word_list_internal to call do_word_assignment instead
+         of do_assignment, passing it `word' instead of, e.g., `word->word'
+       - change extract_array_assignment_list to just return the passed
+         string minus a trailing `)' if the last character is a right
+         paren
+       - change do_assignment_internal to call extract_array_assignment_list
+
+subst.[ch]
+       - change do_assignment and do_assignment_no_expand to take a `char *'
+         instead of `const char *' first argument; change extern prototypes
+       - new function, do_word_assignment, takes a WORD_DESC * and calls
+         do_assignment_internal on it; add extern declaration with prototype
+
+general.h
+       - new typedef, sh_wassign_func_t, like sh_assign_func_t but takes a
+         WORD_DESC * as its first argument
+
+variables.[ch]
+       - assign_in_env now takes a WORD_DESC * as its first argument
+
+                                  10/2
+                                  ----
+command.h
+       - new word flag, W_ASSNBLTIN, denotes that the word is a builtin
+         command (in a command position) that takes assignment statements
+         as arguments, like `declare'
+       - new word flags, W_ASSIGNARG, denotes that word is an assignment
+         statement given as argument to assignment builtin
+
+execute_cmd.c
+       - set W_ASSNBLTIN flag in fix_assignment_words if necessary (if there
+         are any arguments that are assignment statements)
+       - set W_ASSIGNARG flag in fix_assignment_words if necessary
+
+subst.c
+       - new function, do_compound_assignment, encapsulates the necessary
+         code to perform a compound array assignment (including creation of
+         local variables); called from do_assignment_internal
+       - to fix the double-expansion problem with compound array assignments
+         that are arguments to builtins like `declare', changed
+         shell_expand_word_list to treat those arguments like assignment
+         statements (with proper creation of local variables inside shell
+         functions) and pass the attribute-setting portion of the statement
+         onto the builtin.  This is what ksh93 appears to do, from inspection
+         of the `ksh93 -x' output
+
+execute_cmd.c
+       - fix execute_simple_command:  in case of pipeline or async command,
+         when forking early, set `subshell_environment' so that it can contain
+         both SUBSHELL_PIPE and SUBSHELL_ASYNC -- the two should not be
+         mutually exclusive.  Fixes bug reported by pierre.humblet@ieee.org
+       - remove references to last_pid, old_command_subst_pid; use NO_PID as
+         a sentinel value to decide whether or not a child process has been
+         created and needs to be waited for.  Submitted by
+         pierre.humblet@ieee.org to fix recycling-pid problem on cygwin
+
+doc/{bash.1,bashref.texi}
+       - fixed documentation of `@(pattern)' extended globbing operator --
+         it succeeds if the string matches one of the patterns, not exactly
+         one.  This is what ksh93 does, too
+
+lib/readline/complete.c
+       - fixed rl_menu_complete so that a negative argument cycles backwards
+         through the list
+
+                                  10/3
+                                  ----
+subst.c
+       - use W_COMPASSIGN flag in do_assignment_internal instead of deciding
+         lexically which assignments are compound array assignments
+
+                                  10/6
+                                  ----
+support/shobj-conf
+       - additions for System V.5 from Boyd Gerber <gerberb@zenez.com>
+
+subst.c
+       - in command_substitute, if subshell_environment includes
+         SUBSHELL_ASYNC, call make_child with the `async_p' argument set to
+         non-zero.  This keeps command substitutions for async commands or
+         pipelines from trying to give the terminal back to the shell's
+         pgrp.  make sure to save and restore last_asynchronous_pid.  Fix
+         suggested by <pierre.humblet@ieee.org>
+
+                                  10/7
+                                  ----
+config.h.in
+       - add a placeholder definition for WCONTINUED_BROKEN
+
+                                  10/9
+                                  ----
+aclocal.m4
+       - add BASH_CHECK_WCONTINUED, checks for glibc bug where WCONTINUED is
+         defined but rejected as invalid by waitpid(2)
+
+configure.in
+       - add call to BASH_CHECK_WCONTINUED, defines WCONTINUED_BROKEN
+
+redir.c
+       - experimental change to add_undo_redirect to save manipulations to
+         file descriptors >= SHELL_FD_BASE (10) on the list of redirections
+         to be undone even if `exec' causes the list to be discarded
+
+doc/{bash.1,bashref.texi}
+       - note that redirections using file descriptors > 9 should be used
+         carefully, because they might conflict with file descriptors the
+         shell uses internally
+
+                                  10/11
+                                  -----
+parse.y
+       - fix pipeline_command production to handle case where `pipeline'
+         as `argument' of `!' or `time' is null (e.g., a syntax error not
+         handled by the grammar)
+
+                                  10/13
+                                  -----
+lib/readline/readline.c
+       - new internal variable, _rl_bind_stty_chars; if non-zero, bind the
+         terminal special characters to readline equivalents at startup
+       - change readline_default_bindings() and reset_default_bindings() to
+         understand _rl_bind_stty_chars
+
+lib/readline/rlprivate.h
+       - new extern declaration for _rl_bind_stty_chars
+
+lib/readline/rltty.c
+       - change rl_prep_terminal to add support for _rl_bind_stty_chars
+
+                                  10/15
+                                  -----
+lib/readline/bind.c
+       - new bindable variable, `bind-tty-special-chars', bound to value of
+         _rl_bind_stty_chars
+
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - documented new readline variable `bind-tty-special-chars'
+
+builtins/pushd.def
+       - make the first check for option `--' skip the rest of option
+         checking
+
+                                  10/16
+                                  -----
+lib/readline/shell.c
+       - change sh_set_lines_and_columns to prefer setenv, which has
+         predictable memory allocation behavior, to putenv, which does not
+
+                                  10/19
+                                  -----
+variables.c
+       - change push_exported_var so that a tempenv variable has to have the
+         export attribute set (which they all do -- something to look at) and
+         the `propagate' attribute set to be propagated down to the next
+         scope
+
+execute_cmd.c
+       - change execute_builtin so that if CMD_COMMAND_BUILTIN is set in the
+         passed flags argument, call pop_scope with a value that says the
+         builtin is not special, since `command' means that preceding variable
+         assignments don't persist in the environment.  Fixes problem with
+         variable assignments preceding command preceding special builtin
+         keeping those variable assignments around (when in posix mode)
+
+                                  10/20
+                                  -----
+lib/sh/shquote.c
+       - new function, sh_mkdoublequoted, brackets a given string with
+         double quotes and returns a new string.  Flags argument, if non-
+         zero, means to quote embedded double quotes with backslashes
+
+externs.h
+       - new extern declaration for sh_mkdoublequoted
+
+parse.y
+       - use sh_mkdoublequoted after calling localeexpand()
+
+lib/sh/strtrans.c
+       - change ansicstr to understand that  (flags & 4) != 0 means to remove
+         backslash from unrecognized escape sequences
+
+general.c
+       - fix logic problem in assignment() that caused non-variable-starter
+         characters to be allowed, resulting in things like `1=xxx' creating
+         a variable `1' in the hash table
+
+                                  10/21
+                                  -----
+bashline.c
+       - don't call programmable_completions with an assignment statement
+         argument
+
+                                  10/22
+                                  -----
+lib/readline/rltty.c
+       - in prepare_terminal_settings, turn echoing on (readline_echoing_p)
+         if get_tty_settings fails because the input is not a terminal
+
+                                  10/24
+                                  -----
+lib/readline/util.c
+       - include rlmbutil.h for multibyte definitions
+       - new function, _rl_walphabetic, wide char version of rl_alphabetic
+
+lib/readline/mbutil.c
+       - new function, _rl_char_value(buf, ind), returns value of (possibly
+         multibyte) character at buf[ind]
+
+lib/readline/rlmbutil.h
+       - extern defines for _rl_walphabetic and _rl_char_value for when
+         multibyte chars are not being used
+       - new wrapper definitions for _rl_find_next_mbchar (MB_NEXTCHAR) and
+         _rl_find_prev_mbchar (MB_PREVCHAR) that try to avoid unneeded
+         function calls
+
+lib/readline/text.c
+       - fix rl_foward_word to work with multibyte characters (or in a
+         multibyte locale) using above utility functions
+       - fix rl_backward_word to work with multibyte characters (or in a
+         multibyte locale) using above utility functions
+
+                                  10/26
+                                  -----
+parse.y
+       - fix parse_matched_pair so that it doesn't swallow \<newline> when
+         parsing a $'...' construct (call shell_getc with different arg)
+
+                                  10/28
+                                  -----
+lib/glob/glob.c
+       - after some (compiled-in) threshold, glob_vector will stop using
+         alloca to allocate `struct globval's and will switch to using
+         malloc, with appropriate cleanup before returning
+
+subst.c
+       - don't expand tildes after `=' in expand_word_internal, even if the
+         W_TILDEEXP flag is set, unless it's the first tilde in a word
+         marked W_ASSIGNMENT
+
+                                  10/31
+                                  -----
+lib/readline/text.c
+       - make sure rl_point doesn't go below 0 in rl_delete_horizontal_space
+         (from SUSE, but not sent in)
+
+shell.c
+       - make sure shell_is_restricted skips over a single leading `-' in
+         the shell name (from SUSE, but not sent in)
+
+lib/readline/display.c
+       - disable `fast redisplay' at the end of the line if in a locale that
+         supports multibyte characters (from SUSE, but not sent in)
+
+lib/readline/histexpand.c
+       - fix a problem with finding the delimiter of a `?' substring when
+         compiled for multibyte characters (from SUSE, but not sent in)
+
+                                  11/1
+                                  ----
+lib/readline/display.c
+       - correct some assignments to _rl_last_c_pos:  when in a multibyte
+         locale, it's used as an absolute cursor position; when not using
+         multibyte characters, it's a buffer offset.  I should have caught
+         this when the multibyte character support was donated
+
+                                  11/5
+                                  ----
+general.c
+       - change `assignment()' to accept `+=' assignment operator
+
+arrayfunc.[ch]
+       - bind_array_variable and assign_array_element both take a new `flags'
+         argument
+       - assign_array_var_from_string, assign_array_from_string, and
+         assign_array_var_from_word_list now all take a new `flags' argument
+       - change assign_array_var_from_word_list to understand how to append
+         to an array variable
+       - change assign_array_var_from_string to understand how to append
+         to an array variable.  It does not unset the previous value if
+         appending, allowing both old values to be changed and new ones to
+         be added
+
+subst.h
+       - new flag #defines to use for evaluating assignment statements
+
+{subst,variables}.c, builtins/{declare,read}.def
+       - change callers of assign_array_element and bind_array_variable
+       - change do_compound_assignment to understand assignment flags
+       - change do_assignment_internal to set assignment flags and pass them
+         to underlying functions
+
+pcomplete.c,builtins/{declare,read}.def
+       - fix callers of assign_array_var_from_string, assign_array_var_from_word_list
+
+variables.[ch]
+       - make_variable_value now takes a new `flags' argument
+       - make_variable_value now understands how to append to a particular
+         variable, using the old value
+       - bind_variable_value now takes a new `flags' argument
+       - change make_variable_value to understand ASS_APPEND flag
+       - bind_variable now takes a new `flags' argument
+       - bind_variable_internal now takes a new `flags' argument
+
+arrayfunc.c
+       - change callers of make_variable_value to add flags arg
+
+builtins/declare.def
+       - change callers of bind_variable_value to add flags arg
+
+{execute_cmd,mailcheck,pcomplete,shell,subst,variables}.c,parse.y
+builtins/{cd,command,declare,getopts,read,set,setattr}.def
+       - change callers of bind_variable to add flags arg
+
+variables.c
+       - change callers of bind_variable_internal
+       - change bind_variable_internal to pass assignment flags on to
+         make_variable_value
+       - change assign_in_env to treat `var+=value' like `var=value'
+
+arrayfunc.c
+       - break code that actually constructs the new value and assigns it
+         to a particular array index out into a new functions:
+         bind_array_var_internal.  This fakes out make_variable_value by
+         passing a dummy SHELL_VAR * so it can do proper appending and other
+         += processing
+       - changes to assign_array_var_from_string to accept and process as if
+         they were `standalone' assignment statements array assignment words
+         of the form [ind]+=val
+
+                                  11/7
+                                  ----
+builtins/declare.def
+       - added support for `declare [flags] var+=value'.  `Flags' are applied
+         before the assignment is performed, which has implications for things
+         like `-i' -- if -i is supplied, arithmetic evaluation and increment
+         will be performed
+
+builtins/setattr.def
+       - add support for `+=' assignment for rest of `assignment builtins':
+         export, readonly
+
+                                  11/12
+                                  -----
+lib/readline/display.c
+       - make sure prompt_physical_chars and prompt_invis_chars_first_line
+         are reset to 0 if the prompt string passed to rl_expand_prompt is
+         NULL or empty
+
+                                  11/14
+                                  -----
+{configure,config.h}.in
+       - check for `raise', define HAVE_RAISE if available
+
+lib/intl/dcigettext.c
+       - make sure `raise' is defined if HAVE_RAISE is not before
+         eval-plurah.h is included
+
+lib/malloc/trace.c
+       - put extern declaration for imalloc_fopen inside the MALLOC_TRACE
+         #ifdef
+
+                                  11/16
+                                  -----
+lib/intl/Makefile.in
+       - make sure SHELL is defined to cpp
+
+lib/intl/dcigettext.c
+       - make sure we use getcwd() even if HAVE_GETCWD is not defined after
+         including config.h; if SHELL is defined, #define HAVE_GETCWD
+
+                                  11/18
+                                  -----
+trap.[ch]
+       - new function, int signal_in_progress(int sig), returns TRUE if the
+         trap handler for signal SIG is currently executing
+
+                                  11/19
+                                  -----
+redir.c
+       - slightly change do_redirection_internal to set the close-on-exec
+         flag for file descriptors > 2 used to save file descriptors < 2
+         using explicit redirections (e.g., `exec 3>&1').  This keeps file
+         descriptors pointing to pipes from being left open but doesn't
+         change the shell's file descriptor semantics
+
+                                  11/20
+                                  -----
+doc/{bash.1,bashref.texi}
+       - correct some minor typos, forwarded from doko@debian.org
+
+                                  11/22
+                                  -----
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - documented detail that yank-last-arg and yank-nth-arg use the history
+         arg expansion code (and, as a result, are subject to restrictions
+         of the history-comment character)
+
+                                  11/23
+                                  -----
+execute_cmd.c
+       - changes so that BASH_COMMAND preserves its value into a DEBUG trap:
+         for commands, arithmetic for command expressions, select commands,
+         case commands, (( commands, [[ commands, simple commands
+
+                                  11/24
+                                  -----
+doc/{bash.1,bashref.texi}
+       - changed description of `set' builtin slightly so that it is clear
+         that only variables are displayed in posix mode and that read-only
+         variables can't be reset by simply sourcing the output of `set'
+
+lib/sh/strftime.c
+       - don't try to redefine `inline' if it's already defined
+
+                                  11/26
+                                  -----
+execute_cmd.c
+       - fix execute_function to check funcname_a after function execution,
+         since FUNCNAME can be changed or unset within a function
+
+                                  11/27
+                                  -----
+builtins/evalfile.c
+       - make same changes as 11/26, this time to _evalfile
+
+execute_cmd.c
+       - change execute_function to run the return trap after a function
+         completes execution even if the shell is compiled without DEBUGGER
+         defined
+
+trap.c
+       - change reset_or_restore_signal_handlers so that the RETURN trap is
+         not inherited by command substitution when DEBUGGER is not defined
+
+                                  11/30
+                                  -----
+lib/readline/misc.c
+       - fix memory leaks in _rl_free_history_entry and rl_maybe_replace_line
+         caused by not freeing `timestamp' member of history entry
+       - make sure timestamp is initialized to NULL in rl_maybe_save_line
+
+                                  12/1
+                                  ----
+execute_cmd.c
+       - fix execute_function so a function calling `return' will run the
+         RETURN trap, if one's defined
+
+doc/{bash.1,bashref.texi}
+       - fix description of RETURN trap in various places to indicate that it's
+         only inherited by shell functions if function tracing is on globally
+         or has been enabled for that function
+       - fix documentation to indicate that the DEBUG and RETURN traps are
+         inherited under the same conditions
+
+execute_cmd.c
+       - a function does not inherit the RETURN trap if a DEBUG trap is
+         currently running
+
+                                  12/2
+                                  ----
+lib/glob/xmbsrtowcs.c
+       - change xmbsrtowcs to handle the one case where malloc can fail
+         (though it should not matter) -- don't try to free a null pointer
+
+                                  12/9
+                                  ----
+subst.c
+       - fix get_var_and_type to handle var[@], where `var' is a scalar
+         variable, identically to var -- all calling expansions can now
+         handle var[@] like var.  Bug reported by agriffis@gentoo.org
+
+                                  12/10
+                                  -----
+lib/readline/bind.c
+       - make new-style "\M-x" keybindings obey `convert-meta' settings
+         (bug reported by twaugh@redhat.com)
+
+                                  12/14
+                                  -----
+builtins/set.def
+       - added description of `-' option to help text
+
+builtins/shopt.def
+       - fix bug that caused `gnu_errfmt' to not be compiled in unless
+         READLINE is defined
+
+                                  12/16
+                                  -----
+subst.c
+       - fixed a typo in string_extract_verbatim in first call to MBLEN
+         (used `slen - 1' instead of `slen - i')
+
+                                  12/17
+                                  -----
+subst.c
+       - avoid some calls to strlen if the value is only being used for
+         ADVANCE_CHAR and MB_CUR_MAX == 1 (since ADVANCE_CHAR doesn't need
+         it unless multibyte characters are possible)
+       - change string_extract_verbatim so it takes the length of the string
+         as a parameter, so we don't have to recompute the length of the same
+         string over and over again when doing word splitting (that kills if
+         it's a long string)
+
+                                  12/18
+                                  -----
+subst.c
+       - in string_list_dollar_star, make sure to null-terminate the
+         separator if the character is longer than one byte
+
+                                  12/22
+                                  -----
+doc/{bash.1,bashref.texi}
+       - changed text in quoting section explaining that double quotes do
+         not prevent history expansion from taking place, and that backslashes
+         escaping ! are not removed
+
+                                  12/28
+                                  -----
+shell.c
+       - set gnu_error_format to 1 if running under emacs.  This should allow
+         the emacs `next-error' stuff to work, at least for interactive shells
+
+parse.y
+       - change yy_stream_get to set interrupt_immediately before calling
+         getc_with_restart when the shell is interactive.  This avoids the
+         synchronization problem caused by the call to QUIT in read_a_line,
+         which results in the first character after a SIGINT/^C to be
+         dropped
+
+                                  12/30
+                                  -----
+builtins/mkbuiltins.c
+       - changes to write long documentation to arrays as a single string by
+         default, rather than an array of strings -- enabled by default
+       - new option, -S, to restore old behavior of writing multiple strings
+         for long documentation
+       - changes to avoid filenames written when the separate-filenames option
+         (-H) has been supplied being run through gettext
+
+configure.in
+       - new cofiguration option, --enable-single-help-strings (on by default),
+         causes help text to be stored as a single string (or smaller set than
+         one string per line)
+
+builtins/Makefile.in
+       - pass `-S' to mkbuiltins if single-help-strings is turned off
+
+doc/bashref.texi
+       - documented new `single-help-strings' configure option
+
+                                1/3/2005
+                                --------
+jobs.c
+       - make wait_for return a non-zero status if the job or processed
+         waited for is suspended.  Returns 128 + stop signal.  This fixes
+         the problem with `echo one && sleep 5 && echo two' displaying
+         `two' after the sleep is suspended
+
+                                   1/5
+                                   ---
+print_cmd.c
+       - change indirection_level_string so the code duplicates the first
+         character of $PS4 to indicate the indirection level, rather than
+         the first byte
+
+                                   1/8
+                                   ---
+variables.c
+       - new special variable hook function for COMP_WORDBREAKS; sets
+         rl_completer_word_break_characters back to NULL when the variable
+         is unset
+       - change bind_variable_value to understand dynamic variables with
+         assign_function set, and handle them correctly.  If the variable is
+         being appended to, use make_variable_value to create the new
+         value
+       - change bind_variable_internal to understand dynamic variables with
+         assign_function set, and handle them the same way
+       - RANDOM and LINENO now get the integer attribute, so appending works
+         as expected
+       - ditto for HISTCMD, MAILCHECK, OPTIND
+
+lib/readline/display.c
+       - change _rl_make_prompt_for_search to set prompt_physical_chars
+         appropriately
+       - rl_save_prompt and rl_restore_prompt save and restore
+         prompt_prefix_length
+       - change redraw_prompt to use rl_save_prompt and rl_restore_prompt
+       - change rl_restore_prompt to set the `save' variables back to
+         NULL/0 so code can check whether or not the prompt has been saved
+       - change rl_message and rl_clear_message to save and restore the
+         prompt if the caller has not already done it (using a simple
+         semaphore-like variable)
+       - change rl_message to call expand_prompt, so that local_prompt and
+         local_prompt prefix are set before calling the redisplay functions,
+         in case the prompt is longer than a screenwidth (fixes bug
+         reported to debian by epl@unimelb.edu.au)
+
+lib/readline/doc/rltech.texi
+       - make sure to note that rl_save_prompt should be called before
+         rl_message, and rl_restore_prompt before rl_clear_message
+
+pcomplete.c
+       - make sure to save and restore the parser state around the call to
+         execute_shell_function in gen_shell_function_matches.  Fixes bug
+         reported by a050106.1.keeLae3x@captaincrumb.com (cute)
+
+lib/readline/readline.c
+       - fix _rl_dispatch_subseq in the case where we're recursing back up
+         the chain (r == -2) and we encounter a key shadowed by a keymap,
+         but originally bound to self-insert.  Calling rl_dispatch with
+         ANYOTHERKEY as the first argument will call rl_insert, but with
+         ANYOTHERKEY (256) as the char to insert.  Use the shadow keymap
+         and set things up to dispatch to rl_insert with the shadowed key
+         as the argument.  Fixes the bug reported by Thomas Glanzmann
+         (sithglan@stud.uni-erlangen.de)
+
+                                  1/13
+                                  ----
+command.h
+       - new word flag: W_HASQUOTEDNULL
+
+make_cmd.c
+       - new function to allocate a WORD_DESC * without doing anything with a
+         containing string:  alloc_word_desc
+
+make_cmd.h
+       - extern declaration for alloc_word_desc
+
+dispose_cmd.c
+       - new function to just free a WORD_DESC * without freeing the contained
+         string:  dispose_word_desc
+
+dispose_cmd.h
+       - extern declaration for dispose_word_desc
+
+subst.c
+       - change some places to use alloc_word_desc
+       - make same changes to word_list_quote_removal as were made to
+         word_list_split
+       - set W_HASQUOTEDNULL when a word is created with w->word[0] ==
+         CTLNUL and w->word[1] == '\0'
+
+subst.c
+       - parameter_brace_expand_word now returns a WORD_DESC * -- changed
+         callers to understand
+       - parameter_brace_expand_indir now returns a WORD_DESC * -- changed
+         callers to understand
+       - parameter_brace_expand_rhs now returns a WORD_DESC * -- changed
+         callers to understand
+       - remove W_HASQUOTEDNULL from a word's flags when remove_quoted_nulls
+         is called on the word's enclosed string
+
+                                  1/15
+                                  ----
+subst.c
+       - param_expand now returns a WORD_DESC * -- changed callers to
+         understand
+       - parameter_brace_expand now returns a WORD_DESC * -- changed
+         callers to understand
+       - in expand_word_internal, only call remove_quoted_nulls after a word
+         is returned with W_HASQUOTEDNULL
+       - changes to pass W_HASQUOTEDNULL flag out of expand_word_internal;
+         changed callers to call remove_quoted_nulls only if return value has
+         W_HASQUOTEDNULL set.  This is a mostly-complete fix for the
+         long-standing CTLNUL confusion between a quoted null expansion and
+         the expansion of a variable with a literal '\177' in its value
+       - change string_list_dollar_at to compute the separator character the
+         same way as string_list_dollar_star:  using the already-computed
+         values generated in setifs()
+       - when expanding unquoted $*, if $IFS is empty, check whether or not
+         we're eventually going to split the results (e.g., on the rhs of an
+         assignment statement) and concatenate the positional parameters as
+         if the expansion were within double quotes if we're not going to
+         split
+
+tests/iquote.tests
+       - test cases based on old bug reports about the quoted-null vs. 0177
+         problem the recent code fixes
+
+                                  1/16
+                                  ----
+dispose_cmd.c
+       - set w->word to 0 before putting a WORD_DESC * back in the cache in
+         dispose_word_desc; changed callers to delete those assignments
+
+variables.c
+       - change assign_random and get_random_value so that the random number
+         generator only gets re-seeded once in a subshell environment, and
+         assigning a value to RANDOM counts as seeding the generator.  This
+         makes the sequences a little more predictable
+
+                                  1/20
+                                  ----
+lib/readline/history.c
+       - fix replace_history_entry, remove_history to return NULL if
+         passed index is < 0
+
+                                  1/22
+                                  ----
+lib/sh/netconn.c
+       - fix isnetconn() to understand that getpeername can return ENOTCONN
+         to indicate that an fd is not a socket
+
+configure.in
+       - set BUILD_DIR to contain backslashes to escape any spaces in the
+         directory name -- this is what make will accept in targets and
+         prerequisites, so it's better than trying to use double quotes
+       - set SIZE to the appropriate value if some cross-compiling tool
+         chain is being used; `size' by default (can be overridden by
+         SIZE environment variable)
+
+Makefile.in
+       - use $(SIZE) instead of size; set SIZE from configure
+
+                                  1/31
+                                  ----
+arrayfunc.c
+       - in array_value_internal, return NULL right away if the variable's
+         value is NULL, instead of passing a null string to add_string_to_list
+
+                                   2/1
+                                   ---
+jobs.h
+       - new struct to hold stats and counters for child processes and jobs
+       - change some uses of global and static variables to use members of
+         new struct (struct jobstats)
+
+                                   2/2
+                                   ---
+
+jobs.[ch]
+       - change PRUNNING to PALIVE
+       - new define INVALID_JOB
+       - new macro get_job_by_jid(ind), currently expands to jobs[ind]
+       - new define J_JOBSTATE, operates on a JOB * like JOBSTATE operates on
+         a job index
+       - new function, reset_job_indices, called from delete_job if
+         js.j_lastj or js.j_firstj are removed
+       - change various functions to keep counters and stats in struct jobstats
+
+pcomplete.c, builtins/common.c, builtins/{exit,fg_bg,jobs,kill,wait}.def
+       - change global variables (e.g., job_slots) to struct members
+         (e.g., js.j_jobslots)
+       - use INVALID_JOB define where appropriate
+       - use get_job_by_jid and J_JOBSTATE where appropriate
+
+trap.c
+       - change reset_or_restore_signal_handler to not free the exit trap
+         string if the function pointer is reset_signal, which is used when
+         the trap strings shouldn't be freed, like in command substitution
+
+                                   2/4
+                                   ---
+jobs.c
+       - new function, realloc_jobs_list, copies jobs array to newly-allocated
+         memory shrinking (or growing) size to have next multiple of JOB_SLOTS
+         greater than js.j_njobs
+       - change compact_jobs_list to just call reap_dead_jobs and then
+         realloc_jobs_list, simplifying it considerably
+       - discard_pipeline now returns `int':  the number of processes freed
+       - slightly changed the logic deciding whether or not to call
+         compact_jobs_list:  now non-interactive shells will compact the
+         list if it reaches MAX_JOBS_IN_ARRAY in size
+
+parse.y
+       - move test for backslash-newline after pop_string in shell_getc so
+         that things like
+
+               ((echo 5) \
+                (echo 6))
+
+         work right
+
+                                   2/8
+                                   ---
+jobs.h
+       - new structs for holding status of exited background processes, as
+         POSIX specifies
+       - new job flag: J_ASYNC
+
+jobs.c
+       - new functions to manipulate struct holding status of exited
+         background processes
+       - new members in struct jobstats to hold pointer to last created job
+         and last created asynchronous job
+       - initialize js.c_childmax in initialize_job_control
+       - if the `async' arg to stop_pipeline is non-null, set the J_ASYNC
+         flag in the job struct
+       - set js.j_last_made_job and js.j_last_asynchronous_job in
+         stop_pipeline
+       - new function: find_last_proc, returns the PROCESS * to the last proc
+         in a job's pipeline
+       - changed find_last_pid to call find_last_proc
+       - change delete_job to call bgp_add on the last proc of the job being
+         deleted
+       - change delete_all_jobs and wait_for_background_pids to call bgp_clear
+
+                                   2/9
+                                   ---
+jobs.c
+       - change wait_for_single_pid to look for pid in bgpids.list (using
+         bgp_search()) if find_pipeline returns NULL
+
+                                  2/10
+                                  ----
+support/shobj-conf
+       - change the solaris-gcc stanza so that it auto-selects the appropriate
+         options for ld depending on which `ld' gcc says it's going to run
+
+                                  2/11
+                                  ----
+jobs.h
+       - add support for PS_RECYCLED as a process state, add PRECYCLED macro
+         to test it.  Change PALIVE and PRUNNING macros to not count processes
+         in PS_RECYCLED state
+
+execute_cmd.c
+       - restore use of last_pid as sentinel value; use NO_PID as sentinel
+         only if RECYCLES_PIDS is defined
+
+jobs.c
+       - change find_job to return a pointer to the PROCESS the desired pid
+         belongs to, analogous to find_pipeline returning pointer to JOB
+       - change find_job callers to add extra argument
+       - change running_only arguments to find_pipeline and find_job to
+         alive_only, since we don't want recycled pids returned here and it
+         better describes the result
+       - new function find_process, calls find_pipeline and searches the
+         returned pipeline for the PROCESS * describing the desired pid
+       - in make_child, if fork() returns the same pid as the value of
+         last_asynchronous_pid when RECYCLES_PIDS is defined, avoid pid
+         aliasing by resetting last_asynchronous_pid to 1
+       - use PRUNNING instead of child->running, since we, for the most
+         part, don't want to consider recycled pids (e.g., in make_child())
+       - call find_process instead of find_pipeline in waitchld()
+       - use PEXITED(p) instead of testing p->running == PS_DONE
+       - in make_child, call bgp_delete to remove a just-created pid from the
+         last of saved pid statuses
+       - in add_process, check whether or not pid being added is already in
+         the_pipeline or the jobs list (using find_process) and mark it as
+         recycled if so
+       - This set of fixes mostly came from Pierre Humblet
+         <pierre.humblet@ieee.org> to fix pid aliasing and reuse problems on
+         cygwin
+
+variables.c
+       - set $_ from the environment if we get it there, set to $0 by
+         default if not in env
+
+doc/{bashref.texi,bash.1}
+       - a couple of clarifying changes to the description of $_ based on
+         comments from Glenn Morris <gmorris+mail@ast.cam.ac.uk>
+
+                                  2/15
+                                  ----
+shell.c
+       - use strstr instead of strmatch when checking whether $EMACS contains
+         `term' -- simpler and faster
+
+                                  2/18
+                                  ----
+builtins/cd.def
+       - implement posix requirement that `pwd -P' set $PWD to a directory
+         name containing no symlinks
+       - add new function, setpwd(), just sets (and changes exported value)
+         of PWD
+
+doc/bashref.texi
+       - add note to posix mode section about pwd -P setting $PWD
+
+doc{bash.1,bashref.texi}
+       - added note that BASH_ARGC and BASH_ARGV are only set in extended
+         debug mode
+       - expand description of extdebug option to include everything changed
+         by extended debug mode
+
+                                  2/19
+                                  ----
+pathexp.h
+       - new flag macro, FNMATCH_IGNCASE, evaluates to FNM_CASEFOLD if the
+         match_ignore_case variable is non-zero
+
+execute_cmd.c
+       - new variable, match_ignore_case
+       - change call to strmatch() in execute_case_command so it includes
+         FNMATCH_IGNCASE
+
+test.c
+       - change call to strmatch() in patcomp() so that pattern matching
+         calls for [[ ... ]] obey the match_ignore_case variable
+
+lib/sh/shmatch.c
+       - if match_ignore_case is set, enable REG_ICASE in the regexp match
+         flags
+
+builtins/shopt.def
+       - new settable option, `nocasematch', controls the match_ignore_case
+         variable.  Currently alters pattern matching for case and [[ ... ]]
+         commands (==, !=, and =~ operators)
+
+doc/{bashref.texi,bash.1}
+       - updated descriptions of [[ and case to include reference to
+         nocasematch option
+
+                                  2/22
+                                  ----
+builtins/mkbuiltins.c
+       - add `times' to the list of posix special builtins
+
+                                  2/23
+                                  ----
+builtins/cd.def
+       - posix mode no longer turns on effect of -P option on $PWD if a
+         directory is chosen from CDPATH
+
+doc/bashref.texi
+       - clarified that in posix mode, reserved words are not alias expanded
+         only in a reserved word context
+       - removed item about cd, $CDPATH, and -P from posix mode section
+
+                                  2/24
+                                  ----
+builtins/reserved.def
+       - minor cleanups to the description of `if'
+
+                                   3/2
+                                   ---
+subst.c
+       - change list_string and get_word_from_string to explicitly treat an
+         IFS character that is not space, tab, or newline *and any adjacent
+         IFS white space* as a single delimiter, as SUSv3/XPG6 says
+
+builtins/read.def
+       - check whether or not the number of fields is exactly the same as
+         the number of variables instead of just assigning the rest of the
+         line (minus any trailing IFS white space) to the last variable.
+         This parses a field and checks whether or not it consumes all of
+         the input (including any trailing field delimiters), falling back
+         to the previous behavior if it does not.  This is what POSIX.2
+         specifies, I believe (and the consensus of the austin-group list).
+         This requires a few tests in read.tests to be changed: backslashes
+         escaping IFS whitespace characters at the end of input cause the
+         whitespace characters to be preserved in the value assigned to the
+         variable, and the trailing non-whitespace field delimiter issue
+
+                                   3/7
+                                   ---
+configure.in
+       - add -D_POSIX_SOURCE to the LOCAL_CFLAGS for Interix
+
+                                   3/8
+                                   ---
+bashline.c
+       - make bash_directory_expansion a void function, since it doesn't have
+         any return value
+
+                                   3/9
+                                   ---
+builtins/read.def
+       - when testing for a pipe, use `fd' instead of hard-coding 0, since we
+         can read from other file descriptors now
+
+lib/sh/zread.c
+       - in zsyncfd, only set lind and lused to 0 if the lseek succeeds.
+         If the lseek fails, we might steal input from other programs, but
+         a failed lseek won't cause us to erroneously discard input
+
+                                  3/11
+                                  ----
+builtins/evalstring.c
+       - don't allow parse_and_execute to short-circuit and call exec() if
+         the command's return value is being inverted
+
+                                  3/15
+                                  ----
+builtins/printf.def
+       - new macro PC to call putchar and increment number of chars printed -
+         fixes bug in computation of value for %n format char
+       - `tw' is now a global var so printstr can modify it using PC()
+       - convert PF macro to use asprintf into a local buffer
+         Preparation for printf -v var
+       - add code to add the text printed to a `variable buffer' if -v option
+         supplied.  The buffer grows as needed
+       - printf now takes a `-v var' option to put the output into the variable
+         VAR rather than sending it to stdout.  It does not:
+               print partial output on error (e.g., format string error)
+               handle NULs in the variable value, as usual
+
+                                  3/16
+                                  ----
+parse.y
+       - fix bug in prompt string decoding that caused a core dump when PS1
+         contained \W and PWD was unset (null pointer deref)
+
+builtins/printf.def
+       - changed -v var behavior so it stores partial output into the named
+         variable upon an error
+
+                                  3/24
+                                  ----
+lib/readline/bind.c
+       - bool_to_int now takes a `const char *' argument
+
+support/{printenv,recho,zecho}.c
+       - include config.h
+       - include "bashansi.h" for appropriate extern function declarations
+
+configure.in
+       - on MacOS X 10.4, compensate for loader not allowing static library
+         to override existing system dynamic library when compiling -dynamic
+         (affects readline and history libraries); so use absolute pathname
+         instead of -lreadline as library name
+
+lib/glob/{glob,sm_loop,smatch}.c
+       - make sure to cast arguments to (char *)  or (unsigned char *) as
+         appropriate to avoid gcc4 warnings
+
+lib/glob/smatch.c
+       - collsym (single-byte version) now takes a (CHAR *) first argument to
+         match callers; cast argument to strncmp appropriately
+
+lib/sh/snprintf.c
+       - fix ldfallback and dfallback to handle width and precision specs in
+         the format passed to sprintf()
+       - fix STAR_ARGS macro to deal with negative field widths and precisions
+
+                                  3/25
+                                  ----
+builtins/printf.def
+       - since a negative precision in a "x.x[fFgGeE]" format specifier should
+         be allowed but treated as if the precision were missing, let it
+         through
+
+lib/sh/snprintf.c
+       - fix * code to deal with a negative precision by treating it as if
+         the `.' and any digit string in the precision had not been specified
+       - fix format parsing code to deal with a negative inline precision,
+         e.g., "%4.-4f" by treating it as if the `'. and any digit string in
+         the precision had not been specified
+       - a `+' in a format specifier should only act as a flag if it comes
+         before a `.' (otherwise it is ignored)
+
+lib/readline/vi_mode.c
+       - new function, rl_vi_rubout, to rl_rubout as rl_vi_delete is to
+         rl_delete; saves deleted text for possible reinsertion as with any
+         vi-mode `text modification' command (fixes problem with `X' reported
+         by beat.wieland@gmx.ch)
+
+lib/readline/vi_keymap.c
+       - bind `X' in vi command mode to rl_vi_rubout
+
+lib/readline/funmap.c
+       - add a bindable `vi-rubout' command, runs rl_vi_rubout
+
+lib/readline/text.c
+       - rewrote internals of _rl_rubout_char to make structure cleaner
+
+lib/readline/{complete,text}.c
+       - changed code to remove #ifdef HANDLE_MULTIBYTE where possible
+
+                                  3/28
+                                  ----
+lib/readline/examples/rl.c
+       - include <sys/stat.h> instead of posixstat.h if READLINE_LIBRARY not
+         defined
+
+subst.c
+       - fix mbstrlen to treat invalid multibyte sequences as sequences of
+         single-byte characters
+
+                                   4/8
+                                   ---
+configure.in
+       - default SIZE to `:' if cross-compiling and an appropriate size for
+         the target is not found
+
+                                  4/11
+                                  ----
+subst.c
+       - change match_upattern and match_wpattern to check whether or not the
+         supplied pattern matches anywhere in the supplied string, prefixing
+         and appending the pattern with `*' if necessary.  If it doesn't we
+         can short-circuit immediately rather than waste time doing up to
+         N-1 unsuccessful calls to strmatch/wcsmatch (which kills for long
+         strings, even if the pattern is short)
+
+                                  4/12
+                                  ----
+configure.in
+       - make sure the special case for MacOS X 10.4 only kicks in if the
+         `--with-installed-readline' option isn't supplied
+
+lib/readline/{callback,readline,signals}.c
+       - make sure rl_prep_term_function and rl_deprep_term_function aren't
+         dereferenced if NULL (as the documentation says)
+
+builtins/mkbuiltins.c
+       - don't bother with the special HAVE_BCOPY code; just use straight
+         assignments
+
+builtins/ulimit.def
+       - use _POSIX_PIPE_BUF in pipesize() if it's defined and PIPE_BUF is
+         not
+
+                                  4/13
+                                  ----
+execute_cmd.c
+       - add cm_function_def to the list of control structures for which
+         child processes are forked when pipes come in or out
+
+                                  4/14
+                                  ----
+builtins/read.def
+       - make sure the ^As added for internal quoting are not counted as
+         characters read when -n is supplied
+
+                                  4/20
+                                  ----
+redir.c
+       - fix redir_open so that the repeat open on failure that AFS support
+         adds restores the correct value of errno for any error message
+
+                                  4/26
+                                  ----
+
+Makefile.in
+       - make sure mksignames and mksyntax are invoked with the $(EXEEXT)
+         extension
+
+                                  4/28
+                                  ----
+lib/readline/readline.h
+       - new state variable: RL_STATE_CALLBACK, means readline is using the
+         callback interface
+
+lib/readline/callback.c
+       - set RL_STATE_CALLBACK in rl_callback_handler_install, unset in
+         rl_callback_handler_remove
+
+                                  4/29
+                                  ----
+config-top.h
+       - DONT_REPORT_SIGPIPE is now on by default, since it apparently
+         interferes with scripts
+
+configure.in
+       - arrange things so PGRP_PIPE is defined on Linux-2.4+ and version 3
+         kernels (ones that apparently schedule children to run before their
+         parent)
+
+                                  4/30
+                                  ----
+builtins/caller.def
+       - add call to no_options, so it can handle `--' option
+
+doc/{bash.1,bashref.texi}
+       - note explicitly that test, :, true, and false don't understand --
+         as meaning the end of options
+
+                                   5/7
+                                   ---
+support/shobj-conf
+       - darwin 8 needs the same LDFLAGS setting as darwin 7
+
+parse.y
+       - in save_parser_state, make sure we cast the return value from
+         xmalloc() to the right type
+       - remove casts to (char *) in calls to yyerror()
+
+lib/readline/signals.c
+       - make SIGQUIT and SIGALRM code conditional on their definition
+       - use raise() to send a signal if we don't have kill()
+
+lib/readline/display.c
+       - some MS-DOS and MINGW changes from the cygwin and mingw folks
+
+config.h.in
+       - add HAVE_PWD_H for <pwd.h>
+       - add HAVE_FCNTL, HAVE_KILL for respective system calls
+       - add HAVE_GETPW{ENT,NAM,UID} for passwd functions
+
+configure.in
+       - add check for <pwd.h>
+       - add checks for fcntl, kill system calls
+       - add checks for getpw{ent,nam,uid} C library functions
+       - pass a flag indicating we're cross compiling through to
+         CFLAGS_FOR_BUILD in Makefile.in
+
+lib/readline/complete.c
+       - guard inclusion of <pwd.h> with HAVE_PWD_H
+       - don't provide a missing declaration for getpwent if we don't have it
+       - guard calls to {get,end}pwent with HAVE_GETPWENT
+
+lib/readline/shell.c
+       - guard inclusion of <pwd.h> with HAVE_PWD_H
+       - guard inclusion of <fcntl.h> with HAVE_FCNTL_H
+       - don't provide a missing declaration for getpwuid if we don't have it
+       - guard calls to getpwuid with HAVE_GETPWUID
+       - don't bother with body of sh_unset_nodelay_mode if we don't have
+         fcntl
+
+lib/tilde/tilde.c
+       - guard inclusion of <pwd.h> with HAVE_PWD_H
+       - guard calls to getpw{nam,uid} with HAVE_GETPW{NAM,UID}
+       - guard calls to {get,end}pwent with HAVE_GETPWENT
+
+Makefile.in,builtins/Makefile.in
+       - @CROSS_COMPILE@ is substituted into CFLAGS_FOR_BUILD (equal to
+         -DCROSS_COMPILING if bash is being cross-compiled)
+
+                                   5/9
+                                   ---
+aclocal.m4
+       - print version as `0.0' in RL_LIB_READLINE_VERSION if the
+         `rl_gnu_readline_p' variable isn't 1 (accept no imitations)
+
+                                  5/11
+                                  ----
+lib/readline/rlprivate.h
+       - definition of a readline `search context', to be use for incremental
+         search initially and other types of search later.  Original from
+         Bob Rossi as part of work on incremental searching problems when
+         using callback interface
+
+lib/readline/isearch.c
+       - functions to allocate and free search contexts
+       - function to take a search context and a character just read and
+         `dispatch' on it:  change search parameters, add to search string,
+         search further, etc.
+       - isearch is now completely context-driven:  a search context is
+         allocated and passed to the rest of the functions
+
+                                  5/12
+                                  ----
+lib/readline/isearch.c
+       - an additional `isearch cleanup' function that can be called from
+         the callback interface functions when the search is to be terminated
+       - an additional `isearch callback' function that can be called from
+         rl_callback_read_char when input is available
+       - short-circuit from rl_search_history after initialization if
+         the callback interface is being used
+
+lib/readline/callback.c
+       - in rl_callback_read_char(), if RL_STATE_ISEARCH is set, call
+         _rl_isearch_callback to read the character and dispatch on it.
+         If RL_STATE_ISEARCH is unset when that call returns, and there is
+         input pending, call rl_callback_read_char() again so we don't
+         have to wait for new input to pick it up
+
+support/shobj-conf,configure.in
+       - add support for dragonfly bsd, the same as freebsd
+
+                                5/13-5/15
+                                ---------
+lib/readline/callback.c
+       - support for readline functions to `register' a function that will
+         be called when more input is available, with a generic data
+         structure to encapsulate the arguments and parameters.  Primarily
+         intended for functions that read a single additional character,
+         like quoted-insert
+       - support for callback code reading numeric arguments in a loop,
+         using readline state and an auxiliary variable
+       - support for callback code performing non-incremental searches using
+         the same search context struct as the isearch code
+
+lib/readline/{callback,display}.c
+       - if a callback function sets `_rl_redisplay_wanted', the redisplay
+         function will be called as soon as it returns
+
+lib/readline/input.c
+       - changes to _rl_read_mbchar to handle reading the null multibyte
+         character and translating it into '\0'
+
+lib/readline/misc.c
+       - break rl_digit_loop() into component functions that can be called
+         individually from the callback code more easily
+       - share some of the functions with rl_digit_loop1() in vi_mode.c
+
+lib/readline/readline.h
+       - change the version #defines to reflect readline 5.1
+
+lib/readline/search.c
+       - break code into smaller functions that can be composed to work with
+         the callback code more easily
+
+lib/readline/text.c
+       - in rl_quoted_insert(), don't mess around with the tty signals if
+         running in `callback mode'
+
+lib/readline/vi_mode.c
+       - changed set-mark, goto-mark, change-char, and char-search to work
+         when called by callback functions
+
+                                  5/17
+                                  ----
+
+lib/readline/rlprivate.h
+       - new struct declaration for a `reading key sequence' context
+
+lib/readline/readline.c
+       - new variable, _rl_dispatching_keymap, keeps track of which keymap
+         we are currently searching
+       - functions to allocate and deallocate contexts for reading multi-char
+         key sequences
+
+                                  5/18
+                                  ----
+lib/readline/rlprivate.h
+       - new struct defining a context for multiple-key key sequences (the
+         base case is escape-prefixed commands)
+
+lib/readline/readline.c
+       - change structure of _rl_dispatch_subseq to allow for callback code
+         to use it - rudimentary support for supporting the existing
+         recursion using a stack of contexts, each with a reference to the
+         previous
+       - fix so that ^G works when in callback mode
+
+lib/readline/callback.c
+       - call the appropriate multiple-key sequence callback if the state is
+         set
+
+                                  5/19
+                                  ----
+lib/readline/readline.c
+       - broke code from _readline_internal_char after call to rl_dispatch
+         out into separate function:  _rl_internal_char_cleanup, callable by
+         other parts of the code
+       - change _rl_internal_char_cleanup to unset _rl_want_redisplay after
+         it calls (*rl_redisplay_func)
+
+lib/readline/callback.c
+       - call _rl_internal_char_cleanup from rl_callback_read_char when
+         appropriate
+
+                                  5/24
+                                  ----
+lib/readline/callback.c
+       - use _rl_dispatch_callback and a chain of _rl_keyseq_contexts to
+         simulate the recursion used to decode multicharacter key sequences
+         (even things like ESC- as meta-prefix)
+       - call setjmp in rl_callback_read_char to give things like rl_abort
+         a place to jump, since the saved location in readline() will not
+         be valid
+       - keep calling _rl_dispatch_callback from rl_callback_read_char while
+         we are still decoding a multi-key key sequence
+       - keep calling readline_internal_char from rl_callback_read_char while
+         we are reading characters from a macro
+
+lib/readline/macro.c
+       - use a slightly different strategy upon encountering the end of a macro
+         when using the callback interface:  when the last character of a
+         macro is read, and we are reading a command, pop the macro off the    
+         stack immediately so the loop in rl_callback_read_char terminates
+         when it should
+
+lib/readline/readline.c
+       - if longjmp() is called and we end up at the saved location while
+         using the callback interface, just return -- don't go back into a
+         blocking read
+       - new function to dispose a chain of rl_keyseq_cxts
+       - only read new input in _rl_dispatch_callback if the KSEQ_DISPATCHED
+         flag is not set in the current keyseq context -- if it is, we are
+         traversing the chain back up and should use what we already saved
+       - use -3 as a magic value from _rl_dispatch_subseq to indicate that
+         we're allocating a new context and moving downward in the chain
+         (a special return value for the benefit of _rl_dispatch_callback)
+
+lib/readline/rlprivate.h
+       - new extern declaration for _rl_keyseq_chain_dispose
+
+                                   6/1
+                                   ---
+builtins/read.def
+       - fixed a bug that occurred when reading a set number of chars and
+         the nth char is a backslash (read one too many).  Bug reported by
+         Chris Morgan <chmorgan@gmail.com>
+
+execute_cmd.c
+       - fix execute_builtin so the `unset' builtin also operates on the
+         temporary environment in POSIX mode (as well as source and eval),
+         so that unsetting variables in the temporary environment doesn't
+         leave them set when unset completes.  Report by Eric Blake
+         <ebb9@byu.net>
+
+array.c
+       - fix from William Park for array_rshift when shifting right on an
+         empty array -- corrects calculation of array->max_index
+
+builtins/exec.def
+       - if an exec fails and the execfail option is set, don't call
+         restart_job_control unless the shell is interactive or job_control
+         is set
+
+jobs.c
+       - add a run-time check for WCONTINUED being defined in header files
+         but rejected with EINVAL by waitpid().  Fix from Maciej Rozycki
+         <macro@linux-mips.org>
+
+                                  6/20
+                                  ----
+bashhist.c
+       - make sure calls to sv_histchars are protected by #ifdef BANG_HISTORY
+       - ditto for calls to history_expand_line_internal
+
+                                  6/23
+                                  ----
+doc/bashref.texi
+       - remove extra blank lines in @menu constructs
+
+variables.c
+       - assign export_env to environ (extern char **) every time it changes
+         (mostly in add_to_export_env define), so maybe getenv will work on
+         systems that don't allow it to be replaced
+
+                                  6/29
+                                  ----
+bashline.c
+       - in bash_directory_completion_hook, be careful about not turning `/'
+         into `//' and `//' into `///' for benefit of those systems that treat
+         `//' as some sort of `network root'.  Fix from Eric Blake
+         <ebb9@byu.net>
+
+lib/readline/complete.c
+       - in to_print, do the right thing after stripping the trailing slash
+         from full_pathname: // doesn't turn into /, and /// doesn't become
+         //.  Fix from Eric Blake <ebb9@byu.net>
+
+                                  6/30
+                                  ----
+lib/malloc/trace.c
+       - include <unistd.h> if it's available for a definition of size_t
+
+jobs.c
+       - in wait_for, if a child process is marked as running but waitpid()
+         returns -1/ECHILD (e.g., when the bash process is being traced by
+         strace), make sure to increment c_reaped when marking the child as
+         dead
+       - in without_job_control, make sure to close the pgrp pipe after
+         calling start_pipeline
+
+                                   7/1
+                                   ---
+Makefile.in
+       - only remove pathnames.h when the other files created by running
+         configure are removed (e.g., Makefile).  Fix from William Park
+
+lib/sh/shquote.c
+       - since backslash-newline disappears when within double quotes, don't
+         add a backslash in front of a newline in sh_double_quote.  Problem
+         reported by William Park
+
+jobs.c
+       - in notify_of_job_status, don't print status messages about
+         terminated background processes unless job control is active
+
+bashhist.c
+       - new variable, hist_last_line_pushed, set to 0 in really_add_history
+         (used by `history -s' code)
+
+bashhist.h
+       - new extern declaration for history -s
+
+builtins/history.def
+       - don't remove last history entry in push_history if it was added by
+         a call to push_history -- use hist_last_line_pushed as a sentinel
+         and set it after adding history entry.  This allows multiple
+         calls to history -s to work right:  adding all lines to the history
+         rather than deleting all but the last.  Bug reported by Matthias
+         Schniedermeyer <ms@citd.de>
+       - pay attention to hist_last_line_pushed in expand_and_print_history()
+         so we don't delete an entry pushed by history -s
+
+                                   7/4
+                                   ---
+print_cmd.c
+       - fix print_arith_for_command to not print so many blanks between
+         expressions in ((...))
+
+command.h
+       - new word flag: W_DQUOTE.  Means word should be treated as if double
+         quoted
+
+make_cmd.c
+       - add W_DQUOTE to word flags in make_arith_for_expr
+
+parse.y
+       - add W_DQUOTE to word flags for (( ... )) arithmetic commands
+
+subst.c
+       - don't perform tilde expansion on a word with W_DQUOTE flag set
+       - don't perform process substitution on a word with W_DQUOTE flag set
+
+arrayfunc.c
+       - expand an array index within [...] the same way as an arithmetic
+         expansion between (( ... ))
+
+lib/readline/input.c
+       - use getch() instead of read() on mingw
+
+lib/readline/readline.c
+       - add a few key bindings for the arrow keys on mingw
+
+lib/readline/rldefs.h
+       - if on mingw, define NO_TTY_DRIVER
+
+lib/readline/rltty.c
+       - compile in the stub functions for _rl_{disable,restore}_tty_signals
+         if on mingw
+       - compile in stub function for rl_restart_output on mingw
+       - make sure enough functions and macros are defined to compile if
+         NO_TTY_DRIVER is defined (lightly tested - builds on MacOS X, at
+         least)
+
+                                   7/7
+                                   ---
+command.h
+       - add a `flags' member to the PATTERN_LIST structure
+
+make_cmd.c
+       - intialize the `flags' member of a PATTERN_LIST when it's created
+
+builtins/psize.c
+       - protect extern declaration of errno with usual #ifdef errno
+
+configure.in, variables.c
+       - changes for QNX 6.x
+
+                                   7/9
+                                   ---
+parse.y
+       - fix parse_matched_pair to handle single and double quoted strings
+         inside old-style command substitution (``) since they can each
+         quote the ` and embedded $-expansions.  Report by Eric Blake
+         <ebb9@byu.net>
+
+{configure,Makefile}.in
+       - TILDE_LIB is now substituted into Makefile by configure
+
+configure.in
+       - if configuring --with-installed-readline on cygwin, set TILDE_LIB
+         to the empty string to avoid multiply-defined symbols.  Cygwin
+         doesn't allow undefined symbols in dynamic libraries.  Report by
+         Eric Blake <ebb9@byu.net>
+
+                                  7/11
+                                  ----
+input.c
+       - in duplicate_buffered_stream, don't call free_buffered_stream if the
+         two buffered streams share the same b_buffer object (e.g., if they
+         had already been duplicated with a previous call).  Fixes Debian bug
+         reported by eero17@bigfoot.com
+
+                                  7/12
+                                  ----
+shell.c
+       - make set_shell_name more resistant to a NULL argument
+       - in bind_args, use < instead of != when counting the arguments and
+         making the arg list
+       - in main(), make sure arg_index is not initialized to a value greater
+         than argc
+
+                                  7/14
+                                  ----
+lib/readline/display.c
+       - in expand_prompt, don't set the location of the last invisible
+         char if the sequence is zero length  (\[\])
+
+                                  7/15
+                                  ----
+doc/{bash.1,bashref.texi}
+       - document that the shell uses $TMPDIR when creating temporary files
+
+                                  7/20
+                                  ----
+[bash-3.1-alpha1 frozen]
+
+                                  7/29
+                                  ----
+builtins/evalstring.c
+       - make sure that parse_and_execute saves and restores the value of
+         loop_level, so loops in sourced scripts and eval'd strings don't
+         mess up the shell's parser state
+
+bashline.c
+       - change command_subst_completion_function to suppress appending
+         any character to a unique completion, instead of a space, unless
+         the last word in the quoted command substitution completes to a
+         directory name.  In that case we append the expected slash
+
+                                   8/1
+                                   ---
+builtins/printf.def
+       - make sure variables are initialized if their values are tested later
+
+[bash-3.1-alpha1 updated and re-frozen]
+
+                                   8/2
+                                   ---
+variables.c
+       - make sure to call stifle_history with an `int' instead of an intmax_t.
+         Sometimes it makes a difference
+
+                                   8/3
+                                   ---
+[bash-3.1-alpha1 released]
+
+support/mksignames.c
+       - add `SIGSTKFLT' (RHE3)
+       - add `SIGXRES' (Solaris 9)
+
+                                   8/4
+                                   ---
+builtins/ulimit.def
+       - fix typo to make `x' the right option for locks
+       - add new options to short help synopsis
+
+variables.c
+       - use get_variable_value instead of direct reference to value_cell
+         in make_variable_value when appending to the current value, so
+         references to array variables without subscripts will be equivalent
+         to element 0
+
+lib/readline/text.c
+       - rewrote rl_change_case to correctly change the case of multibyte
+         characters where appropriate
+
+                                   8/5
+                                   ---
+configure.in
+       - remove call to obsolete macro AC_ACVERSION
+       - remove special calls to AC_CYGWIN and AC_MINGW32; AC_CANONICAL_HOST
+         takes care of those cases
+
+general.h
+       - include `chartypes.h' for definition of ISALPHA
+       - fix definitions of ABSPATH and RELPATH for cygwin
+       - fix definition of ISDIRSEP for cygwin to allow backslash as a
+         directory name separator
+
+                                   8/9
+                                   ---
+builtins/setattr.def
+       - when setting a variable from the temporary environment in
+         set_var_attribute  (e.g., `LC_ALL=C export LC_ALL'), make sure to
+         call stupidly_hack_special_variables after binding the variable in
+         the current context
+
+builtins/printf.def
+       - make sure to call stupidly_hack_special_variables if using `printf -v'
+         to put formatted output in a shell variable
+
+                                  8/11
+                                  ----
+support/shobj-conf
+       - new variable: SHLIB_LIBPREF, prefix for shared library name (defaults
+         to `lib'
+       - new variable: SHLIB_DLLVERSION, used on Cygwin to set the library
+         version number
+       - new variable: SHLIB_DOT, separator character between library name and
+         suffix and version information (defaults to `.')
+       - new stanza for cygwin to generate windows-compatible dll
+
+                                  8/14
+                                  ----
+variables.c
+       - new special variable function for Cygwin, so the export environment
+         is remade when HOME is changed.  The environment is the only way to
+         get information from the shell to cygwin dlls, for instanace, when
+         bash is compiled to use an already-installed libreadline
+
+variables.h
+       - new extern declaration for sv_home
+
+                                  8/15
+                                  ----
+lib/readline/display.c
+       - call init_line_structures from rl_redisplay if vis_lbreaks == 0
+         to avoid consequences of a poorly-timed SIGWINCH
+
+                                  8/16
+                                  ----
+subst.c
+       - fix logic for performing tilde expansion when in posix mode (don't
+         rely on W_TILDEEXP flag always being set, because it won't be when
+         expanding the RHS of assignment statement).  Use W_TILDEEXP only
+         when deciding to expand a word marked as W_ASSIGNMENT that doesn't
+         precede a command name
+
+                                  8/17
+                                  ----
+execute_cmd.c
+       - in execute_function, when subshell == 1, don't short-cut by using
+         the command contained in the group command -- if you do, any
+         redirections attached to the group command (function) don't get
+         executed
+
+general.h
+       - new #define, FS_READABLE, indicates file is readable by current
+         user
+
+findcmd.c
+       - rewrote file_status to use S_xxx POSIX file mode bits and to add
+         support for FS_READABLE (affects ./source and searching $PATH for
+         scripts whose names are supplied as arguments on the command line)
+       - change find_path_file to look for readable files -- source requires
+         it
+       - change find_in_path_element to do the right thing when FS_READABLE
+         is supplied as a flag
+
+doc/bashref.texi
+       - remove note about posix non-compliance in `.': we now require and
+         look for readable files when searching $PATH
+
+                                  8/20
+                                  ----
+subst.c
+       - fix setifs to handle case where passed variable is non-zero but
+         v->value == 0 (as in an unset local variable); treat IFS as unset
+         in this case
+
+jobs.c
+       - in kill_pid, if asked to killpg a process or pgrp whose pgrp is
+         recorded as the same as the shell's, just call killpg and let the
+         chips fall where they may -- there may be other processes in that
+         pgrp that are not children of the shell, so killing each process
+         in the pipeline will not do a complete job, and killpg'ing each
+         such process will send too many signals in the majority of cases
+
+builtins/cd.def
+       - in posix mode, pwd needs to check that the value it prints and `.'
+         are the same file
+
+builtins/read.def
+       - if reading input from stdin in a non-interactive shell and calling
+         `read', call sync_buffered_stream to seek backward in the input
+         stream if necessary (XXX - should we do this for all shell builtins?)
+
+                                  8/23
+                                  ----
+builtins/cd.def
+       - in posix mode, if canonicalization of the absolute pathname fails
+         because the path length exceeds PATH_MAX, but the length of the passed
+         (non-absolute) pathname does not, attempt the chdir, just as when
+         not in posix mode
+
+builtins/type.def
+       - don't have describe_command call sh_makepath if the full path found
+         is already an absolute pathname (sh_makepath will stick $PWD onto the
+         front of it)
+
+                                  8/24
+                                  ----
+
+jobs.c
+       - in posix mode, don't have start_job print out and indication of
+         whether the job started by `bg' is the current or previous job
+       - change start_job to return success if a job to be resumed in the
+         background is already running.  This means that bg won't fail when
+         asked to bg a background job, as SUSv3/XPG6 requires
+       - new function, init_job_stats, to zero out the global jobstats struct
+
+{jobs,nojobs}.c
+       - change kill_pid to handle pids < -1 by killing process groups
+
+jobs.h
+       - extern declaration for init_job_stats
+
+lib/readline/history.c
+       - check whether or not the history list is null in remove_history
+
+builtins/history.def
+       - delete_last_history is no longer static so fc builtin can use it
+
+builtins/fc.def
+       - use free_history_entry in fc_replhist instead of freeing struct
+         members individually
+       - call delete_last_history from fc_replhist instead of using inline
+         code
+       - if editing (-l not specified), make sure the fc command that caused
+         the editing is removed from the history list, as POSIX specifies
+
+builtins/kill.def
+       - just call kill_pid with any pid argument and let it handle pids < -1
+         This is the only way to let kill_pid know whether a negative pid or
+         a job spec was supplied as an argument to kill
+
+builtins/fg_bg.def
+       - force fg_bg to return EXECUTION_SUCCESS explicitly if called by bg
+         and start_job returns successfully
+       - bg now returns success only if all the specified jobs were resumed
+         successfully
+
+execute_cmd.c
+       - call init_job_stats from initialize_subshell to zero out the global
+         job stats structure
+
+                                  8/25
+                                  ----
+bashline.c
+       - change vi_edit_and_execute_command to just call vi when in posix
+         mode, instead of checking $FCEDIT and $EDITOR
+
+lib/readline/search.c
+       - if in vi_mode, call rl_free_undo_list in make_history_line_current
+         to dispose of undo list accumulated while reading the search string
+         (if this isn't done, since vi mode leaves the current history
+         position at the entry which matched the search, the call to
+         rl_revert_line in rl_internal_teardown will mangle the matched
+         history entry using a bogus rl_undo_list)
+       - call rl_free_undo_list after reading a non-incremental search string
+         into rl_line_buffer -- that undo list should be discarded
+
+lib/readline/rlprivate.h
+       - add UNDO_LIST * member to search context struct
+
+lib/readline/isearch.c
+       - initialize UNDO_LIST *save_undo_list member of search context struct
+
+                                  8/27
+                                  ----
+lib/readline/bind.c
+       - change rl_parse_and_bind to strip whitespace from the end of a
+         variable value assignment before calling rl_variable_bind
+
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+       - clarified the language concerning parsing values for boolean
+         variables in assignment statements
+
+                                  8/28
+                                  ----
+lib/sh/pathphys.c
+       - fix small memory leak in sh_realpath reported by Eric Blake
+
+                                  8/31
+                                  ----
+doc/bashref.texi
+       - add additional notes to posix mode section
+
+                                   9/3
+                                   ---
+parse.y
+       - if $'...' occurs within a ${...} parameter expansion within
+         double quotes, don't single-quote the expanded result -- the double
+         quotes will cause it to be expanded incorrectly
+
+                                   9/4
+                                   ---
+builtins/fc.def
+       - if STRICT_POSIX is defined, the posix mode default for the editor to
+         use is $FCEDIT, then ed
+
+shell.c
+       - if STRICT_POSIX is defined, initialize `posixly_correct' to 1
+
+config.h.in
+       - add #undef STRICT_POSIX
+
+                                   9/5
+                                   ---
+configure.in
+       - add new option argument, --enable-strict-posix-default, configures
+         bash to be posix-conformant (including defaulting echo to posix
+         conformance) by default
+
+builtins/echo.def
+       - if STRICT_POSIX is defined, default echo to xpg-style
+
+doc/bashref.texi
+       - describe the --enable-strict-posix-default option to configure
+
+                                  9/10
+                                  ----
+builtins/mkbuiltins.c
+       - change to not generate N_(""), because the translated empty string is
+         special to GNU gettext
+
+                                  9/13
+                                  ----
+lib/readline/complete.c
+       - a negative value for rl_completion_query_items means to not ask
+
+lib/readline/doc/{{rltech,rluser}.texi,readline.3}
+       - documented new semantics for rl_completion_query_items/
+         completion-query-items
+
+                                  9/14
+                                  ----
+bashline.c
+       - bind M-TAB in emacs mode to dynamic-complete-history even if the
+         current binding is `tab-insert' (which is what it is by default),
+         not just if it's unbound
+
+                                  9/15
+                                  ----
+eval.c
+       - call QUIT before calling dispose_command on current_command after
+         the  `exec_done' label.  If we dispose current_command first, the
+         longjmp might restore the value of current_command after we've
+         disposed it, and the subsequent call to dispose_command from the
+         DISCARD case will free memory twice
+
+                                  9/16
+                                  ----
+lib/sh/strto[iu]max.c
+       - make sure the function being declared is not a cpp define before
+         defining it -- should fix problems on HP-UX
+
+                                  9/19
+                                  ----
+Makefile.in
+       - make sure the binaries for the tests are at the front of $PATH
+
+                                  9/22
+                                  ----
+parse.y
+       - new flag for parse_matched_pair: P_COMMAND, indicating that the
+         text being parsed is a command (`...`, $(...))
+       - change calls to parse_matched_pair to include P_COMMAND where
+         appropriate
+       - if P_COMMAND flag is set and the text is unquoted, check for comments
+         and don't try to parse embedded quoted strings if in a comment (still
+         not exactly right yet)
+
+                                  9/24
+                                  ----
+builtins/history.def
+       - if running history -n, don't count these new lines as history lines
+         for the current session if the `histappend' shell option is set.
+         If we're just appending to the history file, the issue that caused
+         history_lines_this_session to be recalculated doesn't apply -- the
+         history file won't be missing any entries
+
+lib/readline/isearch.c
+       - fix C-w handler for isearch string reader to handle multibyte chars
+
+lib/readline/rlmbutil.h
+       - new defines for _rl_to_wupper and _rl_to_wlower
+
+lib/readline/text.c
+       - use _rl_to_wupper and _rl_to_wlower as appropriate
+
+                                  9/26
+                                  ----
+execute_cmd.c
+       - in shell_execve, if the exec fails due to E2BIG or ENOMEM, just print
+         the appropriate error message instead of checking out any interpreter
+         specified with #!
+
+                                  9/30
+                                  ----
+bashhist.c
+       - make $HISTCMD available anytime remember_on_history is non-zero,      
+         which indicates that we're saving commands to the history, and
+         let it evaluate to 1 if we're not
+
+                                  10/4
+                                  ----
+lib/sh/snprintf.c
+       - in floating(), make sure d != 0 before calling chkinfnan -- gcc on the
+         version of Solaris 9 I have translates 0 to -inf on the call
+
+[bash-3.1-beta1 frozen]
+
+                                  10/6
+                                  ----
+jobs.c
+       - set the_pipeline to NULL right away in cleanup_the_pipeline, and
+         dispose a copy of the pointer so we don't mess with the_pipeline
+         while we're in the process of destroying it
+       - block and unblock SIGCHLD around manipulating the_pipeline in
+         cleanup_the_pipeline  
+
+                                  10/7
+                                  ----
+[bash-3.1-beta1 released]
+
+lib/readline/isearch.c
+       - when switching directions, make sure we turn off the SF_REVERSE
+         flag in the search context's flags word if we're going from reverse
+         to forward i-search
+
+lib/readline/bind.c
+       - new function, rl_variable_value, returns a string representing a
+         bindable readline variable's value
+       - new auxiliary function, _rl_get_string_variable_value, encapsulates
+         everything needed to get a bindable string variable's value
+       - rewrote rl_variable_dumper to use _rl_get_string_variable_value
+
+lib/readline/readline.h
+       - new extern declaration for rl_variable_value
+
+lib/readline/doc/rltech.texi
+       - documented rl_variable_value
+
+bashline.c
+       - in command_word_completion_function, if readline sets
+         rl_completion_found_quote, but doesn't set rl_completion_quote_character,
+         we have an embedded quoted string or backslash-escaped character in
+         the passed text.  We need to dequote that before calling
+         filename_completion_function.  So far, this is in place only for
+         absolute program names (those containing a `/')
+       - in command_word_completion_function, use rl_variable_value to decide
+         whether or not we should ignore case, and use strncasecmp instead of
+         strncmp where appropriate
+
+                                  10/11
+                                  -----
+builtins/fc.def
+       - fixed a typo when using POSIX_FC_EDIT_COMMAND
+
+redir.h
+       - new flag values for redirections: RX_INTERNAL and RX_USER (currently
+         unused)
+
+redir.c
+       - add_undo_redirect and add_undo_close_redirect now set RX_INTERNAL
+         flag when making new redirects
+       - in do_redirection_internal, only set file descriptors > 2 to CLEXEC
+         if they're marked as RX_INTERNAL
+
+                                  10/12
+                                  -----
+jobs.c
+       - in wait_for_single_pid, if in posix mode, remove the waited-for pid
+         from the list of background pids, forgetting it entirely.  POSIX
+         conformance tests test for this.
+
+lib/readline/{readline.h,vi_mode.c}
+       - new state flag, RL_STATE_VICMDONCE, set after entering vi command
+         mode the first time; reset on each call to readline()
+
+                                  10/13
+                                  -----
+lib/readline/undo.c
+       - in rl_revert_line, make sure that revert-line in vi mode leaves
+         rl_point set to 0 no matter the state of the line buffer
+
+lib/readline/vi_mode.c
+       - when entering vi_command mode for the first time, free any existing
+         undo list so the previous insertions won't be undone by the `U'
+         command.  This is how POSIX.2 says `U' should work (and the test
+         suite tests for it)
+
+lib/readline/bind.c
+       - change rl_parse_and_bind so only `set' commands involving boolean
+         readline variables have trailing whitespace stripped from the value
+         string
+
+                                  10/16
+                                  -----
+lib/glob/sm_loop.c
+       - fix patscan() to correctly scan backslash-escaped characters
+
+                                  10/18
+                                  -----
+lib/sh/{winsize.c,Makefile.in},{jobs,nojobs}.c,Makefile.in,externs.h
+       - moved get_new_window_size from jobs.c/nojobs.c to new file,
+         lib/sh/winsize.c, made function global
+
+{jobs,nojobs,sig}.c,{jobs,sig}.h
+       - moved SIGWINCH handling code to sig.c rather than duplicate it in
+         jobs.c and nojobs.c
+       - call set_sigwinch_handler from sig.c code rather than job control
+         signal initialization
+
+sig.[ch]
+       - new variable, sigwinch_received, acts like interrupt_state for
+         SIGWINCH, set by sigwinch_sighandler.  sigwinch_sighandler no longer
+         calls get_new_window_size
+
+parse.y
+       - add call to get_new_window_size if sigwinch_received at top of
+         shell_getc
+
+                                  10/19
+                                  -----
+lib/malloc/malloc.c
+       - to avoid orphaning memory on free if the right bucket is busy, use a
+         new function xplit(mem, bucket) to split the block into two or more
+         smaller ones and add those to the right bucket (appropriately marking
+         it as busy)
+       - audit bsplit(), bcoalesce(), and xsplit() for proper use of busy[],
+         since they're dealing with two separate buckets
+
+                                  10/22
+                                  -----
+subst.c
+       - new flag for string_extract: EX_REQMATCH, means to return an error
+         if a matching/closing character is not found before EOS
+       - new static flag variables: extract_string_error and extract_string_fatal
+       - change expand_word_internal to check for new error returns from
+         string_extract and return errors if appropriate
+
+                                  10/23
+                                  -----
+builtins/cd.def
+       - make sure we free TDIR in change_to_directory after calling
+         set_working_directory (which allocates new memory) and other places
+         we short-circuit and return
+
+                                  10/24
+                                  -----
+subst.c
+       - modified fix from 10/22 to allow bare ` to pass through (for
+         some backwards compatibility and more correctness)
+
+                                  10/27
+                                  -----
+conftypes.h
+       - make MacOS X use the RHAPSODY code that gets HOSTTYPE, et al.
+         at build rather than configure time, to support universal binaries
+         (fix from llattanzi@apple.com)
+
+                                  10/30
+                                  -----
+builtins/evalstring.c
+       - make sure we don't turn on CMD_NO_FORK in parse_and_execute if
+         we're running a trap command on signal receipt or exit
+
+execute_cmd.c
+       - in shell_execve, improve the error message a little bit if the
+         interpreter name in a #! exec header ends with a ^M (as in a DOS-
+         format file)
+
+                                  11/1
+                                  ----
+lib/readline/vi_mode.c
+       - fix vi-mode `r' command to leave the cursor in the right place
+
+[bash-3.1-rc1 frozen]
+
+                                  11/5
+                                  ----
+execute_cmd.c
+       - make sure a DEBUG trap doesn't overwrite a command string passed to
+         make_child in execute_simple_command
+
+bashline.c
+       - rearrange some code in bash_quote_filename so filenames with leading
+         tildes containing spaces aren't tilde-expanded before being
+         returned to the caller
+
+                                  11/6
+                                  ----
+lib/readline/display.c
+       - when deciding where to move the cursor in rl_redisplay and needing
+         to move the cursor back after moving it vertically and compensate
+         for invisible characters in the prompt string, make sure that
+         _rl_last_c_pos is treated as an absolute cursor position in a
+         multibyte locale and the wrap offset (number of invisible characters)
+         is added explicitly when deciding how many characters to backspace
+
+                                  11/10
+                                  -----
+lib/readline/terminal.c
+       - _rl_set_screen_size now interprets a lines or columns argument < 0
+         as an indication not to change the current value
+
+                                  11/11
+                                  -----
+
+lib/readline/terminal.c
+       - new function, rl_reset_screen_size, calls _rl_get_screen_size to
+         reset readline's idea of the terminal size
+       - don't call _rl_get_screen_size in _rl_init_terminal_io if both        
+         _rl_screenheight and _rl_screenwidth are > 0
+       - don't initialize _rl_screenheight and _rl_screenwidth to 0 in
+         _rl_init_terminal_io; let caller take care of it
+       - set _rl_screenheight and _rl_screenwidth to 0 before calling
+         _rl_init_terminal_io
+
+lib/readline/readline.h
+       - new extern declaration for rl_reset_screen_size
+
+lib/readline/doc/rltech.texi
+       - documented rl_reset_screen_size
+
+variables.c
+       - if readline is being used, compile in a special var function for
+         assignments to LINES and COLUMNS that calls rl_set_screen_size or
+         rl_reset_screen_size as appropriate.  Only do this in posix mode
+         and only when STRICT_POSIX is defined at compile time
+       - new semaphore variable, winsize_assignment, set while doing an
+         assignment to LINES or COLUMNS
+       - new variable, winsize_assigned, says LINES or COLUMNS was assigned
+         to or found in the environment
+       - if in the middle of an assignment to LINES or COLUMNS, make
+         sh_set_lines_and_columns a no-op
+
+lib/sh/winsize.c
+       - get_new_window_size now takes two int * arguments, to return the
+         screen dimensions
+
+externs.h
+       - change extern declaration for get_new_window_size
+
+{jobs,nojobs}.c, parse.y
+       - change callers of get_new_window_size
+
+                                  11/12
+                                  -----
+lib/readline/terminal.c
+       - new variable, rl_prefer_env_winsize, gives LINES and COLUMNS
+         precedence over values from the kernel when computing window size
+
+lib/readline/readline.h
+       - extern declaration for rl_prefer_env_winsize
+
+lib/readline/doc/rltech.texi
+       - document rl_prefer_env_winsize
+
+                                  11/13
+                                  -----
+lib/readline/rltty.c
+       - change rl_prep_terminal to make sure we set and reset the tty
+         special characters in the vi insertion keymap if in vi mode.  This
+         matters if we get accept-line for the previous line while in vi
+         command mode
+
+                                  11/14
+                                  -----
+builtins/pushd.def
+       - make sure any call to cd_builtin includes a leading `--' from the
+         argument list (or constructs one)
+
+                                  11/16
+                                  -----
+pcomplete.c
+       - fix small memory leak in gen_wordlist_matches
+
+[bash-3.1-rc2 frozen]
+
+                                  11/21
+                                  -----
+[bash-3.1-rc2 released]
+
+                                  11/23
+                                  -----
+lib/readline/display.c
+       - changes to rl_redisplay to compensate for update_line updating
+         _rl_last_c_pos without taking invisible characters in the line into
+         account.  Important in multibyte locales where _rl_last_c_pos is an
+         absolute cursor position
+       - changes to _rl_move_cursor_relative to account for _rl_last_c_pos
+         being an absolute cursor position in a multibyte character locale
+       - rewrote _rl_move_cursor_relative to make it a little simpler
+
+                                  11/29
+                                  -----
+lib/readline/display.c
+       - changes to rl_redisplay and update_line for update_line to communicate
+         upward that it took the number of invisible characters on the current
+         line into account when modifying _rl_last_c_pos
+       - in update_line, adjust _rl_last_c_pos by wrap_offset before calling
+         _rl_move_cursor_relative, so we pass correct information about the
+         true cursor position
+
+                                  12/1
+                                  ----
+configure.in
+       - changed release status to `release'
+
+[bash-3.1 frozen]
diff --git a/INSTALL b/INSTALL
index fc66407..4dfaa0d 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -191,13 +191,14 @@ the Bash `configure' recognizes.
      Define if you are using the Andrew File System from Transarc.
 
 `--with-bash-malloc'
-     Use the Bash version of `malloc' in `lib/malloc/malloc.c'.  This
-     is not the same `malloc' that appears in GNU libc, but an older
-     version derived from the 4.2 BSD `malloc'.  This `malloc' is very
-     fast, but wastes some space on each allocation.  This option is
-     enabled by default.  The `NOTES' file contains a list of systems
-     for which this should be turned off, and `configure' disables this
-     option automatically for a number of systems.
+     Use the Bash version of `malloc' in the directory `lib/malloc'.
+     This is not the same `malloc' that appears in GNU libc, but an
+     older version originally derived from the 4.2 BSD `malloc'.  This
+     `malloc' is very fast, but wastes some space on each allocation.
+     This option is enabled by default.  The `NOTES' file contains a
+     list of systems for which this should be turned off, and
+     `configure' disables this option automatically for a number of
+     systems.
 
 `--with-curses'
      Use the curses library instead of the termcap library.  This should
@@ -210,7 +211,7 @@ the Bash `configure' recognizes.
 `--with-installed-readline[=PREFIX]'
      Define this to make Bash link with a locally-installed version of
      Readline rather than the version in `lib/readline'.  This works
-     only with Readline 4.3 and later versions.  If PREFIX is `yes' or
+     only with Readline 5.0 and later versions.  If PREFIX is `yes' or
      not supplied, `configure' uses the values of the make variables
      `includedir' and `libdir', which are subdirectories of `prefix' by
      default, to find the installed version of Readline if it is not in
@@ -291,6 +292,9 @@ does not provide the necessary support.
      `=~' binary operator in the `[[' conditional command.  (*note
      Conditional Constructs::).
 
+`--enable-debugger'
+     Include support for the bash debugger (distributed separately).
+
 `--enable-directory-stack'
      Include support for a `csh'-like directory stack and the `pushd',
      `popd', and `dirs' builtins (*note The Directory Stack::).
@@ -334,17 +338,17 @@ does not provide the necessary support.
      This enables process substitution (*note Process Substitution::) if
      the operating system provides the necessary support.
 
+`--enable-progcomp'
+     Enable the programmable completion facilities (*note Programmable
+     Completion::).  If Readline is not enabled, this option has no
+     effect.
+
 `--enable-prompt-string-decoding'
      Turn on the interpretation of a number of backslash-escaped
      characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt
      strings.  See *Note Printing a Prompt::, for a complete list of
      prompt string escape sequences.
 
-`--enable-progcomp'
-     Enable the programmable completion facilities (*note Programmable
-     Completion::).  If Readline is not enabled, this option has no
-     effect.
-
 `--enable-readline'
      Include support for command-line editing and history with the Bash
      version of the Readline library (*note Command Line Editing::).
@@ -358,6 +362,19 @@ does not provide the necessary support.
      Include the `select' builtin, which allows the generation of simple
      menus (*note Conditional Constructs::).
 
+`--enable-separate-helpfiles'
+     Use external files for the documentation displayed by the `help'
+     builtin instead of storing the text internally.
+
+`--enable-single-help-strings'
+     Store the text displayed by the `help' builtin as a single string
+     for each help topic.  This aids in translating the text to
+     different languages.  You may need to disable this if your
+     compiler cannot handle very long string literals.
+
+`--enable-strict-posix-default'
+     Make Bash POSIX-conformant by default (*note Bash POSIX Mode::).
+
 `--enable-usg-echo-default'
      A synonym for `--enable-xpg-echo-default'.
 
@@ -366,7 +383,7 @@ does not provide the necessary support.
      default, without requiring the `-e' option.  This sets the default
      value of the `xpg_echo' shell option to `on', which makes the Bash
      `echo' behave more like the version specified in the Single Unix
-     Specification, version 2.  *Note Bash Builtins::, for a
+     Specification, version 3.  *Note Bash Builtins::, for a
      description of the escape sequences that `echo' recognizes.
 
 The file `config-top.h' contains C Preprocessor `#define' statements
index 121135f..f67a81e 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -35,7 +35,6 @@ lib/sh                d
 lib/termcap    d
 lib/termcap/grot d
 lib/tilde      d
-lib/tilde/doc  d
 po             d
 support                d
 tests          d
@@ -409,6 +408,7 @@ lib/sh/strftime.c   f
 lib/sh/strindex.c      f
 lib/sh/stringlist.c    f
 lib/sh/stringvec.c     f
+lib/sh/strnlen.c       f
 lib/sh/strpbrk.c       f
 lib/sh/strstr.c                f
 lib/sh/strtod.c                f
@@ -423,6 +423,7 @@ lib/sh/times.c              f
 lib/sh/timeval.c       f
 lib/sh/tmpfile.c       f
 lib/sh/vprint.c                f
+lib/sh/winsize.c       f
 lib/sh/xstrchr.c       f
 lib/sh/zcatfd.c                f
 lib/sh/zread.c         f
@@ -450,8 +451,6 @@ lib/termcap/grot/COPYING    f
 lib/termcap/grot/README        f
 lib/tilde/README       f
 lib/tilde/Makefile.in  f
-lib/tilde/doc/tilde.texi       f
-lib/tilde/doc/Makefile f
 lib/tilde/tilde.c      f
 lib/tilde/tilde.h      f
 lib/tilde/shell.c      f
@@ -463,7 +462,6 @@ po/Rules-builtins   f
 po/Rules-quot          f
 po/bash.pot            f
 po/boldquot.sed                f
-po/builtins.pot                f
 po/en@quot.header      f
 po/en@boldquot.header  f
 po/en@quot.po          f
@@ -529,6 +527,7 @@ support/xenix-link.sh       f       755
 support/shobj-conf     f       755
 support/rlvers.sh      f       755
 examples/bashdb/PERMISSION     f
+examples/bashdb/README f
 examples/bashdb/bashdb         f
 examples/bashdb/bashdb.el      f
 examples/obashdb/PERMISSION    f
@@ -678,6 +677,8 @@ examples/misc/cshtobash     f
 tests/README           f
 tests/alias.tests      f
 tests/alias.right      f
+tests/appendop.tests   f
+tests/appendop.right   f
 tests/arith-for.tests  f
 tests/arith-for.right  f
 tests/arith.tests      f
@@ -686,6 +687,9 @@ tests/arith1.sub    f
 tests/arith2.sub       f
 tests/array.tests      f
 tests/array.right      f
+tests/array1.sub       f
+tests/array2.sub       f
+tests/array3.sub       f
 tests/array-at-star    f
 tests/array2.right     f
 tests/braces.tests     f
@@ -712,6 +716,7 @@ tests/dollar-at-star        f
 tests/dollar-at1.sub   f
 tests/dollar-at2.sub   f
 tests/dollar-star1.sub f
+tests/dollar-star2.sub f
 tests/dollar.right     f
 tests/dstack.tests     f
 tests/dstack.right     f
@@ -734,6 +739,8 @@ tests/extglob.tests f
 tests/extglob.right    f
 tests/extglob2.tests   f
 tests/extglob2.right   f
+tests/extglob3.tests   f
+tests/extglob3.right   f
 tests/func.tests       f
 tests/func.right       f
 tests/func1.sub                f
@@ -759,12 +766,18 @@ tests/histexp.tests       f
 tests/histexp.right    f
 tests/history.tests    f
 tests/history.right    f
-tests/history.list     f
+tests/history.list     f       444
 tests/ifs.tests                f
 tests/ifs.right                f
+tests/ifs-posix.tests  f
+tests/ifs-posix.right  f
 tests/input-line.sh    f
 tests/input-line.sub   f
 tests/input.right      f
+tests/intl.tests       f
+tests/intl.right       f
+tests/iquote.tests     f
+tests/iquote.right     f
 tests/invert.tests     f
 tests/invert.right     f
 tests/jobs.tests       f
@@ -780,6 +793,7 @@ tests/new-exp1.sub  f
 tests/new-exp2.sub     f
 tests/new-exp3.sub     f
 tests/new-exp4.sub     f
+tests/new-exp5.sub     f
 tests/new-exp.right    f
 tests/nquote.tests     f
 tests/nquote.right     f
@@ -819,6 +833,7 @@ tests/redir4.sub    f
 tests/redir4.in1       f
 tests/redir5.sub       f
 tests/redir6.sub       f
+tests/redir7.sub       f
 tests/rhs-exp.tests    f
 tests/rhs-exp.right    f
 tests/rsh.tests                f
@@ -826,6 +841,7 @@ tests/rsh.right             f
 tests/run-all          f
 tests/run-minimal      f
 tests/run-alias                f
+tests/run-appendop     f
 tests/run-arith-for    f
 tests/run-arith                f
 tests/run-array                f
@@ -843,6 +859,7 @@ tests/run-execscript        f
 tests/run-exp-tests    f
 tests/run-extglob      f
 tests/run-extglob2     f
+tests/run-extglob3     f
 tests/run-func         f
 tests/run-getopts      f
 tests/run-glob-test    f
@@ -851,7 +868,10 @@ tests/run-herestr  f
 tests/run-histexpand   f
 tests/run-history      f
 tests/run-ifs          f
+tests/run-ifs-posix    f
 tests/run-input-test   f
+tests/run-intl         f
+tests/run-iquote       f
 tests/run-invert       f
 tests/run-jobs         f
 tests/run-more-exp     f
@@ -876,6 +896,7 @@ tests/run-shopt             f
 tests/run-strip                f
 tests/run-test         f
 tests/run-tilde                f
+tests/run-tilde2       f
 tests/run-trap         f
 tests/run-type         f
 tests/run-varenv       f
@@ -889,8 +910,10 @@ tests/strip.tests  f
 tests/strip.right      f
 tests/test.tests       f
 tests/test.right       f
-tests/tilde-tests      f
+tests/tilde.tests      f
 tests/tilde.right      f
+tests/tilde2.tests     f
+tests/tilde2.right     f
 tests/trap.tests       f
 tests/trap.right       f
 tests/trap1.sub                f       755
diff --git a/MANIFEST.doc b/MANIFEST.doc
new file mode 100644 (file)
index 0000000..736ad5b
--- /dev/null
@@ -0,0 +1,24 @@
+#
+# Master Manifest file for documentation-only distribution
+#
+doc    d
+MANIFEST.doc   f
+doc/article.ps f
+doc/rose94.ps  f
+doc/bash.ps            f
+doc/bashbug.ps f
+doc/builtins.ps        f
+doc/rbash.ps   f
+doc/bashref.ps f
+doc/bashref.dvi        f
+doc/bash.0             f
+doc/bashbug.0          f
+doc/builtins.0 f
+doc/rbash.0    f
+doc/article.txt        f
+doc/bash.html          f
+doc/bashref.html       f
+doc/article.pdf        f
+doc/bash.pdf   f
+doc/bashref.pdf        f
+doc/rose94.pdf f
index 56bc2b4..57277b6 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile for bash-3.0, version 2.152
+# Makefile for bash-3.1, version 2.157
 #
-# Copyright (C) 1996-2004 Free Software Foundation, Inc.
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -67,6 +67,7 @@ RM = rm -f
 AR = @AR@
 ARFLAGS = @ARFLAGS@
 RANLIB = @RANLIB@
+SIZE = @SIZE@
 
 INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -116,10 +117,10 @@ THIS_SH = $(BUILD_DIR)/$(Program)
 PROFILE_FLAGS= @PROFILE_FLAGS@
 
 CFLAGS = @CFLAGS@
-CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@
 CPPFLAGS = @CPPFLAGS@
 CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
-LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
+LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG} ${MALLOC_DEBUG}
 DEFS = @DEFS@
 LOCAL_DEFS = @LOCAL_DEFS@
 
@@ -196,7 +197,8 @@ SHLIB_SOURCE =      ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \
                ${SH_LIBSRC}/fmtumax.c ${SH_LIBSRC}/netconn.c \
                ${SH_LIBSRC}/mktime.c ${SH_LIBSRC}/strftime.c \
                ${SH_LIBSRC}/memset.c ${SH_LIBSRC}/xstrchr.c \
-               ${SH_LIBSRC}/zcatfd.c ${SH_LIBSRC}/shmatch.c
+               ${SH_LIBSRC}/zcatfd.c ${SH_LIBSRC}/shmatch.c \
+               ${SH_LIBSRC}/strnlen.c ${SH_LIBSRC}/winsize.c
 
 SHLIB_LIB = -lsh
 SHLIB_LIBNAME = libsh.a
@@ -309,7 +311,7 @@ TILDE_LIBSRC = $(LIBSRC)/tilde
 TILDE_LIBDIR = $(dot)/$(LIBSUBDIR)/tilde
 TILDE_ABSSRC = ${topdir}/$(TILDE_LIBDIR)
 
-TILDE_LIB = -ltilde
+TILDE_LIB = @TILDE_LIB@
 TILDE_LIBRARY = $(TILDE_LIBDIR)/libtilde.a
 TILDE_LDFLAGS = -L$(TILDE_LIBDIR)
 TILDE_DEP = $(TILDE_LIBRARY)
@@ -513,7 +515,7 @@ $(Program):  .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP)
        $(RM) $@
        $(PURIFY) $(CC) $(BUILTINS_LDFLAGS) $(LIBRARY_LDFLAGS) $(LDFLAGS) -o $(Program) $(OBJECTS) $(LIBS)
        ls -l $(Program)
-       size $(Program)
+       -$(SIZE) $(Program)
 
 .build:        $(SOURCES) config.h Makefile version.h $(VERSPROG)
        @echo
@@ -535,7 +537,7 @@ bashbug: $(SUPPORT_SRC)bashbug.sh config.h Makefile $(VERSPROG)
 strip: $(Program) .made
        strip $(Program)
        ls -l $(Program)
-       size $(Program)
+       -$(SIZE) $(Program)
 
 lint:
        ${MAKE} ${MFLAGS} CFLAGS='${GCC_LINT_FLAGS}' .made
@@ -617,7 +619,7 @@ mksyntax$(EXEEXT):  ${srcdir}/mksyntax.c config.h syntax.h ${BASHINCDIR}/chartype
 # *not* cross-compiling
 lsignames.h:   mksignames$(EXEEXT)
        $(RM) $@
-       ./mksignames $@
+       ./mksignames$(EXEEXT) $@
 
 # copy the correct signames header file to signames.h
 signames.h: $(SIGNAMES_H)
@@ -625,7 +627,7 @@ signames.h: $(SIGNAMES_H)
 
 syntax.c:      mksyntax${EXEEXT} $(srcdir)/syntax.h 
        $(RM) $@
-       ./mksyntax -o $@
+       ./mksyntax$(EXEEXT) -o $@
 
 $(BUILTINS_LIBRARY): $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h version.h
        @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} libbuiltins.a ) || exit 1
@@ -668,7 +670,7 @@ $(srcdir)/configure:        $(srcdir)/configure.in $(srcdir)/aclocal.m4 $(srcdir)/confi
 
 # for chet
 reconfig: force
-       sh $(srcdir)/configure
+       sh $(srcdir)/configure -C
 
 #newversion:   mkversion
 #      $(RM) .build
@@ -728,7 +730,7 @@ LIB_SUBDIRS = ${RL_LIBDIR}  ${HIST_LIBDIR} ${TERM_LIBDIR} ${GLOB_LIBDIR} \
 
 basic-clean:
        $(RM) $(OBJECTS) $(Program) bashbug
-       $(RM) .build .made version.h pathnames.h
+       $(RM) .build .made version.h 
 
 clean: basic-clean
        ( cd $(DOCDIR) && $(MAKE) $(MFLAGS) $@ )
@@ -758,7 +760,7 @@ distclean:  basic-clean maybe-clean
        done
        -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
        $(RM) $(CREATED_CONFIGURE) tags TAGS 
-       $(RM) $(CREATED_SUPPORT) Makefile $(CREATED_MAKEFILES)
+       $(RM) $(CREATED_SUPPORT) Makefile $(CREATED_MAKEFILES) pathnames.h
 
 maintainer-clean:      basic-clean
        @echo This command is intended for maintainers to use.
@@ -772,7 +774,7 @@ maintainer-clean:   basic-clean
        done
        -( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
        $(RM) $(CREATED_CONFIGURE) $(CREATED_MAKEFILES)
-       $(RM) $(CREATED_SUPPORT) Makefile
+       $(RM) $(CREATED_SUPPORT) Makefile pathnames.h
 
 maybe-clean:
        -if test "X$(topdir)" != "X$(BUILD_DIR)" ; then \
@@ -792,7 +794,7 @@ test tests check:   force $(Program) $(TESTS_SUPPORT)
        @-test -d tests || mkdir tests
        @cp $(TESTS_SUPPORT) tests
        @( cd $(srcdir)/tests && \
-               PATH=$$PATH:$(BUILD_DIR)/tests THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
+               PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
 
 symlinks:
        $(SHELL) $(SUPPORT_SRC)fixlinks -s $(srcdir)
diff --git a/NEWS b/NEWS
index a8e0512..977d9a3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,91 @@
+This is a terse description of the new features added to bash-3.1 since
+the release of bash-3.0.  As always, the manual page (doc/bash.1) is
+the place to look for complete descriptions.
+
+1.  New Features in Bash
+
+a.  Bash now understands LC_TIME as a special variable so that time display
+    tracks the current locale.
+
+b.  BASH_ARGC, BASH_ARGV, BASH_SOURCE, and BASH_LINENO are no longer created
+    as `invisible' variables and may not be unset.
+
+c.  In POSIX mode, if `xpg_echo' option is enabled, the `echo' builtin doesn't
+    try to interpret any options at all, as POSIX requires.
+
+d.  The `bg' builtin now accepts multiple arguments, as POSIX seems to specify.
+
+e.  Fixed vi-mode word completion and glob expansion to perform tilde
+    expansion.
+
+f.  The `**' mathematic exponentiation operator is now right-associative.
+
+g.  The `ulimit' builtin has new options: -i (max number of pending signals),
+    -q (max size of POSIX message queues), and -x (max number of file locks).
+
+h.  A bare `%' once again expands to the current job when used as a job
+    specifier.
+
+i.  The `+=' assignment operator (append to the value of a string or array) is
+    now supported for assignment statements and arguments to builtin commands
+    that accept assignment statements.
+
+j.  BASH_COMMAND now preserves its value when a DEBUG trap is executed.
+
+k.  The `gnu_errfmt' option is enabled automatically if the shell is running
+    in an emacs terminal window.
+
+l.  New configuration option:  --single-help-strings.  Causes long help text
+    to be written as a single string; intended to ease translation.
+
+m.  The COMP_WORDBREAKS variable now causes the list of word break characters
+    to be emptied when the variable is unset.
+
+n.  An unquoted expansion of $* when $IFS is empty now causes the positional
+    parameters to be concatenated if the expansion doesn't undergo word
+    splitting.
+
+o.  Bash now inherits $_ from the environment if it appears there at startup.
+
+p.  New shell option: nocasematch.  If non-zero, shell pattern matching ignores
+    case when used by `case' and `[[' commands.
+
+q.  The `printf' builtin takes a new option: -v var.  That causes the output
+    to be placed into var instead of on stdout.
+
+r.  By default, the shell no longer reports processes dying from SIGPIPE.
+
+s.  Bash now sets the extern variable `environ' to the export environment it
+    creates, so C library functions that call getenv() (and can't use the
+    shell-provided replacement) get current values of environment variables.
+
+t.  A new configuration option, `--enable-strict-posix-default', which will
+    build bash to be POSIX conforming by default.
+
+u.  If compiled for strict POSIX conformance, LINES and COLUMNS may now
+    override the true terminal size.
+
+2.  New Features in Readline
+
+a.  The key sequence sent by the keypad `delete' key is now automatically
+    bound to delete-char.
+
+b.  A negative argument to menu-complete now cycles backward through the
+    completion list.
+
+c.  A new bindable readline variable:  bind-tty-special-chars.  If non-zero,
+    readline will bind the terminal special characters to their readline
+    equivalents when it's called (on by default).
+
+d.  New bindable command: vi-rubout.  Saves deleted text for possible
+    reinsertion, as with any vi-mode `text modification' command; `X' is bound
+    to this in vi command mode.
+
+e.  A new external application-controllable variable that allows the LINES
+    and COLUMNS environment variables to set the window size regardless of
+    what the kernel returns: rl_prefer_env_winsize
+
+-------------------------------------------------------------------------------
 This is a terse description of the new features added to bash-3.0 since
 the release of bash-2.05b.  As always, the manual page (doc/bash.1) is
 the place to look for complete descriptions.
diff --git a/POSIX b/POSIX
index 05700c6..f8c983e 100644 (file)
--- a/POSIX
+++ b/POSIX
@@ -1,5 +1,5 @@
-Bash POSIX Mode
-===============
+6.11 Bash POSIX Mode
+====================
 
 Starting Bash with the `--posix' command-line option or executing `set
 -o posix' while Bash is running will cause Bash to conform more closely
@@ -22,58 +22,59 @@ The following list is what's changed when `POSIX mode' is in effect:
      is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example,
      `SIGTSTP'.
 
-  4. Reserved words may not be aliased.
+  4. The `bg' builtin uses the required format to describe each job
+     placed in the background, which does not include an indication of
+     whether the job is the current or previous job.
 
-  5. The POSIX 1003.2 `PS1' and `PS2' expansions of `!' to the history
+  5. Reserved words appearing in a context where reserved words are
+     recognized do not undergo alias expansion.
+
+  6. The POSIX 1003.2 `PS1' and `PS2' expansions of `!' to the history
      number and `!!' to `!' are enabled, and parameter expansion is
      performed on the values of `PS1' and `PS2' regardless of the
      setting of the `promptvars' option.
 
-  6. The POSIX 1003.2 startup files are executed (`$ENV') rather than
+  7. The POSIX 1003.2 startup files are executed (`$ENV') rather than
      the normal Bash files.
 
-  7. Tilde expansion is only performed on assignments preceding a
+  8. Tilde expansion is only performed on assignments preceding a
      command name, rather than on all assignment statements on the line.
 
-  8. The default history file is `~/.sh_history' (this is the default
+  9. The default history file is `~/.sh_history' (this is the default
      value of `$HISTFILE').
 
 9. The output of `kill -l' prints all the signal names on a single
10. The output of `kill -l' prints all the signal names on a single
      line, separated by spaces, without the `SIG' prefix.
 
- 10. The `kill' builtin does not accept signal names with a `SIG'
+ 11. The `kill' builtin does not accept signal names with a `SIG'
      prefix.
 
- 11. Non-interactive shells exit if FILENAME in `.' FILENAME is not
+ 12. Non-interactive shells exit if FILENAME in `.' FILENAME is not
      found.
 
- 12. Non-interactive shells exit if a syntax error in an arithmetic
+ 13. Non-interactive shells exit if a syntax error in an arithmetic
      expansion results in an invalid expression.
 
- 13. Redirection operators do not perform filename expansion on the word
+ 14. Redirection operators do not perform filename expansion on the word
      in the redirection unless the shell is interactive.
 
- 14. Redirection operators do not perform word splitting on the word in
+ 15. Redirection operators do not perform word splitting on the word in
      the redirection.
 
- 15. Function names must be valid shell `name's.  That is, they may not
+ 16. Function names must be valid shell `name's.  That is, they may not
      contain characters other than letters, digits, and underscores, and
      may not start with a digit.  Declaring a function with an invalid
      name causes a fatal syntax error in non-interactive shells.
 
- 16. POSIX 1003.2 `special' builtins are found before shell functions
+ 17. POSIX 1003.2 special builtins are found before shell functions
      during command lookup.
 
- 17. If a POSIX 1003.2 special builtin returns an error status, a
+ 18. If a POSIX 1003.2 special builtin returns an error status, a
      non-interactive shell exits.  The fatal errors are those listed in
      the POSIX.2 standard, and include things like passing incorrect
      options, redirection errors, variable assignment errors for
      assignments preceding the command name, and so on.
 
- 18. If the `cd' builtin finds a directory to change to using
-     `$CDPATH', the value it assigns to the `PWD' variable does not
-     contain any symbolic links, as if `cd -P' had been executed.
-
  19. If `CDPATH' is set, the `cd' builtin will not implicitly append
      the current directory to it.  This means that `cd' will fail if no
      valid directory name can be constructed from any of the entries in
@@ -105,9 +106,10 @@ The following list is what's changed when `POSIX mode' is in effect:
 
  27. The `trap' builtin doesn't check the first argument for a possible
      signal specification and revert the signal handling to the original
-     disposition if it is.  If users want to reset the handler for a
-     given signal to the original disposition, they should use `-' as
-     the first argument.
+     disposition if it is, unless that argument consists solely of
+     digits and is a valid signal number.  If users want to reset the
+     handler for a given signal to the original disposition, they
+     should use `-' as the first argument.
 
  28. The `.' and `source' builtins do not search the current directory
      for the filename argument if it is not found by searching `PATH'.
@@ -134,19 +136,44 @@ The following list is what's changed when `POSIX mode' is in effect:
      argument does not refer to an existing directory, `cd' will fail
      instead of falling back to PHYSICAL mode.
 
-There is other POSIX 1003.2 behavior that Bash does not implement.
-Specifically:
+ 35. When the `pwd' builtin is supplied the `-P' option, it resets
+     `$PWD' to a pathname containing no symlinks.
+
+ 36. The `pwd' builtin verifies that the value it prints is the same as
+     the current directory, even if it is not asked to check the file
+     system with the `-P' option.
+
+ 37. When listing the history, the `fc' builtin does not include an
+     indication of whether or not a history entry has been modified.
+
+ 38. The default editor used by `fc' is `ed'.
+
+ 39. The `type' and `command' builtins will not report a non-executable
+     file as having been found, though the shell will attempt to
+     execute such a file if it is the only so-named file found in
+     `$PATH'.
+
+ 40. The `vi' editing mode will invoke the `vi' editor directly when
+     the `v' command is run, instead of checking `$FCEDIT' and
+     `$EDITOR'.
+
+ 41. When the `xpg_echo' option is enabled, Bash does not attempt to
+     interpret any arguments to `echo' as options.  Each argument is
+     displayed, after escape characters are converted.
+
+
+There is other POSIX 1003.2 behavior that Bash does not implement by
+default even when in POSIX mode.  Specifically:
 
-  1. Assignment statements affect the execution environment of all
-     builtins, not just special ones.
+  1. The `fc' builtin checks `$EDITOR' as a program to edit history
+     entries if `FCEDIT' is unset, rather than defaulting directly to
+     `ed'.  `fc' uses `ed' if `EDITOR' is unset.
 
-  2. When a subshell is created to execute a shell script with execute
-     permission, but without a leading `#!', Bash sets `$0' to the full
-     pathname of the script as found by searching `$PATH', rather than
-     the command as typed by the user.
+  2. As noted above, Bash requires the `xpg_echo' option to be enabled
+     for the `echo' builtin to be fully conformant.
 
-  3. When using `.' to source a shell script found in `$PATH', bash
-     checks execute permission bits rather than read permission bits,
-     just as if it were searching for a command.
 
+Bash can be configured to be POSIX-conformant by default, by specifying
+the `--enable-strict-posix-default' to `configure' when building (*note
+Optional Features::).
 
diff --git a/RBASH b/RBASH
index c3667f5..0e5c10b 100644 (file)
--- a/RBASH
+++ b/RBASH
@@ -1,5 +1,5 @@
-The Restricted Shell
-====================
+6.10 The Restricted Shell
+=========================
 
 If Bash is started with the name `rbash', or the `--restricted' or `-r'
 option is supplied at invocation, the shell becomes restricted.  A
diff --git a/README b/README
index 08ebaf2..3f6a092 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 Introduction
 ============
 
-This is GNU Bash, version 3.0.  Bash is the GNU Project's Bourne
+This is GNU Bash, version 3.1.  Bash is the GNU Project's Bourne
 Again SHell, a complete implementation of the POSIX.2 shell spec,
 but also with interactive command line editing, job control on
 architectures that support it, csh-like features such as history
index 9d2ed54..8a70084 100644 (file)
@@ -1541,7 +1541,14 @@ AC_DEFUN(BASH_CHECK_DEV_FD,
 [AC_MSG_CHECKING(whether /dev/fd is available)
 AC_CACHE_VAL(bash_cv_dev_fd,
 [if test -d /dev/fd  && test -r /dev/fd/0 < /dev/null; then
-   bash_cv_dev_fd=standard
+# check for systems like FreeBSD 5 that only provide /dev/fd/[012]
+   exec 3<&0
+   if test -r /dev/fd/3; then
+     bash_cv_dev_fd=standard
+   else
+     bash_cv_dev_fd=absent
+   fi
+   exec 3<&-
  elif test -d /proc/self/fd && test -r /proc/self/fd/0 < /dev/null; then
    bash_cv_dev_fd=whacky
  else
@@ -1733,12 +1740,18 @@ AC_CACHE_VAL(ac_cv_rl_version,
 #include <stdio.h>
 #include <readline/readline.h>
 
+extern int rl_gnu_readline_p;
+
 main()
 {
        FILE *fp;
        fp = fopen("conftest.rlv", "w");
-       if (fp == 0) exit(1);
-       fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
+       if (fp == 0)
+               exit(1);
+       if (rl_gnu_readline_p != 1)
+               fprintf(fp, "0.0\n");
+       else
+               fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
        fclose(fp);
        exit(0);
 }
@@ -1852,6 +1865,39 @@ AC_DEFINE(CTYPE_NON_ASCII)
 fi
 ])
 
+AC_DEFUN(BASH_CHECK_WCONTINUED,
+[
+AC_MSG_CHECKING(whether WCONTINUED flag to waitpid is unavailable or available but broken)
+AC_CACHE_VAL(bash_cv_wcontinued_broken,
+[AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+main()
+{
+       int     x;
+
+       x = waitpid(-1, (int *)0, WNOHANG|WCONTINUED);
+       if (x == -1 && errno == EINVAL)
+               exit (1);
+       else
+               exit (0);
+}
+], bash_cv_wcontinued_broken=no,bash_cv_wcontinued_broken=yes,
+   [AC_MSG_WARN(cannot check WCONTINUED if cross compiling -- defaulting to no)
+    bash_cv_wcontinued_broken=no]
+)])
+AC_MSG_RESULT($bash_cv_wcontinued_broken)
+if test $bash_cv_wcontinued_broken = yes; then
+AC_DEFINE(WCONTINUED_BROKEN)
+fi
+])
+
 dnl
 dnl tests added for bashdb
 dnl
diff --git a/array.c b/array.c
index bfc83c3..c32b613 100644 (file)
--- a/array.c
+++ b/array.c
@@ -107,7 +107,7 @@ ARRAY       *a;
        ARRAY   *a1;
        ARRAY_ELEMENT   *ae, *new;
 
-       if (!a)
+       if (a == 0)
                return((ARRAY *) NULL);
        a1 = array_create();
        a1->type = a->type;
@@ -243,9 +243,9 @@ char        *s;
 {
        register ARRAY_ELEMENT  *ae, *new;
 
-       if (a == 0)
+       if (a == 0 || (array_empty(a) && s == 0))
                return 0;
-       if (n <= 0)
+       else if (n <= 0)
                return (a->num_elements);
 
        ae = element_forw(a->head);
@@ -253,16 +253,18 @@ char      *s;
                new = array_create_element(0, s);
                ADD_BEFORE(ae, new);
                a->num_elements++;
+               if (array_num_elements(a) == 1)         /* array was empty */
+                       return 1;
        }
 
-       a->max_index += n;
-
        /*
         * Renumber all elements in the array except the one we just added.
         */
        for ( ; ae != a->head; ae = element_forw(ae))
                element_index(ae) += n;
 
+       a->max_index = element_index(a->head->prev);
+
        return (a->num_elements);
 }
 
@@ -288,7 +290,7 @@ ARRAY       *array;
        ARRAY_ELEMENT   *a;
        char    *t;
 
-       if (array == 0 || array->head == 0 || array_empty (array))
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
                return (ARRAY *)NULL;
        for (a = element_forw(array->head); a != array->head; a = element_forw(a)) {
                t = quote_string (a->value);
@@ -313,7 +315,7 @@ int starsub, quoted;
        arrayind_t      i;
        char            *ifs, sep[2];
 
-       p = array_head (a);
+       p = a ? array_head (a) : 0;
        if (p == 0 || array_empty (a) || start > array_max_index(a))
                return ((char *)NULL);
 
@@ -354,10 +356,10 @@ int       mflags;
        ARRAY_ELEMENT   *e;
        char    *t, *ifs, sifs[2];
 
-       if (array_head (a) == 0 || array_empty (a))
+       if (a == 0 || array_head(a) == 0 || array_empty(a))
                return ((char *)NULL);
 
-       a2 = array_copy (a);
+       a2 = array_copy(a);
        for (e = element_forw(a2->head); e != a2->head; e = element_forw(e)) {
                t = pat_subst(element_value(e), pat, rep, mflags);
                FREE(element_value(e));
@@ -427,7 +429,7 @@ char        *v;
 {
        register ARRAY_ELEMENT *new, *ae;
 
-       if (!a)
+       if (a == 0)
                return(-1);
        new = array_create_element(i, v);
        if (i > array_max_index(a)) {
@@ -473,7 +475,7 @@ arrayind_t  i;
 {
        register ARRAY_ELEMENT *ae;
 
-       if (!a || array_empty(a))
+       if (a == 0 || array_empty(a))
                return((ARRAY_ELEMENT *) NULL);
        for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae))
                if (element_index(ae) == i) {
index 0d644b1..3bdd54f 100644 (file)
@@ -1,6 +1,6 @@
 /* arrayfunc.c -- High-level array functions used by other parts of the shell. */
 
-/* Copyright (C) 2001-2003 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -37,6 +37,9 @@
 
 extern char *this_command_name;
 extern int last_command_exit_value;
+extern int array_needs_making;
+
+static SHELL_VAR *bind_array_var_internal __P((SHELL_VAR *, arrayind_t, char *, int));
 
 static void quote_array_assignment_chars __P((WORD_LIST *));
 static char *array_value_internal __P((char *, int, int, int *));
@@ -72,6 +75,8 @@ convert_var_to_array (var)
   var->assign_func = (sh_var_assign_func_t *)NULL;
 
   INVALIDATE_EXPORTSTR (var);
+  if (exported_p (var))
+    array_needs_making++;
 
   VSETATTR (var, att_array);
   VUNSETATTR (var, att_invisible);
@@ -79,6 +84,49 @@ convert_var_to_array (var)
   return var;
 }
 
+static SHELL_VAR *
+bind_array_var_internal (entry, ind, value, flags)
+     SHELL_VAR *entry;
+     arrayind_t ind;
+     char *value;
+     int flags;
+{
+  SHELL_VAR *dentry;
+  char *newval;
+
+  /* If we're appending, we need the old value of the array reference, so
+     fake out make_variable_value with a dummy SHELL_VAR */
+  if (flags & ASS_APPEND)
+    {
+      dentry = (SHELL_VAR *)xmalloc (sizeof (SHELL_VAR));
+      dentry->name = savestring (entry->name);
+      newval = array_reference (array_cell (entry), ind);
+      if (newval)
+       dentry->value = savestring (newval);
+      else
+       {
+         dentry->value = (char *)xmalloc (1);
+         dentry->value[0] = '\0';
+       }
+      dentry->exportstr = 0;
+      dentry->attributes = entry->attributes & ~(att_array|att_exported);
+      /* Leave the rest of the members uninitialized; the code doesn't look
+        at them. */
+      newval = make_variable_value (dentry, value, flags);      
+      dispose_variable (dentry);
+    }
+  else
+    newval = make_variable_value (entry, value, flags);
+
+  if (entry->assign_func)
+    (*entry->assign_func) (entry, newval, ind);
+  else
+    array_insert (array_cell (entry), ind, newval);
+  FREE (newval);
+
+  return (entry);
+}
+
 /* Perform an array assignment name[ind]=value.  If NAME already exists and
    is not an array, and IND is 0, perform name=value instead.  If NAME exists
    and is not an array, and IND is not 0, convert it into an array with the
@@ -87,13 +135,13 @@ convert_var_to_array (var)
    If NAME does not exist, just create an array variable, no matter what
    IND's value may be. */
 SHELL_VAR *
-bind_array_variable (name, ind, value)
+bind_array_variable (name, ind, value, flags)
      char *name;
      arrayind_t ind;
      char *value;
+     int flags;
 {
   SHELL_VAR *entry;
-  char *newval;
 
   entry = var_lookup (name, shell_variables);
 
@@ -109,21 +157,15 @@ bind_array_variable (name, ind, value)
     entry = convert_var_to_array (entry);
 
   /* ENTRY is an array variable, and ARRAY points to the value. */
-  newval = make_variable_value (entry, value);
-  if (entry->assign_func)
-    (*entry->assign_func) (entry, newval, ind);
-  else
-    array_insert (array_cell (entry), ind, newval);
-  FREE (newval);
-
-  return (entry);
+  return (bind_array_var_internal (entry, ind, value, flags));
 }
 
 /* Parse NAME, a lhs of an assignment statement of the form v[s], and
    assign VALUE to that array element by calling bind_array_variable(). */
 SHELL_VAR *
-assign_array_element (name, value)
+assign_array_element (name, value, flags)
      char *name, *value;
+     int flags;
 {
   char *sub, *vname;
   arrayind_t ind;
@@ -150,7 +192,7 @@ assign_array_element (name, value)
       return ((SHELL_VAR *)NULL);
     }
 
-  entry = bind_array_variable (vname, ind, value);
+  entry = bind_array_variable (vname, ind, value, flags);
 
   free (vname);
   return (entry);
@@ -187,8 +229,9 @@ find_or_make_array_variable (name, check_flags)
 /* Perform a compound assignment statement for array NAME, where VALUE is
    the text between the parens:  NAME=( VALUE ) */
 SHELL_VAR *
-assign_array_from_string (name, value)
+assign_array_from_string (name, value, flags)
      char *name, *value;
+     int flags;
 {
   SHELL_VAR *var;
 
@@ -196,21 +239,25 @@ assign_array_from_string (name, value)
   if (var == 0)
     return ((SHELL_VAR *)NULL);
 
-  return (assign_array_var_from_string (var, value));
+  return (assign_array_var_from_string (var, value, flags));
 }
 
 /* Sequentially assign the indices of indexed array variable VAR from the
    words in LIST. */
 SHELL_VAR *
-assign_array_var_from_word_list (var, list)
+assign_array_var_from_word_list (var, list, flags)
      SHELL_VAR *var;
      WORD_LIST *list;
+     int flags;
 {
   register arrayind_t i;
   register WORD_LIST *l;
   ARRAY *a;
 
-  for (a = array_cell (var), l = list, i = 0; l; l = l->next, i++)
+  a = array_cell (var);
+  i = (flags & ASS_APPEND) ? array_max_index (a) + 1 : 0;
+
+  for (l = list; l; l = l->next, i++)
     if (var->assign_func)
       (*var->assign_func) (var, l->word->word, i);
     else
@@ -221,9 +268,10 @@ assign_array_var_from_word_list (var, list)
 /* Perform a compound array assignment:  VAR->name=( VALUE ).  The
    VALUE has already had the parentheses stripped. */
 SHELL_VAR *
-assign_array_var_from_string (var, value)
+assign_array_var_from_string (var, value, flags)
      SHELL_VAR *var;
      char *value;
+     int flags;
 {
   ARRAY *a;
   WORD_LIST *list, *nlist;
@@ -271,10 +319,11 @@ assign_array_var_from_string (var, value)
 
   /* Now that we are ready to assign values to the array, kill the existing
      value. */
-  if (a)
+  if (a && (flags & ASS_APPEND) == 0)
     array_flush (a);
+  last_ind = (flags & ASS_APPEND) ? array_max_index (a) + 1 : 0;
 
-  for (last_ind = 0, list = nlist; list; list = list->next)
+  for (list = nlist; list; list = list->next)
     {
       w = list->word->word;
 
@@ -283,9 +332,14 @@ assign_array_var_from_string (var, value)
        {
          len = skipsubscript (w, 0);
 
+#if 1
+         /* XXX - changes for `+=' */
+         if (w[len] != ']' || (w[len+1] != '=' && (w[len+1] != '+' || w[len+2] != '=')))
+#else
          if (w[len] != ']' || w[len+1] != '=')
+#endif
            {
-             nval = make_variable_value (var, w);
+             nval = make_variable_value (var, w, flags);
              if (var->assign_func)
                (*var->assign_func) (var, nval, last_ind);
              else
@@ -314,7 +368,14 @@ assign_array_var_from_string (var, value)
              continue;
            }
          last_ind = ind;
-         val = w + len + 2;
+         /* XXX - changes for `+=' */
+         if (w[len + 1] == '+' && w[len + 2] == '=')
+           {
+             flags |= ASS_APPEND;
+             val = w + len + 3;
+           }
+         else
+           val = w + len + 2;
        }
       else             /* No [ind]=value, just a stray `=' */
        {
@@ -324,12 +385,7 @@ assign_array_var_from_string (var, value)
 
       if (integer_p (var))
        this_command_name = (char *)NULL;       /* no command name for errors */
-      nval = make_variable_value (var, val);
-      if (var->assign_func)
-       (*var->assign_func) (var, nval, ind);
-      else
-       array_insert (a, ind, nval);
-      FREE (nval);
+      bind_array_var_internal (var, ind, val, flags);
       last_ind++;
     }
 
@@ -536,7 +592,11 @@ array_expand_index (s, len)
   exp = (char *)xmalloc (len);
   strncpy (exp, s, len - 1);
   exp[len - 1] = '\0';
+#if 0
   t = expand_string_to_string (exp, 0);
+#else 
+  t = expand_string_to_string (exp, Q_DOUBLE_QUOTES);
+#endif
   this_command_name = (char *)NULL;
   val = evalexp (t, &expok);
   free (t);
@@ -652,7 +712,7 @@ array_value_internal (s, quoted, allow_all, rtype)
          err_badarraysub (s);
          return ((char *)NULL);
        }
-      else if (var == 0)
+      else if (var == 0 || value_cell (var) == 0)
        return ((char *)NULL);
       else if (array_p (var) == 0)
        l = add_string_to_list (value_cell (var), (WORD_LIST *)NULL);
index 375f6f3..3c4f9a0 100644 (file)
@@ -1,6 +1,6 @@
 /* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
 
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2004 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 
 extern SHELL_VAR *convert_var_to_array __P((SHELL_VAR *));
 
-extern SHELL_VAR *bind_array_variable __P((char *, arrayind_t, char *));
-extern SHELL_VAR *assign_array_element __P((char *, char *));
+extern SHELL_VAR *bind_array_variable __P((char *, arrayind_t, char *, int));
+extern SHELL_VAR *assign_array_element __P((char *, char *, int));
 
 extern SHELL_VAR *find_or_make_array_variable __P((char *, int));
 
-extern SHELL_VAR *assign_array_from_string  __P((char *, char *));
-extern SHELL_VAR *assign_array_var_from_word_list __P((SHELL_VAR *, WORD_LIST *));
-extern SHELL_VAR *assign_array_var_from_string __P((SHELL_VAR *, char *));
+extern SHELL_VAR *assign_array_from_string  __P((char *, char *, int));
+extern SHELL_VAR *assign_array_var_from_word_list __P((SHELL_VAR *, WORD_LIST *, int));
+extern SHELL_VAR *assign_array_var_from_string __P((SHELL_VAR *, char *, int));
 
 extern int unbind_array_element __P((SHELL_VAR *, char *));
 extern int skipsubscript __P((const char *, int));
index a271567..5d2b817 100644 (file)
@@ -156,6 +156,10 @@ int history_control;
    to a previous entry as part of command-oriented-history processing. */
 int hist_last_line_added;
 
+/* Set to 1 if builtins/history.def:push_history added the last history
+   entry. */
+int hist_last_line_pushed;
+
 #if defined (READLINE)
 /* If non-zero, and readline is being used, the user is offered the
    chance to re-edit a failed history expansion. */
@@ -217,7 +221,9 @@ bash_initialize_history ()
   history_quotes_inhibit_expansion = 1;
   history_search_delimiter_chars = ";&()|<>";
   history_inhibit_expansion_function = bash_history_inhibit_expansion;
+#if defined (BANG_HISTORY)
   sv_histchars ("histchars");
+#endif
 }
 
 void
@@ -698,6 +704,7 @@ really_add_history (line)
      char *line;
 {
   hist_last_line_added = 1;
+  hist_last_line_pushed = 0;
   add_history (line);
   history_lines_this_session++;
 }
@@ -706,7 +713,7 @@ int
 history_number ()
 {
   using_history ();
-  return (get_string_value ("HISTSIZE") ? history_base + where_history () : 1);
+  return (remember_on_history ? history_base + where_history () : 1);
 }
 
 static int
index a4edb50..0a01d69 100644 (file)
@@ -38,6 +38,7 @@ extern int history_control;
 extern int command_oriented_history;
 extern int current_command_first_line_saved;
 extern int hist_last_line_added;
+extern int hist_last_line_pushed;
 
 #  if defined (BANG_HISTORY)
 extern int history_expansion_inhibited;
index 854195a..496f6c1 100644 (file)
@@ -1,6 +1,6 @@
 /* bashline.c -- Bash's interface to the readline library. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -100,7 +100,7 @@ static int history_and_alias_expand_line __P((int, int));
 #endif
 
 /* Helper functions for Readline. */
-static int bash_directory_expansion __P((char **));
+static void bash_directory_expansion __P((char **));
 static int bash_directory_completion_hook __P((char **));
 static int filename_completion_ignore __P((char **));
 static int bash_push_line __P((void));
@@ -226,6 +226,8 @@ static char *bash_nohostname_word_break_characters = " \t\n\"'><=;|&(:";
 
 static rl_hook_func_t *old_rl_startup_hook = (rl_hook_func_t *)NULL;
 
+static int dot_in_path = 0;
+
 /* What kind of quoting is performed by bash_quote_filename:
        COMPLETE_DQUOTE = double-quoting the filename
        COMPLETE_SQUOTE = single_quoting the filename
@@ -447,7 +449,11 @@ initialize_readline ()
 
 #endif /* SPECIFIC_COMPLETION_FUNCTIONS */
 
-  rl_bind_key_if_unbound_in_map (TAB, dynamic_complete_history, emacs_meta_keymap);
+  kseq[0] = TAB;
+  kseq[1] = '\0';
+  func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
+  if (func == 0 || func == rl_tab_insert)
+    rl_bind_key_in_map (TAB, dynamic_complete_history, emacs_meta_keymap);
 
   /* Tell the completer that we want a crack first. */
   rl_attempted_completion_function = attempt_shell_completion;
@@ -796,6 +802,7 @@ operate_and_get_next (count, c)
 
 #define VI_EDIT_COMMAND                "fc -e \"${VISUAL:-${EDITOR:-vi}}\""
 #define EMACS_EDIT_COMMAND     "fc -e \"${VISUAL:-${EDITOR:-emacs}}\""
+#define POSIX_VI_EDIT_COMMAND  "fc -e vi"
 
 static int
 edit_and_execute_command (count, c, editing_mode, edit_command)
@@ -855,7 +862,10 @@ static int
 vi_edit_and_execute_command (count, c)
      int count, c;
 {
-  return (edit_and_execute_command (count, c, VI_EDITING_MODE, VI_EDIT_COMMAND));
+  if (posixly_correct)
+    return (edit_and_execute_command (count, c, VI_EDITING_MODE, POSIX_VI_EDIT_COMMAND));
+  else
+    return (edit_and_execute_command (count, c, VI_EDITING_MODE, VI_EDIT_COMMAND));
 }
 #endif /* VI_MODE */
 
@@ -1071,7 +1081,7 @@ attempt_shell_completion (text, start, end)
       s = find_cmd_start (start);
       e = find_cmd_end (end);
       n = find_cmd_name (s);
-      if (e > s)
+      if (e > s && assignment (n, 0) == 0)
        prog_complete_matches = programmable_completions (n, text, s, e, &foundcs);
       else
        foundcs = 0;
@@ -1149,6 +1159,7 @@ bash_default_completion (text, start, end, qc, in_command_position)
        {
 #define CMD_IS_DIR(x)  (absolute_pathname(x) == 0 && absolute_program(x) == 0 && *(x) != '~' && test_for_directory (x))
 
+         dot_in_path = 0;
          matches = rl_completion_matches (text, command_word_completion_function);
 
          /* If we are attempting command completion and nothing matches, we
@@ -1158,27 +1169,28 @@ bash_default_completion (text, start, end, qc, in_command_position)
             filenames and leave directories in the match list. */
          if (matches == (char **)NULL)
            rl_ignore_some_completions_function = bash_ignore_filenames;
-#if 0
-         else if (matches[1] == 0 && CMD_IS_DIR(matches[0]))
-           /* Turn off rl_filename_completion_desired so readline doesn't
-              append a slash if there is a directory with the same name
-              in the current directory, or other filename-specific things.
-              If the name begins with a slash, we're either completing a
-              full pathname or a directory pathname, and readline won't be
-              looking in the current directory anyway, so there's no
-              conflict. */
-           rl_filename_completion_desired = 0;
+         else if (matches[1] == 0 && CMD_IS_DIR(matches[0]) && dot_in_path == 0)
+           /* If we found a single match, without looking in the current
+              directory (because it's not in $PATH), but the found name is
+              also a command in the current directory, suppress appending any
+              terminating character, since it's ambiguous. */
+           {
+             rl_completion_suppress_append = 1;
+             rl_filename_completion_desired = 0;
+           }
          else if (matches[0] && matches[1] && STREQ (matches[0], matches[1]) && CMD_IS_DIR (matches[0]))
            /* There are multiple instances of the same match (duplicate
               completions haven't yet been removed).  In this case, all of
               the matches will be the same, and the duplicate removal code
-              will distill them all down to one.  We turn off
-              rl_filename_completion_desired for the same reason as above.
+              will distill them all down to one.  We turn on
+              rl_completion_suppress_append for the same reason as above.
               Remember: we only care if there's eventually a single unique
               completion.  If there are multiple completions this won't
               make a difference and the problem won't occur. */
-           rl_filename_completion_desired = 0;
-#endif
+           {
+             rl_completion_suppress_append = 1;
+             rl_filename_completion_desired = 0;
+           }
        }
     }
 
@@ -1212,23 +1224,30 @@ command_word_completion_function (hint_text, state)
   static char *path = (char *)NULL;
   static char *val = (char *)NULL;
   static char *filename_hint = (char *)NULL;
-  static int path_index, hint_len, istate;
+  static char *dequoted_hint = (char *)NULL;
+  static int path_index, hint_len, dequoted_len, istate, igncase;
   static int mapping_over, local_index;
   static SHELL_VAR **varlist = (SHELL_VAR **)NULL;
 #if defined (ALIAS)
   static alias_t **alias_list = (alias_t **)NULL;
 #endif /* ALIAS */
+  char *temp;
 
   /* We have to map over the possibilities for command words.  If we have
      no state, then make one just for that purpose. */
   if (!state)
     {
+      if (dequoted_hint && dequoted_hint != hint)
+       free (dequoted_hint);
       if (hint)
        free (hint);
 
       mapping_over = 0;
       val = (char *)NULL;
 
+      temp = rl_variable_value ("completion-ignore-case");
+      igncase = strcmp (temp, "on") == 0;
+
       /* If this is an absolute program name, do not check it against
         aliases, reserved words, functions or builtins.  We must check
         whether or not it is unique, and, if so, whether that filename
@@ -1241,10 +1260,24 @@ command_word_completion_function (hint_text, state)
            hint = bash_tilde_expand (hint_text, 0);
          else
            hint = savestring (hint_text);
-         hint_len = strlen (hint);
+
+         dequoted_hint = hint;
+         /* If readline's completer found a quote character somewhere, but
+            didn't set the quote character, there must have been a quote
+            character embedded in the filename.  It can't be at the start of
+            the filename, so we need to dequote the filename before we look
+            in the file system for it. */
+         if (rl_completion_found_quote && rl_completion_quote_character == 0)
+           {
+             dequoted_hint = bash_dequote_filename (hint, 0);
+             free (hint);
+             hint = dequoted_hint;
+           }
+         dequoted_len = hint_len = strlen (hint);
 
          if (filename_hint)
            free (filename_hint);
+
          filename_hint = savestring (hint);
 
          mapping_over = 4;
@@ -1252,11 +1285,17 @@ command_word_completion_function (hint_text, state)
          goto inner;
        }
 
-      hint = savestring (hint_text);
-      hint_len = strlen (hint);
+      dequoted_hint = hint = savestring (hint_text);
+      dequoted_len = hint_len = strlen (hint);
 
+      if (rl_completion_found_quote && rl_completion_quote_character == 0)
+       {
+         dequoted_hint = bash_dequote_filename (hint, 0);
+         dequoted_len = strlen (dequoted_hint);
+       }
+      
       path = get_string_value ("PATH");
-      path_index = 0;
+      path_index = dot_in_path = 0;
 
       /* Initialize the variables for each type of command word. */
       local_index = 0;
@@ -1374,11 +1413,13 @@ command_word_completion_function (hint_text, state)
          current_path = t;
        }
 
+      if (current_path[0] == '.' && current_path[1] == '\0')
+       dot_in_path = 1;
+
       if (filename_hint)
        free (filename_hint);
 
       filename_hint = sh_makepath (current_path, hint, 0);
-
       free (current_path);
     }
 
@@ -1402,7 +1443,11 @@ command_word_completion_function (hint_text, state)
 
       if (absolute_program (hint))
        {
-         match = strncmp (val, hint, hint_len) == 0;
+         if (igncase == 0)
+           match = strncmp (val, hint, hint_len) == 0;
+         else
+           match = strncasecmp (val, hint, hint_len) == 0;
+
          /* If we performed tilde expansion, restore the original
             filename. */
          if (*hint_text == '~')
@@ -1435,7 +1480,10 @@ command_word_completion_function (hint_text, state)
          if (temp)
            {
              temp++;
-             freetemp = match = strncmp (temp, hint, hint_len) == 0;
+             if (igncase == 0)
+               freetemp = match = strncmp (temp, hint, hint_len) == 0;
+             else
+               freetemp = match = strncasecmp (temp, hint, hint_len) == 0;
              if (match)
                temp = savestring (temp);
            }
@@ -1514,6 +1562,13 @@ command_subst_completion_function (text, state)
       /* If there is more than one match, rl_completion_matches has already
         put the lcd in matches[0].  Skip over it. */
       cmd_index = matches && matches[0] && matches[1];
+
+      /* If there's a single match and it's a directory, set the append char
+        to the expected `/'.  Otherwise, don't append anything. */
+      if (matches && matches[0] && matches[1] == 0 && test_for_directory (matches[0]))
+       rl_completion_append_character = '/';
+      else
+       rl_completion_suppress_append = 1;
     }
 
   if (!matches || !matches[cmd_index])
@@ -1898,7 +1953,7 @@ tcsh_magic_space (count, ignore)
   else
     return (1);
 }
-#endif
+#endif /* BANG_HISTORY */
 
 /* History and alias expand the line. */
 static int
@@ -1907,7 +1962,10 @@ history_and_alias_expand_line (count, ignore)
 {
   char *new_line;
 
+  new_line = 0;
+#if defined (BANG_HISTORY)
   new_line = history_expand_line_internal (rl_line_buffer);
+#endif
 
 #if defined (ALIAS)
   if (new_line)
@@ -1943,7 +2001,10 @@ shell_expand_line (count, ignore)
   char *new_line;
   WORD_LIST *expanded_string;
 
+  new_line = 0;
+#if defined (BANG_HISTORY)
   new_line = history_expand_line_internal (rl_line_buffer);
+#endif
 
 #if defined (ALIAS)
   if (new_line)
@@ -2200,7 +2261,7 @@ bash_ignore_everything (names)
 /* Simulate the expansions that will be performed by
    rl_filename_completion_function.  This must be called with the address of
    a pointer to malloc'd memory. */
-static int
+static void
 bash_directory_expansion (dirname)
      char **dirname;
 {
@@ -2296,9 +2357,12 @@ bash_directory_completion_hook (dirname)
       if (temp1[len1 - 1] == '/')
        {
          len2 = strlen (temp2);
-         temp2 = (char *)xrealloc (temp2, len2 + 2);
-         temp2[len2] = '/';
-         temp2[len2 + 1] = '\0';
+         if (len2 > 2)         /* don't append `/' to `/' or `//' */
+           {
+             temp2 = (char *)xrealloc (temp2, len2 + 2);
+             temp2[len2] = '/';
+             temp2[len2 + 1] = '\0';
+           }
        }
       free (local_dirname);
       *dirname = temp2;
@@ -2815,10 +2879,6 @@ bash_quote_filename (s, rtype, qcp)
      to perform tilde expansion, because single and double
      quotes inhibit tilde expansion by the shell. */
 
-  mtext = s;
-  if (mtext[0] == '~' && rtype == SINGLE_MATCH)
-    mtext = bash_tilde_expand (s, 0);
-
   cs = completion_quoting_style;
   /* Might need to modify the default completion style based on *qcp,
      since it's set to any user-provided opening quote.  We also change
@@ -2826,7 +2886,7 @@ bash_quote_filename (s, rtype, qcp)
      the word being completed contains newlines, since those are not
      quoted correctly using backslashes (a backslash-newline pair is
      special to the shell parser). */
-  if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && xstrchr (mtext, '\n'))
+  if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && xstrchr (s, '\n'))
     cs = COMPLETE_SQUOTE;
   else if (*qcp == '"')
     cs = COMPLETE_DQUOTE;
@@ -2834,17 +2894,23 @@ bash_quote_filename (s, rtype, qcp)
     cs = COMPLETE_SQUOTE;
 #if defined (BANG_HISTORY)
   else if (*qcp == '\0' && history_expansion && cs == COMPLETE_DQUOTE &&
-          history_expansion_inhibited == 0 && xstrchr (mtext, '!'))
+          history_expansion_inhibited == 0 && xstrchr (s, '!'))
     cs = COMPLETE_BSQUOTE;
 
   if (*qcp == '"' && history_expansion && cs == COMPLETE_DQUOTE &&
-       history_expansion_inhibited == 0 && xstrchr (mtext, '!'))
+       history_expansion_inhibited == 0 && xstrchr (s, '!'))
     {
       cs = COMPLETE_BSQUOTE;
       *qcp = '\0';
     }
 #endif
 
+  /* Don't tilde-expand backslash-quoted filenames, since only single and
+     double quotes inhibit tilde expansion. */
+  mtext = s;
+  if (mtext[0] == '~' && rtype == SINGLE_MATCH && cs != COMPLETE_BSQUOTE)
+    mtext = bash_tilde_expand (s, 0);
+
   switch (cs)
     {
     case COMPLETE_DQUOTE:
index 53fb527..f75e503 100644 (file)
@@ -41,6 +41,8 @@
 #define SPECIAL_BUILTIN 0x8    /* This is a Posix `special' builtin. */
 #define ASSIGNMENT_BUILTIN 0x10        /* This builtin takes assignment statements. */
 
+#define BASE_INDENT    4
+
 /* The thing that we build the array of builtins out of. */
 struct builtin {
   char *name;                  /* The name that the user types. */
index 4bb4ea5..965b8bd 100644 (file)
@@ -1,6 +1,6 @@
 # This Makefile for building libbuiltins.a is in -*- text -*- for Emacs.
 #
-# Copyright (C) 1996-2003 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.     
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -54,7 +54,7 @@ LIBBUILD = ${BUILD_DIR}/lib
 
 PROFILE_FLAGS = @PROFILE_FLAGS@
 CFLAGS = @CFLAGS@
-CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@
 CPPFLAGS = @CPPFLAGS@
 CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
@@ -96,6 +96,7 @@ GCC_LINT_FLAGS = -Wall -Wshadow -Wpointer-arith -Wcast-qual \
 MKBUILTINS = mkbuiltins$(EXEEXT)
 DIRECTDEFINE = -D $(srcdir)
 HELPDIRDEFINE = @HELPDIRDEFINE@
+HELPSTRINGS = @HELPSTRINGS@
 
 # xxx this is bad style
 RL_LIBSRC = $(topdir)/lib/readline
@@ -160,7 +161,7 @@ builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC)
        @-if test -f builtins.c; then mv -f builtins.c old-builtins.c; fi
        @-if test -f builtext.h; then mv -f builtext.h old-builtext.h; fi
        ./$(MKBUILTINS) -externfile builtext.h -structfile builtins.c \
-           -noproduction $(DIRECTDEFINE) $(HELPDIRDEFINE) $(DEFSRC)
+           -noproduction $(DIRECTDEFINE) $(HELPDIRDEFINE) $(HELPSTRINGS) $(DEFSRC)
        @-if cmp -s old-builtext.h builtext.h 2>/dev/null; then \
                mv old-builtext.h builtext.h; \
         else \
@@ -178,8 +179,7 @@ helpdoc:    $(MKBUILTINS) $(DEFSRC)
 install-help:
        @-if test -n "${HELPDIR}" && test -d helpfiles ; then \
                test -d ${HELPDIR} || ${SHELL} ${MKDIRS} $(DESTDIR)$(HELPDIR) ;\
-               ( cd helpfiles ; \
-                 for f in *; do \
+               ( for f in helpfiles/*; do \
                        echo installing $$f; \
                        ${INSTALL_DATA} $$f $(DESTDIR)$(HELPDIR); \
                  done; ) ; \
@@ -404,12 +404,12 @@ exec.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 exec.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/flags.h
 exec.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
 exec.o: $(srcdir)/common.h $(topdir)/execute_cmd.h $(BASHINCDIR)/maxpath.h
-exec.o: $(topdir)/findcmd.h
+exec.o: $(topdir)/findcmd.h $(topdir)/jobs.h
 exit.o: $(topdir)/bashtypes.h
 exit.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
 exit.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 exit.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
-exit.o: $(topdir)/subst.h $(topdir)/externs.h 
+exit.o: $(topdir)/subst.h $(topdir)/externs.h  $(topdir)/jobs.h
 exit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
 exit.o: $(BASHINCDIR)/maxpath.h ./builtext.h
 fc.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h
@@ -427,6 +427,7 @@ fg_bg.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 fg_bg.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 fg_bg.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
 fg_bg.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
+fg_bg.o: $(topdir)/jobs.h
 getopts.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
 getopts.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 getopts.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
@@ -458,7 +459,7 @@ inlib.o: $(BASHINCDIR)/maxpath.h $(topdir)/subst.h $(topdir)/externs.h
 inlib.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 jobs.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
 jobs.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/quit.h $(srcdir)/bashgetopt.h
-jobs.o: $(BASHINCDIR)/maxpath.h $(topdir)/externs.h 
+jobs.o: $(BASHINCDIR)/maxpath.h $(topdir)/externs.h $(topdir)/jobs.h
 jobs.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
 jobs.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h 
 kill.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
@@ -466,6 +467,7 @@ kill.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/subst.h $(topdir)/exte
 kill.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 kill.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/trap.h $(topdir)/unwind_prot.h
 kill.o: $(topdir)/variables.h $(topdir)/conftypes.h $(BASHINCDIR)/maxpath.h
+kill.o: $(topdir)/jobs.h
 let.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
 let.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 let.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
@@ -525,6 +527,7 @@ suspend.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 suspend.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 suspend.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
 suspend.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
+suspend.o: $(topdir)/jobs.h
 test.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
 test.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 test.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
@@ -565,6 +568,7 @@ wait.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
 wait.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
 wait.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
 wait.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
+wait.o: $(topdir)/jobs.h
 wait.o: $(BASHINCDIR)/chartypes.h
 shopt.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
 shopt.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h 
index d372c58..5142cab 100644 (file)
@@ -55,6 +55,7 @@ $END
 #include "../shell.h"
 #include "common.h"
 #include "builtext.h"
+#include "bashgetopt.h"
 
 #ifdef LOADABLE_BUILTIN
 #  include "builtins.h"
@@ -88,6 +89,10 @@ caller_builtin (list)
   if (bash_source_a == 0 || array_empty (bash_source_a))
     return (EXECUTION_FAILURE);
 
+ if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;       /* skip over possible `--' */
+
   /* If there is no argument list, then give short form: line filename. */
   if (list == 0)
     {
@@ -125,11 +130,11 @@ caller_builtin (list)
 #ifdef LOADABLE_BUILTIN
 static char *caller_doc[] = {
   N_("Returns the context of the current subroutine call."),
-  N_(""),
+  N_(" "),
   N_("Without EXPR, returns returns \"$line $filename\".  With EXPR,"),
   N_("returns \"$line $subroutine $filename\"; this extra information"),
   N_("can be used used to provide a stack trace."),
-  N_(""),
+  N_(" "),
   N_("The value of EXPR indicates how many call frames to go back before the"),
   N_("current one; the top frame is frame 0."),
   (char *)NULL
index 2be86d1..025e4f5 100644 (file)
@@ -1,7 +1,7 @@
 This file is cd.def, from which is created cd.c.  It implements the
 builtins "cd" and "pwd" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -59,6 +59,7 @@ extern int array_needs_making;
 extern char *bash_getcwd_errstr;
 
 static int bindpwd __P((int));
+static void setpwd __P((char *));
 static int change_to_directory __P((char *, int));
 
 static char *cdspell __P((char *));
@@ -84,6 +85,23 @@ instead of following symbolic links; the -L option forces symbolic links
 to be followed.
 $END
 
+/* Just set $PWD, don't change OLDPWD.  Used by `pwd -P' in posix mode. */
+static void
+setpwd (dirname)
+     char *dirname;
+{
+  int old_anm;
+  SHELL_VAR *tvar;
+
+  old_anm = array_needs_making;
+  tvar = bind_variable ("PWD", dirname ? dirname : "", 0);
+  if (old_anm == 0 && array_needs_making && exported_p (tvar))
+    {
+      update_export_env_inplace ("PWD=", 4, dirname ? dirname : "");
+      array_needs_making = 0;
+    }
+}
+
 static int
 bindpwd (no_symlinks)
      int no_symlinks;
@@ -100,19 +118,14 @@ bindpwd (no_symlinks)
   old_anm = array_needs_making;
   pwdvar = get_string_value ("PWD");
 
-  tvar = bind_variable ("OLDPWD", pwdvar);
+  tvar = bind_variable ("OLDPWD", pwdvar, 0);
   if (old_anm == 0 && array_needs_making && exported_p (tvar))
     {
       update_export_env_inplace ("OLDPWD=", 7, pwdvar);
       array_needs_making = 0;
     }
 
-  tvar = bind_variable ("PWD", dirname ? dirname : "");
-  if (old_anm == 0 && array_needs_making && exported_p (tvar))
-    {
-      update_export_env_inplace ("PWD=", 4, dirname ? dirname : "");
-      array_needs_making = 0;
-    }
+  setpwd (dirname);
 
   if (dirname && dirname != the_current_working_directory)
     free (dirname);
@@ -233,9 +246,13 @@ cd_builtin (list)
                printf ("%s\n", path);
 
              free (temp);
+#if 0
              /* Posix.2 says that after using CDPATH, the resultant
                 value of $PWD will not contain `.' or `..'. */
              return (bindpwd (posixly_correct || no_symlinks));
+#else
+             return (bindpwd (no_symlinks));
+#endif
            }
          else
            free (temp);
@@ -298,7 +315,7 @@ cd_builtin (list)
 
 $BUILTIN pwd
 $FUNCTION pwd_builtin
-$SHORT_DOC pwd [-PL]
+$SHORT_DOC pwd [-LP]
 Print the current working directory.  With the -P option, pwd prints
 the physical directory, without any symbolic links; the -L option
 makes pwd follow symbolic links.
@@ -314,16 +331,17 @@ pwd_builtin (list)
      WORD_LIST *list;
 {
   char *directory;
-  int opt;
+  int opt, pflag;
 
   verbatim_pwd = no_symbolic_links;
+  pflag = 0;
   reset_internal_getopt ();
   while ((opt = internal_getopt (list, "LP")) != -1)
     {
       switch (opt)
        {
        case 'P':
-         verbatim_pwd = 1;
+         verbatim_pwd = pflag = 1;
          break;
        case 'L':
          verbatim_pwd = 0;
@@ -342,7 +360,8 @@ pwd_builtin (list)
 
   /* Try again using getcwd() if canonicalization fails (for instance, if
      the file system has changed state underneath bash). */
-  if (tcwd && directory == 0)
+  if ((tcwd && directory == 0) ||
+      (posixly_correct && same_file (".", tcwd, (struct stat *)0, (struct stat *)0) == 0))
     directory = resetpwd ("pwd");
 
 #undef tcwd
@@ -350,12 +369,15 @@ pwd_builtin (list)
   if (directory)
     {
       printf ("%s\n", directory);
+      /* This is dumb but posix-mandated. */
+      if (posixly_correct && pflag)
+       setpwd (directory);
       if (directory != the_current_working_directory)
        free (directory);
       fflush (stdout);
       if (ferror (stdout))
        {
-         builtin_error (_("write error: %s"), strerror (errno));
+         sh_wrerror ();
          clearerr (stdout);
          return (EXECUTION_FAILURE);
        }
@@ -378,7 +400,7 @@ change_to_directory (newdir, nolinks)
      int nolinks;
 {
   char *t, *tdir;
-  int err, canon_failed, r;
+  int err, canon_failed, r, ndlen, dlen;
 
   tdir = (char *)NULL;
 
@@ -396,6 +418,9 @@ change_to_directory (newdir, nolinks)
   tdir = nolinks ? sh_physpath (t, 0)
                 : sh_canonpath (t, PATH_CHECKDOTDOT|PATH_CHECKEXISTS);
 
+  ndlen = strlen (newdir);
+  dlen = strlen (t);
+
   /* Use the canonicalized version of NEWDIR, or, if canonicalization
      failed, use the non-canonical form. */
   canon_failed = 0;
@@ -411,7 +436,7 @@ change_to_directory (newdir, nolinks)
   /* In POSIX mode, if we're resolving symlinks logically and sh_canonpath
      returns NULL (because it checks the path, it will return NULL if the
      resolved path doesn't exist), fail immediately. */
-  if (posixly_correct && nolinks == 0 && canon_failed)
+  if (posixly_correct && nolinks == 0 && canon_failed && (errno != ENAMETOOLONG || ndlen > PATH_MAX))
     {
 #if defined ENAMETOOLONG
       if (errno != ENOENT && errno != ENAMETOOLONG)
@@ -419,6 +444,7 @@ change_to_directory (newdir, nolinks)
       if (errno != ENOENT)
 #endif
        errno = ENOTDIR;
+      free (tdir);
       return (0);
     }
 
@@ -436,13 +462,17 @@ change_to_directory (newdir, nolinks)
       else
        set_working_directory (tdir);
 
+      free (tdir);
       return (1);
     }
 
   /* We failed to change to the appropriate directory name.  If we tried
      what the user passed (nolinks != 0), punt now. */
   if (nolinks)
-    return (0);
+    {
+      free (tdir);
+      return (0);
+    }
 
   err = errno;
 
index dcbbec1..dbc1e9a 100644 (file)
@@ -1,7 +1,7 @@
 This file is command.def, from which is created command.c.
 It implements the builtin "command" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -78,7 +78,7 @@ command_builtin (list)
          use_standard_path = 1;
          break;
        case 'V':
-         verbose = CDESC_SHORTDESC;    /* look in common.h for constants */
+         verbose = CDESC_SHORTDESC|CDESC_ABSPATH;      /* look in common.h for constants */
          break;
        case 'v':
          verbose = CDESC_REUSABLE;     /* ditto */
@@ -101,7 +101,7 @@ command_builtin (list)
        {
          found = describe_command (list->word->word, verbose);
 
-         if (found == 0)
+         if (found == 0 && verbose != CDESC_REUSABLE)
            sh_notfound (list->word->word);
 
          any_found += found;
@@ -131,7 +131,7 @@ command_builtin (list)
       add_unwind_protect ((Function *)restore_path, old_path);
 
       standard_path = get_standard_path ();
-      bind_variable ("PATH", standard_path ? standard_path : "");
+      bind_variable ("PATH", standard_path ? standard_path : "", 0);
       FREE (standard_path);
     }
 
@@ -170,7 +170,7 @@ restore_path (var)
 {
   if (var)
     {
-      bind_variable ("PATH", var);
+      bind_variable ("PATH", var, 0);
       free (var);
     }
   else
index 3d3dd59..9d8f09a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -270,6 +270,12 @@ sh_notbuiltin (s)
   builtin_error (_("%s: not a shell builtin"), s);
 }
 
+void
+sh_wrerror ()
+{
+  builtin_error (_("write error: %s"), strerror (errno));
+}
+
 /* **************************************************************** */
 /*                                                                 */
 /*          Shell positional parameter manipulation                */
@@ -508,15 +514,17 @@ get_job_by_name (name, flags)
 {
   register int i, wl, cl, match, job;
   register PROCESS *p;
+  register JOB *j;
 
   job = NO_JOB;
   wl = strlen (name);
-  for (i = job_slots - 1; i >= 0; i--)
+  for (i = js.j_jobslots - 1; i >= 0; i--)
     {
-      if (jobs[i] == 0 || ((flags & JM_STOPPED) && JOBSTATE(i) != JSTOPPED))
+      j = get_job_by_jid (i);
+      if (j == 0 || ((flags & JM_STOPPED) && J_JOBSTATE(j) != JSTOPPED))
         continue;
 
-      p = jobs[i]->pipe;
+      p = j->pipe;
       do
         {
          if (flags & JM_EXACT)
@@ -547,7 +555,7 @@ get_job_by_name (name, flags)
          else
            job = i;
         }
-      while (p != jobs[i]->pipe);
+      while (p != j->pipe);
     }
 
   return (job);
@@ -562,7 +570,7 @@ get_job_spec (list)
   int job, jflags;
 
   if (list == 0)
-    return (current_job);
+    return (js.j_current);
 
   word = list->word->word;
 
@@ -575,20 +583,19 @@ get_job_spec (list)
   if (DIGIT (*word) && all_digits (word))
     {
       job = atoi (word);
-      return (job > job_slots ? NO_JOB : job - 1);
+      return (job > js.j_jobslots ? NO_JOB : job - 1);
     }
 
   jflags = 0;
   switch (*word)
     {
     case 0:
-       return NO_JOB;
     case '%':
     case '+':
-      return (current_job);
+      return (js.j_current);
 
     case '-':
-      return (previous_job);
+      return (js.j_previous);
 
     case '?':                  /* Substring search requested. */
       jflags |= JM_SUBSTRING;
index 411ce1e..df30325 100644 (file)
@@ -40,6 +40,7 @@
 #define CDESC_PATH_ONLY                0x010   /* type -p */
 #define CDESC_FORCE_PATH       0x020   /* type -ap or type -P */
 #define CDESC_NOFUNCS          0x040   /* type -f */
+#define CDESC_ABSPATH          0x080   /* convert to absolute path, no ./ */
 
 /* Flags for get_job_by_name */
 #define JM_PREFIX              0x01    /* prefix of job name */
@@ -76,6 +77,7 @@ extern void sh_readonly __P((const char *));
 extern void sh_nojobs __P((char *));
 extern void sh_restricted __P((char *));
 extern void sh_notbuiltin __P((char *));
+extern void sh_wrerror __P((void));
 
 extern char **make_builtin_argv __P((WORD_LIST *, int *));
 extern void remember_args __P((WORD_LIST *, int));
index fe112dd..d94118f 100644 (file)
@@ -1,7 +1,7 @@
 This file is declare.def, from which is created declare.c.
 It implements the builtins "declare" and "local" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -222,18 +222,24 @@ declare_internal (list, local_var)
   while (list)         /* declare [-afFirx] name [name ...] */
     {
       char *value, *name;
-      int offset;
+      int offset, aflags;
 #if defined (ARRAY_VARS)
       int making_array_special, compound_array_assign, simple_array_assign;
 #endif
 
       name = savestring (list->word->word);
       offset = assignment (name, 0);
+      aflags = 0;
 
       if (offset)      /* declare [-afFirx] name=value */
        {
          name[offset] = '\0';
          value = name + offset + 1;
+         if (name[offset - 1] == '+')
+           {
+             aflags |= ASS_APPEND;
+             name[offset - 1] = '\0';
+           }
        }
       else
        value = "";
@@ -353,7 +359,7 @@ declare_internal (list, local_var)
                var = make_new_array_variable (name);
              else
 #endif
-             var = bind_variable (name, "");
+             var = bind_variable (name, "", 0);
            }
 
          /* Cannot use declare +r to turn off readonly attribute. */ 
@@ -377,7 +383,13 @@ declare_internal (list, local_var)
 #if defined (ARRAY_VARS)
          if ((making_array_special || (flags_on & att_array) || array_p (var)) && offset)
            {
+             int vlen;
+             vlen = STRLEN (value);
+#if 0
              if (value[0] == '(' && strchr (value, ')'))
+#else
+             if (value[0] == '(' && value[vlen-1] == ')')
+#endif
                compound_array_assign = 1;
              else
                simple_array_assign = 1;
@@ -401,23 +413,23 @@ declare_internal (list, local_var)
 
 #if defined (ARRAY_VARS)
          if (offset && compound_array_assign)
-           assign_array_var_from_string (var, value);
+           assign_array_var_from_string (var, value, aflags);
          else if (simple_array_assign && subscript_start)
            {
              /* declare [-a] name[N]=value */
              *subscript_start = '[';   /* ] */
-             var = assign_array_element (name, value);
+             var = assign_array_element (name, value, 0);      /* XXX - not aflags */
              *subscript_start = '\0';
            }
          else if (simple_array_assign)
            /* let bind_array_variable take care of this. */
-           bind_array_variable (name, 0, value);
+           bind_array_variable (name, 0, value, aflags);
          else
 #endif
          /* bind_variable_value duplicates the essential internals of
             bind_variable() */
          if (offset)
-           bind_variable_value (var, value);
+           bind_variable_value (var, value, aflags);
 
          /* If we found this variable in the temporary environment, as with
             `var=value declare -x var', make sure it is treated identically
@@ -437,7 +449,7 @@ declare_internal (list, local_var)
              if (tv)
                {
                  tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
-                 tv = bind_variable (var->name, tvalue);
+                 tv = bind_variable (var->name, tvalue, 0);
                  tv->attributes |= var->attributes & ~att_tempvar;
                  if (tv->context > 0)
                    VSETATTR (tv, att_propagate);
index a91c8e4..6792659 100644 (file)
@@ -72,12 +72,14 @@ $END
    existing system shells won't barf.  Regrettably, the SUS v2 has
    standardized the Sys V echo behavior.  This variable is external
    so that we can have a `shopt' variable to control it at runtime. */
-#if defined (DEFAULT_ECHO_TO_XPG)
+#if defined (DEFAULT_ECHO_TO_XPG) || defined (STRICT_POSIX)
 int xpg_echo = 1;
 #else
 int xpg_echo = 0;
 #endif /* DEFAULT_ECHO_TO_XPG */
 
+extern int posixly_correct;
+
 /* Print the words in LIST to standard output.  If the first word is
    `-n', then don't print a trailing newline.  We also support the
    echo syntax from Version 9 Unix systems. */
@@ -91,6 +93,9 @@ echo_builtin (list)
   do_v9 = xpg_echo;
   display_return = 1;
 
+  if (posixly_correct && xpg_echo)
+    goto just_echo;
+
   for (; list && (temp = list->word->word) && *temp == '-'; list = list->next)
     {
       /* If it appears that we are handling options, then make sure that
@@ -170,6 +175,7 @@ just_echo:
   fflush (stdout);
   if (ferror (stdout))
     {
+      sh_wrerror ();
       clearerr (stdout);
       return (EXECUTION_FAILURE);
     }
index c17e547..81be017 100644 (file)
@@ -39,6 +39,7 @@
 #include "../flags.h"
 #include "../input.h"
 #include "../execute_cmd.h"
+#include "../trap.h"
 
 #if defined (HISTORY)
 #  include "../bashhist.h"
@@ -82,7 +83,7 @@ _evalfile (filename, flags)
   size_t file_size;
   sh_vmsg_func_t *errfunc;
 #if defined (ARRAY_VARS)
-  SHELL_VAR *funcname_v, *bash_source_v, *bash_lineno_v;
+  SHELL_VAR *funcname_v, *nfv, *bash_source_v, *bash_lineno_v;
   ARRAY *funcname_a, *bash_source_a, *bash_lineno_a;
 #  if defined (DEBUGGER)
   SHELL_VAR *bash_argv_v, *bash_argc_v;
@@ -246,9 +247,16 @@ file_error_and_exit:
     }
 
 #if defined (ARRAY_VARS)
+  /* These two variables cannot be unset, and cannot be affected by the
+     sourced file. */
   array_pop (bash_source_a);
   array_pop (bash_lineno_a);
-  array_pop (funcname_a);
+
+  /* FUNCNAME can be unset, and so can potentially be changed by the
+     sourced file. */
+  GET_ARRAY_FROM_VAR ("FUNCNAME", nfv, funcname_a);
+  if (nfv == funcname_v)
+    array_pop (funcname_a);
 #  if defined (DEBUGGER)
   if ((flags & FEVAL_NOPUSHARGS) == 0)
     {
index 88d6a9e..04afac3 100644 (file)
@@ -1,4 +1,6 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Evaluate a string as one or more shell commands.
+
+   Copyright (C) 1996-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -58,6 +60,7 @@ extern int indirection_level, startup_state, subshell_environment;
 extern int line_number;
 extern int last_command_exit_value;
 extern int running_trap;
+extern int loop_level;
 extern int posixly_correct;
 
 int parse_and_execute_level = 0;
@@ -105,6 +108,7 @@ parse_and_execute (string, from_file, flags)
   unwind_protect_jmp_buf (top_level);
   unwind_protect_int (indirection_level);
   unwind_protect_int (line_number);
+  unwind_protect_int (loop_level);
   if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
     unwind_protect_int (interactive);
 
@@ -231,17 +235,21 @@ parse_and_execute (string, from_file, flags)
               * IF
               *   we were invoked as `bash -c' (startup_state == 2) AND
               *   parse_and_execute has not been called recursively AND
+              *   we're not running a trap AND
               *   we have parsed the full command (string == '\0') AND
               *   we have a simple command without redirections AND
-              *   the command is not being timed
+              *   the command is not being timed AND
+              *   the command's return status is not being inverted
               * THEN
               *   tell the execution code that we don't need to fork
               */
              if (startup_state == 2 && parse_and_execute_level == 1 &&
+                 running_trap == 0 &&
                  *bash_input.location.string == '\0' &&
                  command->type == cm_simple &&
                  !command->redirects && !command->value.Simple->redirects &&
-                 ((command->flags & CMD_TIME_PIPELINE) == 0))
+                 ((command->flags & CMD_TIME_PIPELINE) == 0) &&
+                 ((command->flags & CMD_INVERT_RETURN) == 0))
                {
                  command->flags |= CMD_NO_FORK;
                  command->value.Simple->flags |= CMD_NO_FORK;
index acfdae1..0818a25 100644 (file)
@@ -221,7 +221,8 @@ failed_exec:
   initialize_signals (1);
 
 #if defined (JOB_CONTROL)
-  restart_job_control ();
+  if (interactive_shell || job_control)
+    restart_job_control ();
 #endif /* JOB_CONTROL */
 
   return (exit_value);
index 9384ade..ddaa5d3 100644 (file)
@@ -1,7 +1,7 @@
 This file is exit.def, from which is created exit.c.
 It implements the builtins "exit", and "logout" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -105,7 +105,7 @@ exit_or_logout (list)
   if (!exit_immediate_okay)
     {
       register int i;
-      for (i = 0; i < job_slots; i++)
+      for (i = 0; i < js.j_jobslots; i++)
        if (jobs[i] && STOPPED (i))
          {
            fprintf (stderr, _("There are stopped jobs.\n"));
index 93c7ae3..ebe3683 100644 (file)
@@ -1,7 +1,7 @@
 This file is fc.def, from which is created fc.c.
 It implements the builtin "fc" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -84,10 +84,12 @@ extern int errno;
 extern int echo_input_at_read;
 extern int current_command_line_count;
 extern int literal_history;
+extern int posixly_correct;
 
 extern int unlink __P((const char *));
 
 extern FILE *sh_mktmpfp __P((char *, int, char **));
+extern int delete_last_history __P((void));
 
 /* **************************************************************** */
 /*                                                                 */
@@ -155,6 +157,11 @@ static void fc_addhist __P((char *));
 
 /* String to execute on a file that we want to edit. */
 #define FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-vi}}"
+#if defined (STRICT_POSIX)
+#  define POSIX_FC_EDIT_COMMAND "${FCEDIT:-ed}"
+#else
+#  define POSIX_FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-ed}}"
+#endif
 
 int
 fc_builtin (list)
@@ -166,7 +173,7 @@ fc_builtin (list)
   int histbeg, histend, last_hist, retval, opt;
   FILE *stream;
   REPL *rlist, *rl;
-  char *ename, *command, *newcom;
+  char *ename, *command, *newcom, *fcedit;
   HIST_ENTRY **hlist;
   char *fn;
 
@@ -284,6 +291,11 @@ fc_builtin (list)
      line was actually added (HISTIGNORE may have caused it to not be),
      so we check hist_last_line_added. */
 
+  /* "When not  listing, he fc command that caused the editing shall not be
+     entered into the history list." */
+  if (listing == 0 && hist_last_line_added)
+    delete_last_history ();
+
   last_hist = i - 1 - hist_last_line_added;
 
   if (list)
@@ -302,7 +314,7 @@ fc_builtin (list)
       if (listing)
        {
          histend = last_hist;
-         histbeg = histend - 16;
+         histbeg = histend - 16 + 1;   /* +1 because loop below uses >= */
          if (histbeg < 0)
            histbeg = 0;
        }
@@ -347,7 +359,12 @@ fc_builtin (list)
       if (numbering)
        fprintf (stream, "%d", i + history_base);
       if (listing)
-       fprintf (stream, "\t%c", histdata (i) ? '*' : ' ');
+       {
+         if (posixly_correct)
+           fputs ("\t", stream);
+         else
+           fprintf (stream, "\t%c", histdata (i) ? '*' : ' ');
+       }
       fprintf (stream, "%s\n", histline (i));
     }
 
@@ -364,8 +381,9 @@ fc_builtin (list)
     }
   else
     {
-      command = (char *)xmalloc (3 + strlen (FC_EDIT_COMMAND) + strlen (fn));
-      sprintf (command, "%s %s", FC_EDIT_COMMAND, fn);
+      fcedit = posixly_correct ? POSIX_FC_EDIT_COMMAND : FC_EDIT_COMMAND;
+      command = (char *)xmalloc (3 + strlen (fcedit) + strlen (fn));
+      sprintf (command, "%s %s", fcedit, fn);
     }
   retval = parse_and_execute (command, "fc", SEVAL_NOHIST);
   if (retval != EXECUTION_SUCCESS)
@@ -489,7 +507,7 @@ fc_gethist (command, hlist)
 {
   int i;
 
-  if (!hlist)
+  if (hlist == 0)
     return ((char *)NULL);
 
   i = fc_gethnum (command, hlist);
@@ -573,41 +591,18 @@ static void
 fc_replhist (command)
      char *command;
 {
-  register int i;
-  HIST_ENTRY **hlist, *histent, *discard;
   int n;
 
   if (command == 0 || *command == '\0')
     return;
 
-  hlist = history_list ();
-
-  if (hlist == NULL)
-    return;
-
-  for (i = 0; hlist[i]; i++);
-  i--;
-
-  /* History_get () takes a parameter that should be
-     offset by history_base. */
-
-  histent = history_get (history_base + i);    /* Don't free this */
-  if (histent == NULL)
-    return;
-
   n = strlen (command);
-
   if (command[n - 1] == '\n')
     command[n - 1] = '\0';
 
   if (command && *command)
     {
-      discard = remove_history (i);
-      if (discard)
-       {
-         FREE (discard->line);
-         free ((char *) discard);
-       }
+      delete_last_history ();
       maybe_add_history (command);     /* Obeys HISTCONTROL setting. */
     }
 }
@@ -620,13 +615,16 @@ fc_addhist (line)
 {
   register int n;
 
+  if (line == 0 || *line == 0)
+    return;
+
   n = strlen (line);
 
   if (line[n - 1] == '\n')
     line[n - 1] = '\0';
 
   if (line && *line)
-    maybe_add_history (line);
+    maybe_add_history (line);          /* Obeys HISTCONTROL setting. */
 }
 #endif
 
index ea13bef..c14381b 100644 (file)
@@ -1,7 +1,7 @@
 This file is fg_bg.def, from which is created fg_bg.c.
 It implements the builtins "bg" and "fg" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -82,8 +82,8 @@ fg_builtin (list)
 $BUILTIN bg
 $FUNCTION bg_builtin
 $DEPENDS_ON JOB_CONTROL
-$SHORT_DOC bg [job_spec]
-Place JOB_SPEC in the background, as if it had been started with
+$SHORT_DOC bg [job_spec ...]
+Place each JOB_SPEC in the background, as if it had been started with
 `&'.  If JOB_SPEC is not present, the shell's notion of the current
 job is used.
 $END
@@ -94,6 +94,8 @@ int
 bg_builtin (list)
      WORD_LIST *list;
 {
+  int r;
+
   if (job_control == 0)
     {
       sh_nojobs ((char *)NULL);
@@ -104,7 +106,19 @@ bg_builtin (list)
     return (EX_USAGE);
   list = loptend;
 
-  return (fg_bg (list, 0));
+  /* This relies on the fact that fg_bg() takes a WORD_LIST *, but only acts
+     on the first member (if any) of that list. */
+  r = EXECUTION_SUCCESS;
+  do
+    {
+      if (fg_bg (list, 0) == EXECUTION_FAILURE)
+       r = EXECUTION_FAILURE;
+      if (list)
+       list = list->next;
+    }
+  while (list);
+
+  return r;
 }
 
 /* How to put a job into the foreground/background. */
@@ -115,11 +129,12 @@ fg_bg (list, foreground)
 {
   sigset_t set, oset;
   int job, status, old_async_pid;
+  JOB *j;
 
   BLOCK_CHILD (set, oset);
   job = get_job_spec (list);
 
-  if (job < 0 || job >= job_slots || jobs[job] == 0)
+  if (INVALID_JOB (job))
     {
       if (job != DUP_JOB)
        sh_badjob (list ? list->word->word : "current");
@@ -127,7 +142,8 @@ fg_bg (list, foreground)
       goto failure;
     }
 
-  /* Or if jobs[job]->pgrp == shell_pgrp. */
+  j = get_job_by_jid (job);
+  /* Or if j->pgrp == shell_pgrp. */
   if (IS_JOBCONTROL (job) == 0)
     {
       builtin_error (_("job %d started without job control"), job + 1);
@@ -137,7 +153,7 @@ fg_bg (list, foreground)
   if (foreground == 0)
     {
       old_async_pid = last_asynchronous_pid;
-      last_asynchronous_pid = jobs[job]->pgrp; /* As per Posix.2 5.4.2 */
+      last_asynchronous_pid = j->pgrp; /* As per Posix.2 5.4.2 */
     }
 
   status = start_job (job, foreground);
@@ -146,7 +162,7 @@ fg_bg (list, foreground)
     {
     /* win: */
       UNBLOCK_CHILD (oset);
-      return (status);
+      return (foreground ? status : EXECUTION_SUCCESS);
     }
   else
     {
index eb0a31d..a9aad62 100644 (file)
@@ -1,7 +1,7 @@
 This file is getopts.def, from which is created getopts.c.
 It implements the builtin "getopts" in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -101,7 +101,7 @@ getopts_bind_variable (name, value)
 
   if (legal_identifier (name))
     {
-      v = bind_variable (name, value);
+      v = bind_variable (name, value, 0);
       return (v && (readonly_p (v) == 0)) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
     }
   else
@@ -228,7 +228,7 @@ dogetopts (argc, argv)
        }
       while (n /= 10);
     }
-  bind_variable ("OPTIND", numval + i);
+  bind_variable ("OPTIND", numval + i, 0);
 
   /* If an error occurred, decide which one it is and set the return
      code appropriately.  In all cases, the option character in error
@@ -259,7 +259,7 @@ dogetopts (argc, argv)
        {
          strval[0] = (char)sh_optopt;
          strval[1] = '\0';
-         bind_variable ("OPTARG", strval);
+         bind_variable ("OPTARG", strval, 0);
        }
       else
        unbind_variable ("OPTARG");
@@ -276,7 +276,7 @@ dogetopts (argc, argv)
 
          strval[0] = (char)sh_optopt;
          strval[1] = '\0';
-         bind_variable ("OPTARG", strval);
+         bind_variable ("OPTARG", strval, 0);
        }
       else
        {
@@ -286,7 +286,7 @@ dogetopts (argc, argv)
       return (ret);
     }                  
 
-  bind_variable ("OPTARG", sh_optarg);
+  bind_variable ("OPTARG", sh_optarg, 0);
 
   strval[0] = (char) ret;
   strval[1] = '\0';
index d311ac9..b295952 100644 (file)
@@ -125,7 +125,7 @@ hash_builtin (list)
   if (list == 0 && expunge_hash_table == 0)
     {
       if (print_hashed_commands (list_portably) == 0)
-       printf (_("%s: hash table empty\n"), this_command_name);
+       fprintf (stderr, _("%s: hash table empty\n"), this_command_name);
 
       return (EXECUTION_SUCCESS);
     }
@@ -165,10 +165,13 @@ hash_builtin (list)
        }
       else if (absolute_program (w))
        continue;
-      else if (delete && phash_remove (w))
+      else if (delete)
        {
-         sh_notfound (w);
-         opt = EXECUTION_FAILURE;
+         if (phash_remove (w))
+           {
+             sh_notfound (w);
+             opt = EXECUTION_FAILURE;
+           }
        }
       else if (add_hashed_command (w, 0))
        opt = EXECUTION_FAILURE;
index 1935b64..35a6de9 100644 (file)
@@ -169,7 +169,7 @@ show_longdoc (i)
     }
   else
     for (j = 0; doc[j]; j++)
-      printf ("    %s\n", _(doc[j]));
+      printf ("%*s%s\n", BASE_INDENT, " ", _(doc[j]));
 }
 
 static void
index 52b1113..efee005 100644 (file)
@@ -77,11 +77,13 @@ extern int errno;
 #endif
 
 extern int current_command_line_count;
+extern int force_append_history;       /* shopt -s histappend */
+
+int delete_last_history __P((void));
 
 static char *histtime __P((HIST_ENTRY *, const char *));
 static void display_history __P((WORD_LIST *));
 static int delete_histent __P((int));
-static int delete_last_history __P((void));
 static void push_history __P((WORD_LIST *));
 static int expand_and_print_history __P((WORD_LIST *));
 
@@ -214,15 +216,19 @@ history_builtin (list)
       using_history ();
 
       history_lines_in_file = where_history ();
-      /* The question is whether we reset history_lines_this_session to 0,
-        losing any history entries we had before we read the new entries
-        from the history file, or whether we count the new entries we just
-        read from the file as history lines added during this session.
+
+      /* If we're rewriting the history file at shell exit rather than just
+        appending the lines from this session to it, the question is whether
+        we reset history_lines_this_session to 0, losing any history entries
+        we had before we read the new entries from the history file, or
+        whether we count the new entries we just read from the file as
+        history lines added during this session.
         Right now, we do the latter.  This will cause these history entries
         to be written to the history file along with any intermediate entries
         we add when we do a `history -a', but the alternative is losing
         them altogether. */
-      history_lines_this_session += history_lines_in_file - old_history_lines +
+      if (force_append_history == 0)
+       history_lines_this_session += history_lines_in_file - old_history_lines +
                                    history_base - obase;
     }
 
@@ -310,7 +316,7 @@ delete_histent (i)
   return 1;
 }
 
-static int
+int
 delete_last_history ()
 {
   register int i;
@@ -353,9 +359,11 @@ push_history (list)
      If you don't want history -s to remove the compound command from the
      history, change #if 0 to #if 1 below. */
 #if 0
-  if (hist_last_line_added && delete_last_history () == 0)
+  if (hist_last_line_pushed == 0 && hist_last_line_added && delete_last_history () == 0)
 #else
-  if ((hist_last_line_added || (current_command_line_count > 0 && current_command_first_line_saved && command_oriented_history))
+  if (hist_last_line_pushed == 0 &&
+       (hist_last_line_added ||
+         (current_command_line_count > 0 && current_command_first_line_saved && command_oriented_history))
       && delete_last_history () == 0)
 #endif
       return;
@@ -368,6 +376,8 @@ push_history (list)
      entry.  Without FORCE=1, if current_command_line_count were > 1, the
      line would be appended to the entry before the just-deleted entry. */
   check_add_history (s, 1);    /* obeys HISTCONTROL, HISTIGNORE */
+
+  hist_last_line_pushed = 1;   /* XXX */
   free (s);
 }
 
@@ -379,7 +389,7 @@ expand_and_print_history (list)
   char *s;
   int r, result;
 
-  if (hist_last_line_added && delete_last_history () == 0)
+  if (hist_last_line_pushed == 0 && hist_last_line_added && delete_last_history () == 0)
     return EXECUTION_FAILURE;
   result = EXECUTION_SUCCESS;
   while (list)
index 76d1957..4c3ba6a 100644 (file)
@@ -1,7 +1,7 @@
 This file is jobs.def, from which is created jobs.c.
 It implements the builtins "jobs" and "disown" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -141,7 +141,7 @@ jobs_builtin (list)
       BLOCK_CHILD (set, oset);
       job = get_job_spec (list);
 
-      if ((job == NO_JOB) || !jobs || !jobs[job])
+      if ((job == NO_JOB) || jobs == 0 || get_job_by_jid (job) == 0)
        {
          sh_badjob (list->word->word);
          any_failed++;
@@ -162,6 +162,7 @@ execute_list_with_replacements (list)
   register WORD_LIST *l;
   int job, result;
   COMMAND *command;
+  JOB *j;
 
   /* First do the replacement of job specifications with pids. */
   for (l = list; l; l = l->next)
@@ -171,11 +172,12 @@ execute_list_with_replacements (list)
          job = get_job_spec (l);
 
          /* A bad job spec is not really a job spec! Pass it through. */
-         if (job < 0 || job >= job_slots || !jobs[job])
+         if (INVALID_JOB (job))
            continue;
 
+         j = get_job_by_jid (job);
          free (l->word->word);
-         l->word->word = itos (jobs[job]->pgrp);
+         l->word->word = itos (j->pgrp);
        }
     }
 
@@ -257,7 +259,7 @@ disown_builtin (list)
                ? get_job_by_pid ((pid_t) pid_value, 0)
                : get_job_spec (list);
 
-      if (job == NO_JOB || jobs == 0 || job < 0 || job >= job_slots || jobs[job] == 0)
+      if (job == NO_JOB || jobs == 0 || INVALID_JOB (job))
        {
          sh_badjob (list ? list->word->word : "current");
          retval = EXECUTION_FAILURE;
index d1b9f6d..bedbb1a 100644 (file)
@@ -1,7 +1,7 @@
 This file is kill.def, from which is created kill.c.
 It implements the builtin "kill" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,8 +23,8 @@ $PRODUCES kill.c
 
 $BUILTIN kill
 $FUNCTION kill_builtin
-$SHORT_DOC kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
-Send the processes named by PID (or JOB) the signal SIGSPEC.  If
+$SHORT_DOC kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
+Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If
 SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'
 lists the signal names; if arguments follow `-l' they are assumed to
 be signal numbers for which names should be listed.  Kill is a shell
@@ -170,7 +170,7 @@ kill_builtin (list)
        {
          pid = (pid_t) pid_value;
 
-         if ((pid < -1 ? kill_pid (-pid, sig, 1) : kill_pid (pid, sig, 0)) < 0)
+         if (kill_pid (pid, sig, pid < -1) < 0)
            {
              if (errno == EINVAL)
                sh_invalidsig (sigspec);
@@ -192,11 +192,12 @@ kill_builtin (list)
        {                       /* Must be a job spec.  Check it out. */
          int job;
          sigset_t set, oset;
+         JOB *j;
 
          BLOCK_CHILD (set, oset);
          job = get_job_spec (list);
 
-         if (job < 0 || job >= job_slots || !jobs[job])
+         if (INVALID_JOB (job))
            {
              if (job != DUP_JOB)
                sh_badjob (list->word->word);
@@ -204,11 +205,12 @@ kill_builtin (list)
              CONTINUE_OR_FAIL;
            }
 
+         j = get_job_by_jid (job);
          /* Job spec used.  Kill the process group. If the job was started
             without job control, then its pgrp == shell_pgrp, so we have
             to be careful.  We take the pid of the first job in the pipeline
             in that case. */
-         pid = IS_JOBCONTROL (job) ? jobs[job]->pgrp : jobs[job]->pipe->pid;
+         pid = IS_JOBCONTROL (job) ? j->pgrp : j->pipe->pid;
 
          UNBLOCK_CHILD (oset);
 
index 278755b..94953e6 100644 (file)
@@ -63,6 +63,8 @@ extern char *strcpy ();
 #define BUILTIN_FLAG_SPECIAL   0x01
 #define BUILTIN_FLAG_ASSIGNMENT 0x02
 
+#define BASE_INDENT    4
+
 /* If this stream descriptor is non-zero, then write
    texinfo documentation to it. */
 FILE *documentation_file = (FILE *)NULL;
@@ -77,6 +79,10 @@ int inhibit_production = 0;
    the builtin name, in `./helpfiles'. */
 int separate_helpfiles = 0;
 
+/* Non-zero means to create single C strings for each `longdoc', with
+   embedded newlines, for ease of translation. */
+int single_longdoc_strings = 1;
+
 /* The name of a directory into which the separate external help files will
    eventually be installed. */
 char *helpfile_directory;
@@ -128,7 +134,7 @@ ARRAY *saved_builtins = (ARRAY *)NULL;
 char *special_builtins[] =
 {
   ":", ".", "source", "break", "continue", "eval", "exec", "exit",
-  "export", "readonly", "return", "set", "shift", "trap", "unset",
+  "export", "readonly", "return", "set", "shift", "times", "trap", "unset",
   (char *)NULL
 };
 
@@ -225,6 +231,8 @@ main (argc, argv)
          separate_helpfiles = 1;
          helpfile_directory = argv[arg_index++];
         }
+      else if (strcmp (arg, "-S") == 0)
+       single_longdoc_strings = 0;
       else
        {
          fprintf (stderr, "%s: Unknown flag %s.\n", argv[0], arg);
@@ -373,14 +381,8 @@ array_add (element, array)
     array->array = (char **)xrealloc
       (array->array, (array->size += array->growth_rate) * array->width);
 
-#if defined (HAVE_BCOPY)
-  bcopy (&element, (char *) &(array->array[array->sindex]), array->width);
-  array->sindex++;
-  bzero ((char *) &(array->array[array->sindex]), array->width);
-#else
   array->array[array->sindex++] = element;
   array->array[array->sindex] = (char *)NULL;
-#endif /* !HAVE_BCOPY */
 }
 
 /* Free an allocated array and data pointer. */
@@ -1058,9 +1060,10 @@ save_builtin (builtin)
 }
 
 /* Flags that mean something to write_documentation (). */
-#define STRING_ARRAY   1
-#define TEXINFO                2
-#define PLAINTEXT      4
+#define STRING_ARRAY   0x01
+#define TEXINFO                0x02
+#define PLAINTEXT      0x04
+#define HELPFILE       0x08
 
 char *structfile_header[] = {
   "/* builtins.c -- the built in shell commands. */",
@@ -1271,7 +1274,7 @@ write_longdocs (stream, builtins)
          sarray[0] = (char *)xmalloc (l + 1);
          sprintf (sarray[0], "%s/%s", helpfile_directory, dname);
          sarray[1] = (char *)NULL;
-         write_documentation (stream, sarray, 0, STRING_ARRAY);
+         write_documentation (stream, sarray, 0, STRING_ARRAY|HELPFILE);
          free (sarray[0]);
        }
       else
@@ -1343,8 +1346,10 @@ write_endifs (stream, defines)
   fprintf (stream, " */\n");
 }
 
-/* Write DOCUMENTAION to STREAM, perhaps surrounding it with double-quotes
-   and quoting special characters in the string. */
+/* Write DOCUMENTATION to STREAM, perhaps surrounding it with double-quotes
+   and quoting special characters in the string.  Handle special things for
+   internationalization (gettext) and the single-string vs. multiple-strings
+   issues. */
 void
 write_documentation (stream, documentation, indentation, flags)
      FILE *stream;
@@ -1353,33 +1358,59 @@ write_documentation (stream, documentation, indentation, flags)
 {
   register int i, j;
   register char *line;
-  int string_array, texinfo;
+  int string_array, texinfo, base_indent, last_cpp, filename_p;
 
   if (!stream)
     return;
 
   string_array = flags & STRING_ARRAY;
+  filename_p = flags & HELPFILE;
+
   if (string_array)
-    fprintf (stream, " {\n#if defined (HELP_BUILTIN)\n");
+    {
+      fprintf (stream, " {\n#if defined (HELP_BUILTIN)\n");    /* } */
+      if (single_longdoc_strings)
+       {
+         if (filename_p == 0)
+           fprintf (stream, "N_(\" ");         /* the empty string translates specially. */
+         else
+           fprintf (stream, "\"");
+       }
+    }
+
+  base_indent = (string_array && single_longdoc_strings && filename_p == 0) ? BASE_INDENT : 0;
 
-  for (i = 0, texinfo = (flags & TEXINFO); line = documentation[i]; i++)
+  for (i = last_cpp = 0, texinfo = (flags & TEXINFO); line = documentation[i]; i++)
     {
-      /* Allow #ifdef's to be written out verbatim. */
+      /* Allow #ifdef's to be written out verbatim, but don't put them into
+        separate help files. */
       if (*line == '#')
        {
-         if (string_array)
+         if (string_array && filename_p == 0 && single_longdoc_strings == 0)
            fprintf (stream, "%s\n", line);
+         last_cpp = 1;
          continue;
        }
+      else
+       last_cpp = 0;
 
       /* prefix with N_( for gettext */
-      if (string_array)
-       fprintf (stream, "  N_(\"");
+      if (string_array && single_longdoc_strings == 0)
+       {
+         if (filename_p == 0)
+           fprintf (stream, "  N_(\" ");               /* the empty string translates specially. */
+         else
+           fprintf (stream, "  \"");
+       }
 
       if (indentation)
        for (j = 0; j < indentation; j++)
          fprintf (stream, " ");
 
+      /* Don't indent the first line, because of how the help builtin works. */
+      if (i == 0)
+       indentation += base_indent;
+
       if (string_array)
        {
          for (j = 0; line[j]; j++)
@@ -1397,7 +1428,16 @@ write_documentation (stream, documentation, indentation, flags)
            }
 
          /* closing right paren for gettext */
-         fprintf (stream, "\"),\n");
+         if (single_longdoc_strings == 0)
+           {
+             if (filename_p == 0)
+               fprintf (stream, "\"),\n");
+             else
+               fprintf (stream, "\",\n");
+           }
+         else if (documentation[i+1])
+           /* don't add extra newline after last line */
+           fprintf (stream, "\\n\\\n");
        }
       else if (texinfo)
        {
@@ -1421,6 +1461,15 @@ write_documentation (stream, documentation, indentation, flags)
        fprintf (stream, "%s\n", line);
     }
 
+  /* closing right paren for gettext */
+  if (string_array && single_longdoc_strings)
+    {
+      if (filename_p == 0)
+       fprintf (stream, "\"),\n");
+      else
+       fprintf (stream, "\",\n");
+    }
+
   if (string_array)
     fprintf (stream, "#endif /* HELP_BUILTIN */\n  (char *)NULL\n};\n");
 }
index 9b377a9..e4e3170 100644 (file)
@@ -1,7 +1,7 @@
 This file is printf.def, from which is created printf.c.
 It implements the builtin "printf" in Bash.
 
-Copyright (C) 1997-2003 Free Software Foundation, Inc.
+Copyright (C) 1997-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,7 +23,7 @@ $PRODUCES printf.c
 
 $BUILTIN printf
 $FUNCTION printf_builtin
-$SHORT_DOC printf format [arguments]
+$SHORT_DOC printf [-v var] format [arguments]
 printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT
 is a character string which contains three types of objects: plain
 characters, which are simply copied to standard output, character escape
@@ -32,6 +32,8 @@ format specifications, each of which causes printing of the next successive
 argument.  In addition to the standard printf(1) formats, %b means to
 expand backslash escape sequences in the corresponding argument, and %q
 means to quote the argument in a way that can be reused as shell input.
+If the -v option is supplied, the output is placed into the value of the
+shell variable VAR rather than being sent to the standard output.
 $END
 
 #include <config.h>
@@ -74,28 +76,61 @@ $END
 extern int errno;
 #endif
 
+#define PC(c) \
+  do { \
+    char b[2]; \
+    tw++; \
+    b[0] = c; b[1] = '\0'; \
+    if (vflag) \
+      vbadd (b, 1); \
+    else \
+      putchar (c); \
+  } while (0)
+
 #define PF(f, func) \
   do { \
+    char *b = 0; \
+    int nw; \
     if (have_fieldwidth && have_precision) \
-      tw += printf(f, fieldwidth, precision, func); \
+      nw = asprintf(&b, f, fieldwidth, precision, func); \
     else if (have_fieldwidth) \
-      tw += printf(f, fieldwidth, func); \
+      nw = asprintf(&b, f, fieldwidth, func); \
     else if (have_precision) \
-      tw += printf(f, precision, func); \
+      nw = asprintf(&b, f, precision, func); \
     else \
-      tw += printf(f, func); \
+      nw = asprintf(&b, f, func); \
+    tw += nw; \
+    if (b) \
+      { \
+       if (vflag) \
+         (void)vbadd (b, nw); \
+       else \
+         (void)fputs (b, stdout); \
+       free (b); \
+      } \
   } while (0)
 
 /* We free the buffer used by mklong() if it's `too big'. */
 #define PRETURN(value) \
   do \
     { \
+      if (vflag) \
+       { \
+         bind_variable  (vname, vbuf, 0); \
+         stupidly_hack_special_variables (vname); \
+       } \
       if (conv_bufsize > 4096 ) \
        { \
-         free(conv_buf); \
+         free (conv_buf); \
          conv_bufsize = 0; \
          conv_buf = 0; \
        } \
+      if (vbsize > 4096) \
+       { \
+         free (vbuf); \
+         vbsize = 0; \
+         vbuf = 0; \
+       } \
       fflush (stdout); \
       return (value); \
     } \
@@ -105,9 +140,10 @@ extern int errno;
 #define LENMODS "hjlLtz"
 
 static void printf_erange __P((char *));
-static void printstr __P((char *, char *, int, int, int));
+static int printstr __P((char *, char *, int, int, int));
 static int tescape __P((char *, char *, int *));
 static char *bexpand __P((char *, int, int *, int *));
+static char *vbadd __P((char *, int));
 static char *mklong __P((char *, char *, size_t));
 static int getchr __P((void));
 static char *getstr __P((void));
@@ -132,6 +168,14 @@ static WORD_LIST *garglist;
 static int retval;
 static int conversion_error;
 
+/* printf -v var support */
+static int vflag = 0;
+static char *vbuf, *vname;
+static size_t vbsize;
+static int vblen;
+
+static intmax_t tw;
+
 static char *conv_buf;
 static size_t conv_bufsize;
 
@@ -141,14 +185,35 @@ printf_builtin (list)
 {
   int ch, fieldwidth, precision;
   int have_fieldwidth, have_precision;
-  intmax_t tw;
   char convch, thisch, nextch, *format, *modstart, *fmt, *start;
 
   conversion_error = 0;
   retval = EXECUTION_SUCCESS;
 
-  if (no_options (list))
-    return (EX_USAGE);
+  vflag = 0;
+
+  reset_internal_getopt ();
+  while ((ch = internal_getopt (list, "v:")) != -1)
+    {
+      switch (ch)
+       {
+       case 'v':
+         if (legal_identifier (vname = list_optarg))
+           {
+             vflag = 1;
+             vblen = 0;
+           }
+         else
+           {
+             sh_invalidid (vname);
+             return (EX_USAGE);
+           }
+         break;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
   list = loptend;      /* skip over possible `--' */
 
   if (list == 0)
@@ -161,6 +226,7 @@ printf_builtin (list)
     return (EXECUTION_SUCCESS);
 
   format = list->word->word;
+  tw = 0;
 
   garglist = list->next;
 
@@ -189,14 +255,14 @@ printf_builtin (list)
              /* A NULL third argument to tescape means to bypass the
                 special processing for arguments to %b. */
              fmt += tescape (fmt, &nextch, (int *)NULL);
-             putchar (nextch);
+             PC (nextch);
              fmt--;    /* for loop will increment it for us again */
              continue;
            }
 
          if (*fmt != '%')
            {
-             putchar (*fmt);
+             PC (*fmt);
              continue;
            }
 
@@ -205,7 +271,7 @@ printf_builtin (list)
 
          if (*fmt == '%')              /* %% prints a % */
            {
-             putchar ('%');
+             PC ('%');
              continue;
            }
 
@@ -235,8 +301,20 @@ printf_builtin (list)
                  precision = getint ();
                }
              else
-               while (DIGIT (*fmt))
-                 fmt++;
+               {
+                 /* Negative precisions are allowed but treated as if the
+                    precision were missing; I would like to allow a leading
+                    `+' in the precision number as an extension, but lots
+                    of asprintf/fprintf implementations get this wrong. */
+#if 0
+                 if (*fmt == '-' || *fmt == '+')
+#else
+                 if (*fmt == '-')
+#endif
+                   fmt++;
+                 while (DIGIT (*fmt))
+                   fmt++;
+               }
            }
 
          /* skip possible format modifiers */
@@ -297,21 +375,27 @@ printf_builtin (list)
            case 'b':           /* expand escapes in argument */
              {
                char *p, *xp;
-               int rlen;
+               int rlen, r;
 
                p = getstr ();
-               ch = rlen = 0;
+               ch = rlen = r = 0;
                xp = bexpand (p, strlen (p), &ch, &rlen);
 
                if (xp)
                  {
                    /* Have to use printstr because of possible NUL bytes
                       in XP -- printf does not handle that well. */
-                   printstr (start, xp, rlen, fieldwidth, precision);
+                   r = printstr (start, xp, rlen, fieldwidth, precision);
+                   if (r < 0)
+                     {
+                       sh_wrerror ();
+                       clearerr (stdout);
+                       retval = EXECUTION_FAILURE;
+                     }
                    free (xp);
                  }
 
-               if (ch)
+               if (ch || r < 0)
                  PRETURN (retval);
                break;
              }
@@ -319,7 +403,9 @@ printf_builtin (list)
            case 'q':           /* print with shell quoting */
              {
                char *p, *xp;
+               int r;
 
+               r = 0;
                p = getstr ();
                if (ansic_shouldquote (p))
                  xp = ansic_quote (p, 0, (int *)0);
@@ -328,9 +414,17 @@ printf_builtin (list)
                if (xp)
                  {
                    /* Use printstr to get fieldwidth and precision right. */
-                   printstr (start, xp, strlen (xp), fieldwidth, precision);
+                   r = printstr (start, xp, strlen (xp), fieldwidth, precision);
+                   if (r < 0)
+                     {
+                       sh_wrerror ();
+                       clearerr (stdout);
+                     }
                    free (xp);
                  }
+
+               if (r < 0)
+                 PRETURN (EXECUTION_FAILURE);
                break;
              }
 
@@ -412,6 +506,13 @@ printf_builtin (list)
          modstart[0] = thisch;
          modstart[1] = nextch;
        }
+
+      if (ferror (stdout))
+       {
+         sh_wrerror ();
+         clearerr (stdout);
+         PRETURN (EXECUTION_FAILURE);
+       }
     }
   while (garglist && garglist != list->next);
 
@@ -429,7 +530,7 @@ printf_erange (s)
 }
 
 /* We duplicate a lot of what printf(3) does here. */
-static void
+static int
 printstr (fmt, string, len, fieldwidth, precision)
      char *fmt;                        /* format */
      char *string;             /* expanded string argument */
@@ -443,7 +544,11 @@ printstr (fmt, string, len, fieldwidth, precision)
   int padlen, nc, ljust, i;
   int fw, pr;                  /* fieldwidth and precision */
 
+#if 0
   if (string == 0 || *string == '\0')
+#else
+  if (string == 0 || len == 0)
+#endif
     return;
 
 #if 0
@@ -518,15 +623,17 @@ printstr (fmt, string, len, fieldwidth, precision)
 
   /* leading pad characters */
   for (; padlen > 0; padlen--)
-    putchar (' ');
+    PC (' ');
 
   /* output NC characters from STRING */
   for (i = 0; i < nc; i++)
-    putchar (string[i]);
+    PC (string[i]);
 
   /* output any necessary trailing padding */
   for (; padlen < 0; padlen++)
-    putchar (' ');
+    PC (' ');
+
+  return (ferror (stdout) ? -1 : 0);
 }
   
 /* Convert STRING by expanding the escape sequences specified by the
@@ -644,7 +751,11 @@ bexpand (string, len, sawc, lenp)
   int temp;
   char *ret, *r, *s, c;
 
+#if 0
   if (string == 0 || *string == '\0')
+#else
+  if (string == 0 || len == 0)
+#endif
     {
       if (sawc)
        *sawc = 0;
@@ -681,6 +792,37 @@ bexpand (string, len, sawc, lenp)
 }
 
 static char *
+vbadd (buf, blen)
+     char *buf;
+     int blen;
+{
+  size_t nlen;
+
+  nlen = vblen + blen + 1;
+  if (nlen >= vbsize)
+    {
+      vbsize = ((nlen + 63) >> 6) << 6;
+      vbuf = (char *)xrealloc (vbuf, vbsize);
+    }
+
+  if (blen == 1)
+    vbuf[vblen++] = buf[0];
+  else
+    {
+      FASTCOPY (buf, vbuf  + vblen, blen);
+      vblen += blen;
+    }
+  vbuf[vblen] = '\0';
+
+#ifdef DEBUG
+  if  (strlen (vbuf) != vblen)
+    internal_error  ("printf:vbadd: vblen (%d) != strlen (vbuf) (%d)", vblen, strlen (vbuf));
+#endif
+
+  return vbuf;
+}
+
+static char *
 mklong (str, modifiers, mlen)
      char *str;
      char *modifiers;
index c215472..23abb65 100644 (file)
 #include "../command.h"
 #include "../general.h"
 #include "../sig.h"
+
+#ifndef errno
 extern int errno;
+#endif
 
 int nw;
 
index 83b69c4..0978fc9 100644 (file)
@@ -1,7 +1,7 @@
 This file is pushd.def, from which is created pushd.c.  It implements the
 builtins "pushd", "popd", and "dirs" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -151,13 +151,20 @@ int
 pushd_builtin (list)
      WORD_LIST *list;
 {
+  WORD_LIST *orig_list;
   char *temp, *current_directory, *top;
-  int j, flags;
+  int j, flags, skipopt;
   intmax_t num;
   char direction;
 
+  orig_list = list;
   if (list && list->word && ISOPTION (list->word->word, '-'))
-    list = list->next;
+    {
+      list = list->next;
+      skipopt = 1;
+    }
+  else
+    skipopt = 0;
 
   /* If there is no argument list then switch current and
      top of list. */
@@ -181,7 +188,7 @@ pushd_builtin (list)
       return j;
     }
 
-  for (flags = 0; list; list = list->next)
+  for (flags = 0; skipopt == 0 && list; list = list->next)
     {
       if (ISOPTION (list->word->word, 'n'))
        {
@@ -265,7 +272,7 @@ pushd_builtin (list)
   if (current_directory == 0)
     return (EXECUTION_FAILURE);
 
-  j = ((flags & NOCD) == 0) ? cd_builtin (list) : EXECUTION_SUCCESS;
+  j = ((flags & NOCD) == 0) ? cd_builtin (skipopt ? orig_list : list) : EXECUTION_SUCCESS;
   if (j == EXECUTION_SUCCESS)
     {
       add_dirstack_element ((flags & NOCD) ? savestring (list->word->word) : current_directory);
@@ -499,9 +506,11 @@ cd_to_string (name)
      char *name;
 {
   WORD_LIST *tlist;
+  WORD_LIST *dir;
   int result;
 
-  tlist = make_word_list (make_word (name), NULL);
+  dir = make_word_list (make_word (name), NULL);
+  tlist = make_word_list (make_word ("--"), dir);
   result = cd_builtin (tlist);
   dispose_words (tlist);
   return (result);
@@ -648,11 +657,11 @@ get_directory_stack ()
 }
 
 #ifdef LOADABLE_BUILTIN
-static char *dirs_doc[] = {
+static char * const dirs_doc[] = {
   N_("Display the list of currently remembered directories.  Directories"),
   N_("find their way onto the list with the `pushd' command; you can get"),
   N_("back up through the list with the `popd' command."),
-  N_(""),
+  N_(" "),
   N_("The -l flag specifies that `dirs' should not print shorthand versions"),
   N_("of directories which are relative to your home directory.  This means"),
   N_("that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"),
@@ -660,54 +669,54 @@ static char *dirs_doc[] = {
   N_("prepending the directory name with its position in the stack.  The -p"),
   N_("flag does the same thing, but the stack position is not prepended."),
   N_("The -c flag clears the directory stack by deleting all of the elements."),
-  N_(""),
+  N_(" "),
   N_("+N   displays the Nth entry counting from the left of the list shown by"),
   N_("     dirs when invoked without options, starting with zero."),
-  N_(""),
+  N_(" "),
   N_("-N   displays the Nth entry counting from the right of the list shown by"),
   N_("     dirs when invoked without options, starting with zero."),
   (char *)NULL
 };
 
-static char *pushd_doc[] = {
+static char * const pushd_doc[] = {
   N_("Adds a directory to the top of the directory stack, or rotates"),
   N_("the stack, making the new top of the stack the current working"),
   N_("directory.  With no arguments, exchanges the top two directories."),
-  N_(""),
+  N_(" "),
   N_("+N   Rotates the stack so that the Nth directory (counting"),
   N_("     from the left of the list shown by `dirs', starting with"),
   N_("     zero) is at the top."),
-  N_(""),
+  N_(" "),
   N_("-N   Rotates the stack so that the Nth directory (counting"),
   N_("     from the right of the list shown by `dirs', starting with"),
   N_("     zero) is at the top."),
-  N_(""),
+  N_(" "),
   N_("-n   suppress the normal change of directory when adding directories"),
   N_("     to the stack, so only the stack is manipulated."),
-  N_(""),
+  N_(" "),
   N_("dir  adds DIR to the directory stack at the top, making it the"),
   N_("     new current working directory."),
-  N_(""),
+  N_(" "),
   N_("You can see the directory stack with the `dirs' command."),
   (char *)NULL
 };
 
-static char *popd_doc[] = {
+static char * const popd_doc[] = {
   N_("Removes entries from the directory stack.  With no arguments,"),
   N_("removes the top directory from the stack, and cd's to the new"),
   N_("top directory."),
-  N_(""),
+  N_(" "),
   N_("+N   removes the Nth entry counting from the left of the list"),
   N_("     shown by `dirs', starting with zero.  For example: `popd +0'"),
   N_("     removes the first directory, `popd +1' the second."),
-  N_(""),
+  N_(" "),
   N_("-N   removes the Nth entry counting from the right of the list"),
   N_("     shown by `dirs', starting with zero.  For example: `popd -0'"),
   N_("     removes the last directory, `popd -1' the next to last."),
-  N_(""),
+  N_(" "),
   N_("-n   suppress the normal change of directory when removing directories"),
   N_("     from the stack, so only the stack is manipulated."),
-  N_(""),
+  N_(" "),
   N_("You can see the directory stack with the `dirs' command."),
   (char *)NULL
 };
index cdac9c4..914ebd7 100644 (file)
@@ -1,7 +1,7 @@
 This file is read.def, from which is created read.c.
 It implements the builtin "read" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -79,6 +79,10 @@ $END
 #include <readline/readline.h>
 #endif
 
+#if defined (BUFFERED_INPUT)
+#  include "input.h"
+#endif
+
 #if !defined(errno)
 extern int errno;
 #endif
@@ -124,7 +128,7 @@ read_builtin (list)
      WORD_LIST *list;
 {
   register char *varname;
-  int size, i, pass_next, saw_escape, eof, opt, retval, code;
+  int size, i, nr, pass_next, saw_escape, eof, opt, retval, code;
   int input_is_tty, input_is_pipe, unbuffered_read;
   int raw, edit, nchars, silent, have_timeout, fd;
   unsigned int tmout;
@@ -173,7 +177,7 @@ read_builtin (list)
 #endif
 
   tmout = 0;           /* no timeout */
-  nchars = input_is_tty = input_is_pipe = unbuffered_read = have_timeout = 0;
+  nr = nchars = input_is_tty = input_is_pipe = unbuffered_read = have_timeout = 0;
   delim = '\n';                /* read until newline */
 
   reset_internal_getopt ();
@@ -273,10 +277,15 @@ read_builtin (list)
 
   begin_unwind_frame ("read_builtin");
 
+#if defined (BUFFERED_INPUT)
+  if (interactive == 0 && default_buffered_input >= 0 && fd_is_bash_input (fd))
+    sync_buffered_stream (default_buffered_input);
+#endif
+
   input_is_tty = isatty (fd);
   if (input_is_tty == 0)
 #ifndef __CYGWIN__
-    input_is_pipe = (lseek (0, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
+    input_is_pipe = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
 #else
     input_is_pipe = 1;
 #endif
@@ -425,11 +434,11 @@ read_builtin (list)
         newline pair still disappears from the input. */
       if (pass_next)
        {
+         pass_next = 0;
          if (c == '\n')
            i--;                /* back up over the CTLESC */
          else
-           input_string[i++] = c;
-         pass_next = 0;
+           goto add_char;
          continue;
        }
 
@@ -450,9 +459,11 @@ read_builtin (list)
          input_string[i++] = CTLESC;
        }
 
+add_char:
       input_string[i++] = c;
+      nr++;
 
-      if (nchars > 0 && i >= nchars)
+      if (nchars > 0 && nr >= nchars)
        break;
     }
   input_string[i] = '\0';
@@ -515,7 +526,7 @@ read_builtin (list)
       if (alist)
        {
          word_list_remove_quoted_nulls (alist);
-         assign_array_var_from_word_list (var, alist);
+         assign_array_var_from_word_list (var, alist, 0);
          dispose_words (alist);
        }
       xfree (input_string);
@@ -544,11 +555,11 @@ read_builtin (list)
       if (saw_escape)
        {
          t = dequote_string (input_string);
-         var = bind_variable ("REPLY", t);
+         var = bind_variable ("REPLY", t, 0);
          free (t);
        }
       else
-       var = bind_variable ("REPLY", input_string);
+       var = bind_variable ("REPLY", input_string, 0);
       VUNSETATTR (var, att_invisible);
 
       free (input_string);
@@ -627,10 +638,24 @@ read_builtin (list)
       return (EXECUTION_FAILURE);
     }
 
+#if 0
   /* This has to be done this way rather than using string_list
      and list_string because Posix.2 says that the last variable gets the
      remaining words and their intervening separators. */
   input_string = strip_trailing_ifs_whitespace (input_string, ifs_chars, saw_escape);
+#else
+  /* Check whether or not the number of fields is exactly the same as the
+     number of variables. */
+  if (*input_string)
+    {
+      t1 = input_string;
+      t = get_word_from_string (&input_string, ifs_chars, &e);
+      if (*input_string == 0)
+       input_string = t;
+      else
+       input_string = strip_trailing_ifs_whitespace (t1, ifs_chars, saw_escape);
+    }
+#endif
 
   if (saw_escape)
     {
@@ -654,11 +679,11 @@ bind_read_variable (name, value)
 {
 #if defined (ARRAY_VARS)
   if (valid_array_reference (name) == 0)
-    return (bind_variable (name, value));
+    return (bind_variable (name, value, 0));
   else
-    return (assign_array_element (name, value));
+    return (assign_array_element (name, value, 0));
 #else /* !ARRAY_VARS */
-  return bind_variable (name, value);
+  return bind_variable (name, value, 0);
 #endif /* !ARRAY_VARS */
 }
 
@@ -672,7 +697,7 @@ edit_line (p)
   char *ret;
   int len;
 
-  if (!bash_readline_initialized)
+  if (bash_readline_initialized == 0)
     initialize_readline ();
   old_attempted_completion_function = rl_attempted_completion_function;
   rl_attempted_completion_function = (rl_completion_func_t *)NULL;
index 0f293d3..5482f5f 100644 (file)
@@ -2,7 +2,7 @@ This file is reserved.def, in which the shell reserved words are defined.
 It has no direct C file production, but defines builtins for the Bash
 builtin help command.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -73,12 +73,13 @@ $END
 
 $BUILTIN if
 $SHORT_DOC if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
-The if COMMANDS are executed.  If the exit status is zero, then the then
-COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed
-in turn, and if the exit status is zero, the corresponding then COMMANDS
-are executed and the if command completes.  Otherwise, the else COMMANDS
-are executed, if present.  The exit status is the exit status of the last
-command executed, or zero if no condition tested true.
+The `if COMMANDS' list is executed.  If its exit status is zero, then the
+`then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is
+executed in turn, and if its exit status is zero, the corresponding
+`then COMMANDS' list is executed and the if command completes.  Otherwise,
+the `else COMMANDS' list is executed, if present.  The exit status of the
+entire construct is the exit status of the last command executed, or zero
+if no condition tested true.
 $END
 
 $BUILTIN while
@@ -109,11 +110,12 @@ $END
 
 $BUILTIN %
 $DOCNAME fg_percent
-$SHORT_DOC %[DIGITS | WORD] [&]
-This is similar to the `fg' command.  Resume a stopped or background
-job.  If you specifiy DIGITS, then that job is used.  If you specify
-WORD, then the job whose name begins with WORD is used.  Following the
-job specification with a `&' places the job in the background.
+$SHORT_DOC JOB_SPEC [&]
+Equivalent to the JOB_SPEC argument to the `fg' command.  Resume a
+stopped or background job.  JOB_SPEC can specify either a job name
+or a job number.  Following JOB_SPEC with a `&' places the job in
+the background, as if the job specification had been supplied as an
+argument to `bg'.
 $END
 
 $BUILTIN (( ... ))
@@ -145,9 +147,8 @@ $BUILTIN variables
 $DOCNAME variable_help
 $SHORT_DOC variables - Some variable names and meanings
 BASH_VERSION    Version information for this Bash.
-CDPATH          A colon separated list of directories to search
-               when the argument to `cd' is not found in the current
-               directory.
+CDPATH          A colon-separated list of directories to search
+               for directries given as arguments to `cd'.
 GLOBIGNORE     A colon-separated list of patterns describing filenames to
                be ignored by pathname expansion.
 #if defined (HISTORY)
index 02cc16a..3bb3270 100644 (file)
@@ -1,7 +1,7 @@
 This file is set.def, from which is created set.c.
 It implements the "set" and "unset" builtins in Bash.
 
-Copyright (C) 1987-2002 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -128,11 +128,13 @@ $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
     -E  If set, the ERR trap is inherited by shell functions.
 #if defined (BANG_HISTORY)
     -H  Enable ! style history substitution.  This flag is on
-        by default.
+        by default when the shell is interactive.
 #endif /* BANG_HISTORY */
     -P  If set, do not follow symbolic links when executing commands
         such as cd which change the current directory.
     -T  If set, the DEBUG trap is inherited by shell functions.
+    -   Assign any remaining arguments to the positional parameters.
+        The -x and -v options are turned off.
 
 Using + rather than - causes these flags to be turned off.  The
 flags can also be used upon invocation of the shell.  The current
@@ -311,7 +313,7 @@ set_ignoreeof (on_or_off, option_name)
   ignoreeof = on_or_off == FLAG_ON;
   unbind_variable ("ignoreeof");
   if (ignoreeof)
-    bind_variable ("IGNOREEOF", "10"); 
+    bind_variable ("IGNOREEOF", "10", 0); 
   else
     unbind_variable ("IGNOREEOF");
   sv_ignoreeof ("IGNOREEOF");
@@ -327,7 +329,7 @@ set_posix_mode (on_or_off, option_name)
   if (posixly_correct == 0)
     unbind_variable ("POSIXLY_CORRECT");
   else
-    bind_variable ("POSIXLY_CORRECT", "y");
+    bind_variable ("POSIXLY_CORRECT", "y", 0);
   sv_strict_posix ("POSIXLY_CORRECT");
   return (0);
 }
@@ -503,7 +505,7 @@ set_shellopts ()
   else
     exported = 0;
 
-  v = bind_variable ("SHELLOPTS", value);
+  v = bind_variable ("SHELLOPTS", value, 0);
 
   /* Turn the read-only attribute back on, and turn off the export attribute
      if it was set implicitly by mark_modified_vars and SHELLOPTS was not
index d211dbc..28102bc 100644 (file)
@@ -1,7 +1,7 @@
 This file is setattr.def, from which is created setattr.c.
 It implements the builtins "export" and "readonly", in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -111,6 +111,7 @@ set_or_show_attributes (list, attribute, nodefs)
 {
   register SHELL_VAR *var;
   int assign, undo, functions_only, arrays_only, any_failed, assign_error, opt;
+  int aflags;
   char *name;
 #if defined (ARRAY_VARS)
   WORD_LIST *nlist, *tlist;
@@ -175,8 +176,16 @@ set_or_show_attributes (list, attribute, nodefs)
          /* xxx [-np] name[=value] */
          assign = assignment (name, 0);
 
+         aflags = 0;
          if (assign)
-           name[assign] = '\0';
+           {
+             name[assign] = '\0';
+             if (name[assign - 1] == '+')
+               {
+                 aflags |= ASS_APPEND;
+                 name[assign - 1] = '\0';
+               }
+           }
 
          if (legal_identifier (name) == 0)
            {
@@ -192,6 +201,8 @@ set_or_show_attributes (list, attribute, nodefs)
          if (assign)   /* xxx [-np] name=value */
            {
              name[assign] = '=';
+             if (aflags & ASS_APPEND)
+               name[assign - 1] = '+';
 #if defined (ARRAY_VARS)
              /* Let's try something here.  Turn readonly -a xxx=yyy into
                 declare -ra xxx=yyy and see what that gets us. */
@@ -217,6 +228,8 @@ set_or_show_attributes (list, attribute, nodefs)
              if (do_assignment_no_expand (name) == 0)
                assign_error++;
              name[assign] = '\0';
+             if (aflags & ASS_APPEND)
+               name[assign - 1] = '\0';
            }
 
          set_var_attribute (name, attribute, undo);
@@ -396,13 +409,15 @@ set_var_attribute (name, attribute, undo)
        {
          tvalue = var_isset (tv) ? savestring (value_cell (tv)) : savestring ("");
 
-         var = bind_variable (tv->name, tvalue);
+         var = bind_variable (tv->name, tvalue, 0);
          var->attributes |= tv->attributes & ~att_tempvar;
          VSETATTR (tv, att_propagate);
          if (var->context != 0)
            VSETATTR (var, att_propagate);
          SETVARATTR (tv, attribute, undo);     /* XXX */
 
+         stupidly_hack_special_variables (tv->name);
+
          free (tvalue);
        }
       else
@@ -410,7 +425,7 @@ set_var_attribute (name, attribute, undo)
          var = find_variable_internal (name, 0);
          if (var == 0)
            {
-             var = bind_variable (name, (char *)NULL);
+             var = bind_variable (name, (char *)NULL, 0);
              VSETATTR (var, att_invisible);
            }
          else if (var->context != 0)
index ad432e0..ae100ac 100644 (file)
@@ -1,7 +1,7 @@
 This file is shopt.def, from which is created shopt.c.
 It implements the Bash `shopt' builtin.
 
-Copyright (C) 1994-2003 Free Software Foundation, Inc.
+Copyright (C) 1994-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -64,7 +64,7 @@ extern int check_hashed_filenames, promptvars;
 extern int cdspelling, expand_aliases;
 extern int extended_quote;
 extern int check_window_size;
-extern int glob_ignore_case;
+extern int glob_ignore_case, match_ignore_case;
 extern int hup_on_exit;
 extern int xpg_echo;
 extern int gnu_error_format;
@@ -134,13 +134,13 @@ static struct {
   { "failglob", &fail_glob_expansion, (shopt_set_func_t *)NULL },
 #if defined (READLINE)
   { "force_fignore", &force_fignore, (shopt_set_func_t *)NULL },
-  { "gnu_errfmt", &gnu_error_format, (shopt_set_func_t *)NULL },
-  { "histreedit", &history_reediting, (shopt_set_func_t *)NULL },
 #endif
+  { "gnu_errfmt", &gnu_error_format, (shopt_set_func_t *)NULL },
 #if defined (HISTORY)
   { "histappend", &force_append_history, (shopt_set_func_t *)NULL },
 #endif
 #if defined (READLINE)
+  { "histreedit", &history_reediting, (shopt_set_func_t *)NULL },
   { "histverify", &hist_verify, (shopt_set_func_t *)NULL },
   { "hostcomplete", &perform_hostname_completion, enable_hostname_completion },
 #endif
@@ -155,6 +155,7 @@ static struct {
   { "no_empty_cmd_completion", &no_empty_command_completion, (shopt_set_func_t *)NULL },
 #endif
   { "nocaseglob", &glob_ignore_case, (shopt_set_func_t *)NULL },
+  { "nocasematch", &match_ignore_case, (shopt_set_func_t *)NULL },
   { "nullglob",        &allow_null_glob_expansion, (shopt_set_func_t *)NULL },
 #if defined (PROGRAMMABLE_COMPLETION)
   { "progcomp", &prog_completion_enabled, (shopt_set_func_t *)NULL },
index 1ecbfbd..669bea7 100644 (file)
@@ -1,7 +1,7 @@
 This file is trap.def, from which is created trap.c.
 It implements the builtin "trap" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -214,7 +214,6 @@ showtrap (i)
   char *t, *p, *sn;
 
   p = trap_list[i];
-
   if (p == (char *)DEFAULT_SIG)
     return;
 
index 7abcedf..d03ccb2 100644 (file)
@@ -74,7 +74,7 @@ $END
 extern int find_reserved_word __P((char *));
 
 extern char *this_command_name;
-extern int expand_aliases;
+extern int expand_aliases, posixly_correct;
 
 /* For each word in LIST, find out what the shell is going to do with
    it as a simple command. i.e., which file would this shell use to
@@ -201,6 +201,7 @@ type_builtin (list)
  *     CDESC_PATH_ONLY print the path for type -p
  *     CDESC_FORCE_PATH        force a path search for type -P
  *     CDESC_NOFUNCS   skip function lookup for type -f
+ *     CDESC_ABSPATH   convert to absolute path, no ./ prefix
  *
  * CDESC_ALL says whether or not to look for all occurrences of COMMAND, or
  * return after finding it once.
@@ -359,8 +360,9 @@ describe_command (command, dflags)
 
       /* If we found the command as itself by looking through $PATH, it
         probably doesn't exist.  Check whether or not the command is an
-        executable file.  If it's not, don't report a match. */
-      if (STREQ (full_path, command))
+        executable file.  If it's not, don't report a match.  This is
+        the default posix mode behavior */
+      if (STREQ (full_path, command) || posixly_correct)
        {
          f = file_status (full_path);
          if ((f & FS_EXECABLE) == 0)
@@ -370,9 +372,17 @@ describe_command (command, dflags)
              if (all == 0)
                break;
            }
+         else if (ABSPATH (full_path))
+           ;   /* placeholder; don't need to do anything yet */
          else if (dflags & (CDESC_REUSABLE|CDESC_PATH_ONLY|CDESC_SHORTDESC))
-           full_path = sh_makepath ((char *)NULL, full_path, MP_DOCWD);
+           {
+             f = MP_DOCWD | ((dflags & CDESC_ABSPATH) ? MP_RMDOT : 0);
+             full_path = sh_makepath ((char *)NULL, full_path, f);
+           }
        }
+      /* If we require a full path and don't have one, make one */
+      else if ((dflags & CDESC_ABSPATH) && ABSPATH (full_path) == 0)
+       full_path = sh_makepath ((char *)NULL, full_path, MP_DOCWD|MP_RMDOT);
 
       found_file++;
       found = 1;
index 932a6ea..8cfcd4f 100644 (file)
@@ -1,7 +1,7 @@
 This file is ulimit.def, from which is created ulimit.c.
 It implements the builtin "ulimit" in Bash.
 
-Copyright (C) 1987-2003 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,7 +24,7 @@ $PRODUCES ulimit.c
 $BUILTIN ulimit
 $FUNCTION ulimit_builtin
 $DEPENDS_ON !_MINIX
-$SHORT_DOC ulimit [-SHacdflmnpstuv] [limit]
+$SHORT_DOC ulimit [-SHacdfilmnpqstuvx] [limit]
 Ulimit provides control over the resources available to processes
 started by the shell, on systems that allow such control.  If an
 option is given, it is interpreted as follows:
@@ -35,14 +35,17 @@ option is given, it is interpreted as follows:
     -c the maximum size of core files created
     -d the maximum size of a process's data segment
     -f the maximum size of files created by the shell
+    -i  the maximum number of pending signals
     -l the maximum size a process may lock into memory
     -m the maximum resident set size
     -n the maximum number of open file descriptors
     -p the pipe buffer size
+    -q  the maximum number of bytes in POSIX message queues
     -s the maximum stack size
     -t the maximum amount of cpu time in seconds
     -u the maximum number of user processes
-    -v the size of virtual memory 
+    -v the size of virtual memory
+    -x  the maximum number of file locks
 
 If LIMIT is given, it is the new value of the specified resource;
 the special LIMIT values `soft', `hard', and `unlimited' stand for
@@ -200,6 +203,9 @@ static RESOURCE_LIMITS limits[] = {
   { 'd',       RLIMIT_DATA,  1024,     "data seg size",        "kbytes" },
 #endif
   { 'f',       RLIMIT_FILESIZE, 1024,  "file size",            "blocks" },
+#ifdef RLIMIT_SIGPENDING
+  { 'i',       RLIMIT_SIGPENDING, 1,   "pending signals",      (char *)NULL },
+#endif
 #ifdef RLIMIT_MEMLOCK
   { 'l',       RLIMIT_MEMLOCK, 1024,   "max locked memory",    "kbytes" },
 #endif
@@ -208,6 +214,9 @@ static RESOURCE_LIMITS limits[] = {
 #endif /* RLIMIT_RSS */
   { 'n',       RLIMIT_OPENFILES, 1,    "open files",           (char *)NULL},
   { 'p',       RLIMIT_PIPESIZE, 512,   "pipe size",            "512 bytes" },
+#ifdef RLIMIT_MSGQUEUE
+  { 'q',       RLIMIT_MSGQUEUE, 1,     "POSIX message queues", "bytes" },
+#endif
 #ifdef RLIMIT_STACK
   { 's',       RLIMIT_STACK, 1024,     "stack size",           "kbytes" },
 #endif
@@ -221,6 +230,9 @@ static RESOURCE_LIMITS limits[] = {
 #ifdef RLIMIT_SWAP
   { 'w',       RLIMIT_SWAP,    1024,   "swap size",            "kbytes" },
 #endif
+#ifdef RLIMIT_LOCKS
+  { 'x',       RLIMIT_LOCKS,   1,      "file locks",           (char *)NULL },
+#endif
   { -1, -1, -1, (char *)NULL, (char *)NULL }
 };
 #define NCMDS  (sizeof(limits) / sizeof(limits[0]))
@@ -605,14 +617,19 @@ pipesize (valuep)
   *valuep = (RLIMTYPE) PIPE_BUF;
   return 0;
 #else
-#  if defined (PIPESIZE)
+#  if defined (_POSIX_PIPE_BUF)
+  *valuep = (RLIMTYPE) _POSIX_PIPE_BUF;
+  return 0;
+#  else
+#    if defined (PIPESIZE)
   /* This is defined by running a program from the Makefile. */
   *valuep = (RLIMTYPE) PIPESIZE;
   return 0;
-#  else
+#    else
   errno = EINVAL;
   return -1;  
-#  endif /* PIPESIZE */
+#    endif /* PIPESIZE */
+#  endif /* _POSIX_PIPE_BUF */
 #endif /* PIPE_BUF */
 }
 
@@ -647,11 +664,11 @@ print_all_limits (mode)
 
   for (i = 0; limits[i].option > 0; i++)
     {
-      if (get_limit (i, &softlim, &hardlim) < 0)
+      if (get_limit (i, &softlim, &hardlim) == 0)
+       printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
+      else if (errno != EINVAL)
        builtin_error ("%s: cannot get limit: %s", limits[i].description,
                                                   strerror (errno));
-      else
-       printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
     }
 }
 
@@ -670,7 +687,7 @@ printone (limind, curlim, pdesc)
       else
         sprintf (unitstr, "(-%c) ", limits[limind].option);
 
-      printf ("%-18s %16s", limits[limind].description, unitstr);
+      printf ("%-20s %16s", limits[limind].description, unitstr);
     }
   if (curlim == RLIM_INFINITY)
     puts ("unlimited");
index 9eb66f6..22a92be 100644 (file)
@@ -1,7 +1,7 @@
 This file is wait.def, from which is created wait.c.
 It implements the builtin "wait" in Bash.
 
-Copyright (C) 1987-2004 Free Software Foundation, Inc.
+Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -150,7 +150,7 @@ wait_builtin (list)
          BLOCK_CHILD (set, oset);
          job = get_job_spec (list);
 
-         if (job < 0 || job >= job_slots || !jobs[job])
+         if (INVALID_JOB (job))
            {
              if (job != DUP_JOB)
                sh_badjob (list->word->word);
index 0e1375d..a5bac0b 100644 (file)
--- a/command.h
+++ b/command.h
@@ -1,7 +1,7 @@
 /* command.h -- The structures used internally to represent commands, and
    the extern declarations of the functions used to create them. */
 
-/* Copyright (C) 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -67,17 +67,26 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
                    cm_arith, cm_cond, cm_arith_for, cm_subshell };
 
 /* Possible values for the `flags' field of a WORD_DESC. */
-#define W_HASDOLLAR    0x0001  /* Dollar sign present. */
-#define W_QUOTED       0x0002  /* Some form of quote character is present. */
-#define W_ASSIGNMENT   0x0004  /* This word is a variable assignment. */
-#define W_GLOBEXP      0x0008  /* This word is the result of a glob expansion. */
-#define W_NOSPLIT      0x0010  /* Do not perform word splitting on this word. */
-#define W_NOGLOB       0x0020  /* Do not perform globbing on this word. */
-#define W_NOSPLIT2     0x0040  /* Don't split word except for $@ expansion. */
-#define W_TILDEEXP     0x0080  /* Tilde expand this assignment word */
-#define W_DOLLARAT     0x0100  /* $@ and its special handling */
-#define W_DOLLARSTAR   0x0200  /* $* and its special handling */
-#define W_NOCOMSUB     0x0400  /* Don't perform command substitution on this word */
+#define W_HASDOLLAR    0x00001 /* Dollar sign present. */
+#define W_QUOTED       0x00002 /* Some form of quote character is present. */
+#define W_ASSIGNMENT   0x00004 /* This word is a variable assignment. */
+#define W_GLOBEXP      0x00008 /* This word is the result of a glob expansion. */
+#define W_NOSPLIT      0x00010 /* Do not perform word splitting on this word. */
+#define W_NOGLOB       0x00020 /* Do not perform globbing on this word. */
+#define W_NOSPLIT2     0x00040 /* Don't split word except for $@ expansion. */
+#define W_TILDEEXP     0x00080 /* Tilde expand this assignment word */
+#define W_DOLLARAT     0x00100 /* $@ and its special handling */
+#define W_DOLLARSTAR   0x00200 /* $* and its special handling */
+#define W_NOCOMSUB     0x00400 /* Don't perform command substitution on this word */
+#define W_ASSIGNRHS    0x00800 /* Word is rhs of an assignment statement */
+#define W_NOTILDE      0x01000 /* Don't perform tilde expansion on this word */
+#define W_ITILDE       0x02000 /* Internal flag for word expansion */
+#define W_NOEXPAND     0x04000 /* Don't expand at all -- do quote removal */
+#define W_COMPASSIGN   0x08000 /* Compound assignment */
+#define W_ASSNBLTIN    0x10000 /* word is a builtin command that takes assignments */
+#define W_ASSIGNARG    0x20000 /* word is assignment argument to command */
+#define W_HASQUOTEDNULL        0x40000 /* word contains a quoted null character */
+#define W_DQUOTE       0x80000 /* word should be treated as if double-quoted */
 
 /* Possible values for subshell_environment */
 #define SUBSHELL_ASYNC 0x01    /* subshell caused by `command &' */
@@ -193,6 +202,7 @@ typedef struct pattern_list {
   struct pattern_list *next;   /* Clause to try in case this one failed. */
   WORD_LIST *patterns;         /* Linked list of patterns to test. */
   COMMAND *action;             /* Thing to execute if a pattern matches. */
+  int flags;
 } PATTERN_LIST;
 
 /* The CASE command. */
index c094fc5..7a90b16 100644 (file)
@@ -47,7 +47,7 @@
 
 /* Define DONT_REPORT_SIGPIPE if you don't want to see `Broken pipe' messages
    when a job like `cat jobs.c | exit 1' is executed. */
-/* #define DONT_REPORT_SIGPIPE */
+#define DONT_REPORT_SIGPIPE
 
 /* The default value of the PATH variable. */
 #ifndef DEFAULT_PATH_VALUE
index 753b18a..7fde761 100644 (file)
    bash debugger. */
 #undef DEBUGGER
 
+/* Define STRICT_POSIX if you want bash to be strictly posix.2 conformant by
+   default (except for echo; that is controlled separately). */
+#undef STRICT_POSIX
+
 /* Define MEMSCRAMBLE if you want the bash malloc and free to scramble
    memory contents on malloc() and free(). */
 #undef MEMSCRAMBLE
 
 #undef HAVE_LIBC_FNM_EXTMATCH
 
-
 #undef HAVE_DECL_CONFSTR
 
 #undef HAVE_DECL_PRINTF
 
 #undef HAVE_MBSTATE_T
 
+/* Define if WCONTINUED is defined in system headers, but rejected by waitpid */
+#undef WCONTINUED_BROKEN
+
 /* These are checked with BASH_CHECK_DECL */
 
 #undef HAVE_DECL_STRTOIMAX
 /* Define if you have the dup2 function.  */
 #undef HAVE_DUP2
 
+/* Define if you have the fcntl function.  */
+#undef HAVE_FCNTL
+
 /* Define if you have the getaddrinfo function. */
 #undef HAVE_GETADDRINFO
 
 /* Define if you have the getpeername function.  */
 #undef HAVE_GETPEERNAME
 
+/* Define if you have the getpwent function. */
+#undef HAVE_GETPWENT
+
+/* Define if you have the getpwnam function. */
+#undef HAVE_GETPWNAM
+
+/* Define if you have the getpwuid function. */
+#undef HAVE_GETPWUID
+
 /* Define if you have the getrlimit function.  */
 #undef HAVE_GETRLIMIT
 
 /* Define if you have the isxdigit function.  */
 #undef HAVE_ISXDIGIT
 
+/* Define if you have the kill function.  */
+#undef HAVE_KILL
+
 /* Define if you have the killpg function.  */
 #undef HAVE_KILLPG
 
 /* Define if you have the putenv function.  */
 #undef HAVE_PUTENV
 
+/* Define if you have the raise function. */
+#undef HAVE_RAISE
+
 /* Define if you have the readlink function. */
 #undef HAVE_READLINK
 
 /* Define if you have the strftime function. */
 #undef HAVE_STRFTIME
 
+/* Define if you have the strnlen function. */
+#undef HAVE_STRNLEN
+
 /* Define if you have the strpbrk function. */
 #undef HAVE_STRPBRK
 
 /* Define if you have the <netinet/in.h> header file. */
 #undef HAVE_NETINET_IN_H
 
+/* Define if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
 /* Define if you have the <regex.h> header file. */
 #undef HAVE_REGEX_H
 
index 77b1120..4bc9aea 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in for Bash 3.0, version 3.166, from autoconf version AC_ACVERSION.
+# From configure.in for Bash 3.1, version 3.183.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.57 for bash 3.0-release.
+# Generated by GNU Autoconf 2.53 for bash 3.1-release.
 #
 # Report bugs to <bug-bash@gnu.org>.
 #
@@ -9,6 +9,14 @@
 # Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+
 ## --------------------- ##
 ## M4sh Initialization.  ##
 ## --------------------- ##
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
 elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
   set -o posix
 fi
 
+# NLS nuisances.
 # Support unset when possible.
 if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
   as_unset=unset
@@ -31,42 +37,34 @@ else
   as_unset=false
 fi
 
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+    { $as_unset LANG || test "${LANG+set}" != set; } ||
+      { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+      { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+      { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+      { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+      { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+      { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+      { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+      { LC_MESSAGES=C; export LC_MESSAGES; }
 
 
 # Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`(basename "$0") 2>/dev/null ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)$' \| \
@@ -77,7 +75,6 @@ echo X/"$0" |
          /^X\/\(\/\).*/{ s//\1/; q; }
          s/.*/./; q'`
 
-
 # PATH needs CR, and LINENO needs CR and PATH.
 # Avoid depending upon Character Ranges.
 as_cr_letters='abcdefghijklmnopqrstuvwxyz'
@@ -88,15 +85,15 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+  echo "#! /bin/sh" >conftest.sh
+  echo  "exit 0"   >>conftest.sh
+  chmod +x conftest.sh
+  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
     PATH_SEPARATOR=';'
   else
     PATH_SEPARATOR=:
   fi
-  rm -f conf$$.sh
+  rm -f conftest.sh
 fi
 
 
@@ -144,8 +141,6 @@ do
   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
   test "x$as_lineno_1" != "x$as_lineno_2" &&
   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
             CONFIG_SHELL=$as_dir/$as_base
             export CONFIG_SHELL
             exec "$CONFIG_SHELL" "$0" ${1+"$@"}
@@ -218,12 +213,6 @@ else
 fi
 rm -f conf$$ conf$$.exe conf$$.file
 
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  as_mkdir_p=false
-fi
-
 as_executable_p="test -f"
 
 # Sed expression to map a string onto a valid CPP name.
@@ -240,7 +229,7 @@ as_nl='
 IFS="  $as_nl"
 
 # CDPATH.
-$as_unset CDPATH
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
 
 
 # Name of the host.
@@ -254,7 +243,6 @@ exec 6>&1
 # Initializations.
 #
 ac_default_prefix=/usr/local
-ac_config_libobj_dir=.
 cross_compiling=no
 subdirs=
 MFLAGS=
@@ -269,8 +257,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='3.0-release'
-PACKAGE_STRING='bash 3.0-release'
+PACKAGE_VERSION='3.1-release'
+PACKAGE_STRING='bash 3.1-release'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 
 ac_unique_file="shell.h"
@@ -311,8 +299,6 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os EMACS lispdir DEBUGGER_START_FILE TESTSCRIPT PURIFY MALLOC_TARGET MALLOC_SRC MALLOC_LIB MALLOC_LIBRARY MALLOC_LDFLAGS MALLOC_DEP htmldir HELPDIR HELPDIRDEFINE HELPINSTALL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP SIGNAMES_H CC_FOR_BUILD STATIC_LD CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD LDFLAGS_FOR_BUILD RL_VERSION RL_MAJOR RL_MINOR READLINE_LIB READLINE_DEP RL_LIBDIR RL_INCLUDEDIR RL_INCLUDE HISTORY_LIB HISTORY_DEP HIST_LIBDIR INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AR RANLIB ac_ct_RANLIB YACC SET_MAKE MAKE_SHELL MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE ALLOCA GLIBC21 LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB LIBOBJS INTL_DEP INTL_INC LIBINTL_H SIGLIST_O TERMCAP_LIB TERMCAP_DEP JOBS_O SHOBJ_CC SHOBJ_CFLAGS SHOBJ_LD SHOBJ_LDFLAGS SHOBJ_XLDFLAGS SHOBJ_LIBS SHOBJ_STATUS PROFILE_FLAGS incdir BUILD_DIR ARFLAGS BASHVERS RELSTATUS DEBUG MALLOC_DEBUG LOCAL_LIBS LOCAL_CFLAGS LOCAL_LDFLAGS LOCAL_DEFS LTLIBOBJS'
-ac_subst_files=''
 
 # Initialize some variables set by options.
 ac_init_help=
@@ -736,9 +722,6 @@ if test ! -r $srcdir/$ac_unique_file; then
    { (exit 1); exit 1; }; }
   fi
 fi
-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-   { (exit 1); exit 1; }; }
 srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
 ac_env_build_alias_set=${build_alias+set}
 ac_env_build_alias_value=$build_alias
@@ -784,7 +767,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 3.0-release to adapt to many kinds of systems.
+\`configure' configures bash 3.1-release to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -845,7 +828,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 3.0-release:";;
+     short | recursive ) echo "Configuration of bash 3.1-release:";;
    esac
   cat <<\_ACEOF
 
@@ -890,6 +873,11 @@ Optional Features:
   --enable-select         include select command
   --enable-separate-helpfiles
                           use external files for help builtin documentation
+  --enable-single-help-strings
+                          store help documentation as a single string to ease
+                          translation
+  --enable-strict-posix-default
+                          configure bash to be posix-conformant by default
   --enable-usg-echo-default
                           a synonym for --enable-xpg-echo-default
   --enable-xpg-echo-default
@@ -974,7 +962,7 @@ esac
 # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
 # absolute.
 ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
 ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
 ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
 
@@ -1000,8 +988,8 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 3.0-release
-generated by GNU Autoconf 2.57
+bash configure 3.1-release
+generated by GNU Autoconf 2.53
 
 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
 Free Software Foundation, Inc.
@@ -1015,8 +1003,8 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 3.0-release, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
+It was created by bash $as_me 3.1-release, which was
+generated by GNU Autoconf 2.53.  Invocation command line was
 
   $ $0 $@
 
@@ -1068,54 +1056,27 @@ _ACEOF
 
 # Keep a trace of the command line.
 # Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
 # Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
 ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
 ac_sep=
-ac_must_keep_next=false
-for ac_pass in 1 2
+for ac_arg
 do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-        ac_must_keep_next=false # Got value, back to normal.
-      else
-        case $ac_arg in
-          *=* | --config-cache | -C | -disable-* | --disable-* \
-          | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-          | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-          | -with-* | --with-* | -without-* | --without-* | --x)
-            case "$ac_configure_args0 " in
-              "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-            esac
-            ;;
-          -* ) ac_must_keep_next=true ;;
-        esac
-      fi
-      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-      # Get rid of the leading space.
-      ac_sep=" "
-      ;;
-    esac
-  done
+  case $ac_arg in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n ) continue ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    continue ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  case " $ac_configure_args " in
+    *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+    *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+       ac_sep=" " ;;
+  esac
+  # Get rid of the leading space.
 done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
 
 # When interrupted or exit'd, cleanup temporary files, and complete
 # config.log.  We remove comments because anyway the quotes in there
@@ -1126,7 +1087,6 @@ trap 'exit_status=$?
   # Save into config.log some information that might help in debugging.
   {
     echo
-
     cat <<\_ASBOX
 ## ---------------- ##
 ## Cache variables. ##
@@ -1149,35 +1109,6 @@ _ASBOX
     esac;
 }
     echo
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=$`echo $ac_var`
-      echo "$ac_var='"'"'$ac_val'"'"'"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------- ##
-## Output files. ##
-## ------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-       eval ac_val=$`echo $ac_var`
-        echo "$ac_var='"'"'$ac_val'"'"'"
-      done | sort
-      echo
-    fi
-
     if test -s confdefs.h; then
       cat <<\_ASBOX
 ## ----------- ##
@@ -1185,7 +1116,7 @@ _ASBOX
 ## ----------- ##
 _ASBOX
       echo
-      sed "/^$/d" confdefs.h | sort
+      sed "/^$/d" confdefs.h
       echo
     fi
     test "$ac_signal" != 0 &&
@@ -1354,7 +1285,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-
 ac_aux_dir=
 for ac_dir in ./support $srcdir/./support; do
   if test -f $ac_dir/install-sh; then
@@ -1380,10 +1310,10 @@ ac_config_guess="$SHELL $ac_aux_dir/config.guess"
 ac_config_sub="$SHELL $ac_aux_dir/config.sub"
 ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
-          ac_config_headers="$ac_config_headers config.h"
+ac_config_headers="$ac_config_headers config.h"
 
 
-BASHVERS=3.0
+BASHVERS=3.1
 RELSTATUS=release
 
 case "$RELSTATUS" in
@@ -1464,7 +1394,7 @@ sparc-netbsd*)    opt_bash_malloc=no ;;   # needs 8-byte alignment
 mips-irix6*)   opt_bash_malloc=no ;;   # needs 8-byte alignment
 m68k-sysv)     opt_bash_malloc=no ;;   # fixes file descriptor leak in closedir
 sparc-linux*)  opt_bash_malloc=no ;;   # sparc running linux; requires ELF
-*-freebsd*-gnu)        opt_bash_malloc=no ;;   # there's some undetermined problem here
+#*-freebsd*-gnu)       opt_bash_malloc=no ;;   # there's some undetermined problem here
 #*-freebsd*)   opt_bash_malloc=no ;;   # they claim it's better; I disagree
 *-openbsd*)    opt_bash_malloc=no ;;   # they claim it needs eight-bit alignment
 *-aix*)                opt_bash_malloc=no ;;   # AIX machines
@@ -1473,7 +1403,7 @@ sparc-linux*)     opt_bash_malloc=no ;;   # sparc running linux; requires ELF
 *-rhapsody*)   opt_bash_malloc=no ;;   # Apple Rhapsody (MacOS X)
 *-darwin*)     opt_bash_malloc=no ;;   # Apple Darwin (MacOS X)
 *-dgux*)       opt_bash_malloc=no ;;   # DG/UX machines
-*-qnx*)                opt_bash_malloc=no ;;   # QNX 4.2
+*-qnx*)                opt_bash_malloc=no ;;   # QNX 4.2, QNX 6.x
 *-machten4)    opt_bash_malloc=no ;;   # MachTen 4.x
 *-bsdi2.1|*-bsdi3.?)   opt_bash_malloc=no ; : ${CC:=shlicc2} ;; # for loadable builtins
 *-beos*)       opt_bash_malloc=no ;;   # they say it's suitable
@@ -1678,6 +1608,7 @@ opt_brace_expansion=yes
 opt_disabled_builtins=no
 opt_command_timing=yes
 opt_xpg_echo=no
+opt_strict_posix=no
 opt_cond_command=yes
 opt_cond_regexp=yes
 opt_arith_for_command=yes
@@ -1686,6 +1617,7 @@ opt_progcomp=yes
 opt_separate_help=no
 opt_multibyte=yes
 opt_debugger=yes
+opt_single_longdoc_strings=yes
 
 opt_static_link=no
 opt_profiling=no
@@ -1832,6 +1764,16 @@ if test "${enable_separate_helpfiles+set}" = set; then
   enableval="$enable_separate_helpfiles"
   opt_separate_help=$enableval
 fi;
+# Check whether --enable-single-help-strings or --disable-single-help-strings was given.
+if test "${enable_single_help_strings+set}" = set; then
+  enableval="$enable_single_help_strings"
+  opt_single_longdoc_strings=$enableval
+fi;
+# Check whether --enable-strict-posix-default or --disable-strict-posix-default was given.
+if test "${enable_strict_posix_default+set}" = set; then
+  enableval="$enable_strict_posix_default"
+  opt_strict_posix=$enableval
+fi;
 # Check whether --enable-usg-echo-default or --disable-usg-echo-default was given.
 if test "${enable_usg_echo_default+set}" = set; then
   enableval="$enable_usg_echo_default"
@@ -1939,6 +1881,12 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
 fi
+if test $opt_strict_posix = yes; then
+cat >>confdefs.h <<\_ACEOF
+#define STRICT_POSIX 1
+_ACEOF
+
+fi
 if test $opt_extended_glob = yes ; then
 cat >>confdefs.h <<\_ACEOF
 #define EXTENDED_GLOB 1
@@ -2011,6 +1959,11 @@ if test "$opt_separate_help" != no; then
        HELPDIRDEFINE='-H ${HELPDIR}'
        HELPINSTALL='install-help'
 fi
+HELPSTRINGS=
+if test "$opt_single_longdoc_strings" != "yes"; then
+       HELPSTRINGS='-S'
+fi
+
 
 
 
@@ -2236,7 +2189,9 @@ if test $ac_prog_rejected = yes; then
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+    set dummy "$as_dir/$ac_word" ${1+"$@"}
+    shift
+    ac_cv_prog_CC="$@"
   fi
 fi
 fi
@@ -2341,10 +2296,8 @@ fi
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
    { (exit 1); exit 1; }; }
 
 # Provide some information about the compiler.
@@ -2369,12 +2322,14 @@ ac_compiler=`set X $ac_compile; echo $2`
 
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2384,7 +2339,7 @@ main ()
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.exe"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
@@ -2403,39 +2358,26 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
 # Be careful to initialize this variable, since it used to be cached.
 # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
 ac_cv_exeext=
-# b.out is created by i960 compilers.
-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-do
-  test -f "$ac_file" || continue
+for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null;
+                ls a.out conftest 2>/dev/null;
+                ls a.* conftest.* 2>/dev/null`; do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-        ;;
-    conftest.$ac_ext )
-        # This is the source file.
-        ;;
-    [ab].out )
-        # We found the default executable, but exeext='' is most
-        # certainly right.
-        break;;
-    *.* )
-        ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-        # FIXME: I believe we export ac_cv_exeext for Libtool,
-        # but it would be cool to find out if it's true.  Does anybody
-        # maintain Libtool? --akim.
-        export ac_cv_exeext
-        break;;
-    * )
-        break;;
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;;
+    a.out ) # We found the default executable, but exeext='' is most
+            # certainly right.
+            break;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+          export ac_cv_exeext
+          break;;
+    * ) break;;
   esac
 done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
    { (exit 77); exit 77; }; }
 fi
 
@@ -2462,11 +2404,9 @@ if test "$cross_compiling" != yes; then
        cross_compiling=yes
     else
        { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
+If you meant to cross compile, use \`--host'." >&5
 echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
+If you meant to cross compile, use \`--host'." >&2;}
    { (exit 1); exit 1; }; }
     fi
   fi
@@ -2474,7 +2414,7 @@ fi
 echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f a.out a.exe conftest$ac_cv_exeext
 ac_clean_files=$ac_clean_files_save
 # Check the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
@@ -2494,10 +2434,9 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
 # `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
           export ac_cv_exeext
           break;;
@@ -2505,10 +2444,8 @@ for ac_file in conftest.exe conftest conftest.*; do
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -2526,12 +2463,14 @@ if test "${ac_cv_objext+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2548,19 +2487,16 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (exit $ac_status); }; then
   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -2577,12 +2513,14 @@ if test "${ac_cv_c_compiler_gnu+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2609,8 +2547,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_compiler_gnu=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_compiler_gnu=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -2630,12 +2567,14 @@ if test "${ac_cv_prog_cc_g+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2659,8 +2598,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_prog_cc_g=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_prog_cc_g=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -2682,102 +2620,6 @@ else
     CFLAGS=
   fi
 fi
-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_stdc=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-# Don't try gcc -ansi; that turns off useful extensions and
-# breaks some systems' header files.
-# AIX                  -qlanglvl=ansi
-# Ultrix and OSF/1     -std1
-# HP-UX 10.20 and later        -Ae
-# HP-UX older versions -Aa -D_HPUX_SOURCE
-# SVR4                 -Xc -D__EXTENSIONS__
-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cc_stdc=$ac_arg
-break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.$ac_objext
-done
-rm -f conftest.$ac_ext conftest.$ac_objext
-CC=$ac_save_CC
-
-fi
-
-case "x$ac_cv_prog_cc_stdc" in
-  x|xno)
-    echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6 ;;
-  *)
-    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-    CC="$CC $ac_cv_prog_cc_stdc" ;;
-esac
-
 # Some people use a C++ compiler to compile C.  Since we use `exit',
 # in C++ we need to declare it.  In case someone uses the same compiler
 # for both compiling C and C++ we need to have the C++ compiler decide
@@ -2810,13 +2652,15 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 do
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
 $ac_declaration
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2840,19 +2684,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   :
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 continue
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_declaration
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2876,8 +2721,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
@@ -2890,8 +2734,7 @@ fi
 
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 ac_ext=c
@@ -2912,11 +2755,7 @@ else
 LIBS="-lcposix  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -2925,6 +2764,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char strerror ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -2948,8 +2793,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_cposix_strerror=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_cposix_strerror=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -2986,28 +2830,18 @@ for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include "confdefs.h"
+#include <assert.h>
                      Syntax error
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -3024,8 +2858,7 @@ if test -z "$ac_cpp_err"; then
   :
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   # Broken: fails on valid input.
 continue
 fi
@@ -3035,17 +2868,13 @@ rm -f conftest.err conftest.$ac_ext
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -3063,8 +2892,7 @@ if test -z "$ac_cpp_err"; then
 continue
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -3093,28 +2921,18 @@ for ac_c_preproc_warn_flag in '' yes
 do
   # Use a header file that comes with gcc, so configuring glibc
   # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+#include "confdefs.h"
+#include <assert.h>
                      Syntax error
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -3131,8 +2949,7 @@ if test -z "$ac_cpp_err"; then
   :
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   # Broken: fails on valid input.
 continue
 fi
@@ -3142,17 +2959,13 @@ rm -f conftest.err conftest.$ac_ext
   # can be detected and how.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -3170,8 +2983,7 @@ if test -z "$ac_cpp_err"; then
 continue
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
@@ -3184,10 +2996,8 @@ rm -f conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -3198,21 +3008,6 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
- EGREP=$ac_cv_prog_egrep
-
-
 echo "$as_me:$LINENO: checking for ANSI C header files" >&5
 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
 if test "${ac_cv_header_stdc+set}" = set; then
@@ -3220,59 +3015,48 @@ if test "${ac_cv_header_stdc+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
 #include <string.h>
 #include <float.h>
 
-int
-main ()
-{
-
-  ;
-  return 0;
-}
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
   ac_cv_header_stdc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_header_stdc=no
+  cat conftest.$ac_ext >&5
+  ac_cv_header_stdc=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <string.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then
+  egrep "memchr" >/dev/null 2>&1; then
   :
 else
   ac_cv_header_stdc=no
@@ -3285,16 +3069,12 @@ if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then
+  egrep "free" >/dev/null 2>&1; then
   :
 else
   ac_cv_header_stdc=no
@@ -3310,18 +3090,13 @@ if test $ac_cv_header_stdc = yes; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <ctype.h>
 #if ((' ' & 0x0FF) == 0x020)
 # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
 #else
-# define ISLOWER(c) \
-                   (('a' <= (c) && (c) <= 'i') \
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
                      || ('j' <= (c) && (c) <= 'r') \
                      || ('s' <= (c) && (c) <= 'z'))
 # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
@@ -3354,12 +3129,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_header_stdc=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 fi
@@ -3394,11 +3168,7 @@ if eval "test \"\${$as_ac_Header+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 
 #include <$ac_header>
@@ -3418,8 +3188,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_Header=no"
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3450,11 +3219,7 @@ echo "$as_me:$LINENO: checking minix/config.h usability" >&5
 echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <minix/config.h>
 _ACEOF
@@ -3473,8 +3238,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3486,17 +3250,13 @@ echo "$as_me:$LINENO: checking minix/config.h presence" >&5
 echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <minix/config.h>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -3513,8 +3273,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -3527,32 +3286,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
 echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for minix/config.h" >&5
 echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
@@ -3591,19 +3332,6 @@ _ACEOF
 fi
 
 
-
-case $host_os in
-  *cygwin* ) CYGWIN=yes;;
-         * ) CYGWIN=no;;
-esac
-
-
-case $host_os in
-  *mingw32* ) MINGW32=yes;;
-          * ) MINGW32=no;;
-esac
-
-
 # Check whether --enable-largefile or --disable-largefile was given.
 if test "${enable_largefile+set}" = set; then
   enableval="$enable_largefile"
@@ -3624,11 +3352,7 @@ else
         # so use the C compiler's -n32 option if that helps.
          cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
@@ -3638,6 +3362,12 @@ cat >>conftest.$ac_ext <<_ACEOF
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -3661,8 +3391,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext
         CC="$CC -n32"
@@ -3681,8 +3410,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_sys_largefile_CC=' -n32'; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext
          break
@@ -3706,11 +3434,7 @@ else
   ac_cv_sys_file_offset_bits=no
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
@@ -3720,6 +3444,12 @@ cat >>conftest.$ac_ext <<_ACEOF
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -3743,17 +3473,12 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #define _FILE_OFFSET_BITS 64
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
@@ -3764,6 +3489,12 @@ cat >>conftest.$ac_ext <<_ACEOF
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -3787,8 +3518,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_sys_file_offset_bits=64; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   break
@@ -3813,11 +3543,7 @@ else
   ac_cv_sys_large_files=no
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
@@ -3827,6 +3553,12 @@ cat >>conftest.$ac_ext <<_ACEOF
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -3850,17 +3582,12 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #define _LARGE_FILES 1
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
@@ -3871,6 +3598,12 @@ cat >>conftest.$ac_ext <<_ACEOF
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -3894,8 +3627,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_sys_large_files=1; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
   break
@@ -3925,6 +3657,9 @@ if test "x$cross_compiling" = "xyes"; then
        cross_cache=${srcdir}/cross-build/cygwin32.cache
        SIGNAMES_H='$(srcdir)/cross-build/win32sig.h'
        ;;
+    *-mingw*)
+       cross_cache=${srcdir}/cross-build/cygwin32.cache
+       ;;
     i[3456]86-*-beos*)
        cross_cache=${srcdir}/cross-build/x86-beos.cache
        SIGNAMES_H='${srcdir}/cross-build/beos-sig.h'
@@ -3937,6 +3672,8 @@ if test "x$cross_compiling" = "xyes"; then
        . ${cross_cache}
     fi
     unset cross_cache
+    CROSS_COMPILE='-DCROSS_COMPILING'
+
 fi
 
 
@@ -4002,16 +3739,12 @@ else
     ac_pattern="Autoconf.*'x'"
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sgtty.h>
 Autoconf TIOCGETP
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then
+  egrep "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 else
   ac_cv_prog_gcc_traditional=no
@@ -4022,16 +3755,12 @@ rm -f conftest*
   if test $ac_cv_prog_gcc_traditional = no; then
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <termio.h>
 Autoconf TCGETA
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then
+  egrep "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 fi
 rm -f conftest*
@@ -4071,44 +3800,37 @@ if test "${ac_cv_func_tgetent+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char tgetent (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char tgetent (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_tgetent) || defined (__stub___tgetent)
 choke me
 #else
-char (*f) () = tgetent;
-#endif
-#ifdef __cplusplus
-}
+f = tgetent;
 #endif
 
-int
-main ()
-{
-return f != tgetent;
   ;
   return 0;
 }
@@ -4128,8 +3850,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -4148,11 +3869,7 @@ else
 LIBS="-ltermcap  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -4161,6 +3878,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -4184,8 +3907,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_termcap_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_termcap_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -4205,11 +3927,7 @@ else
 LIBS="-ltinfo  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -4218,6 +3936,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -4241,8 +3965,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_tinfo_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_tinfo_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -4262,11 +3985,7 @@ else
 LIBS="-lcurses  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -4275,6 +3994,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -4298,8 +4023,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_curses_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_curses_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -4319,11 +4043,7 @@ else
 LIBS="-lncurses  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -4332,6 +4052,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -4355,8 +4081,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_ncurses_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_ncurses_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -4443,21 +4168,23 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <readline/readline.h>
 
+extern int rl_gnu_readline_p;
+
 main()
 {
        FILE *fp;
        fp = fopen("conftest.rlv", "w");
-       if (fp == 0) exit(1);
-       fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
+       if (fp == 0)
+               exit(1);
+       if (rl_gnu_readline_p != 1)
+               fprintf(fp, "0.0\n");
+       else
+               fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
        fclose(fp);
        exit(0);
 }
@@ -4478,12 +4205,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_rl_version='0.0'
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -4575,12 +4301,12 @@ echo "$as_me: WARNING: using private bash version" >&2;}
        esac
 fi
 
+TILDE_LIB=-ltilde
 if test $opt_readline = yes; then
        cat >>confdefs.h <<\_ACEOF
 #define READLINE 1
 _ACEOF
 
-       READLINE_LIB=-lreadline
        if test "$opt_with_installed_readline" != "no" ; then
                case "$opt_with_installed_readline" in
                yes)    RL_INCLUDE= ;;
@@ -4591,9 +4317,23 @@ _ACEOF
                        ;;
                esac
                READLINE_DEP=
+               READLINE_LIB=-lreadline
+               # section for OS versions that don't allow unresolved symbols
+               # to be compiled into dynamic libraries.
+               case "$host_os" in
+               cygwin*)        TILDE_LIB= ;;
+               esac
        else
                RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
                READLINE_DEP='$(READLINE_LIBRARY)'
+               # section for OS versions that ship an older/broken version of
+               # readline as a standard dynamic library and don't allow a
+               # static version specified as -llibname to override the
+               # dynamic version
+               case "${host_os}" in
+               darwin8*)       READLINE_LIB='${READLINE_LIBRARY}' ;;
+               *)              READLINE_LIB=-lreadline ;;
+               esac
        fi
 else
        RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
@@ -4612,10 +4352,10 @@ _ACEOF
 _ACEOF
 
        fi
-       HISTORY_LIB=-lhistory
        if test "$opt_with_installed_readline" != "no"; then
                HIST_LIBDIR=$RL_LIBDIR
                HISTORY_DEP=
+               HISTORY_LIB=-lhistory
                case "$opt_with_installed_readline" in
                yes)    RL_INCLUDE= ;;
                *)      case "$RL_INCLUDEDIR" in
@@ -4627,6 +4367,14 @@ _ACEOF
        else
                HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
                HISTORY_DEP='$(HISTORY_LIBRARY)'
+               # section for OS versions that ship an older version of
+               # readline as a standard dynamic library and don't allow a
+               # static version specified as -llibname to override the
+               # dynamic version
+               case "${host_os}" in
+               darwin8*)       HISTORY_LIB='${HISTORY_LIBRARY}' ;;
+               *)              HISTORY_LIB=-lhistory ;;
+               esac
        fi
 else
        HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
@@ -4642,6 +4390,7 @@ fi
 
 
 
+
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -4877,15 +4626,15 @@ fi
 done
 test -n "$YACC" || YACC="yacc"
 
-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
 if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.make <<\_ACEOF
 all:
-       @echo 'ac_maketemp="$(MAKE)"'
+       @echo 'ac_maketemp="${MAKE}"'
 _ACEOF
 # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
 eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
@@ -4913,11 +4662,129 @@ opennt*|interix*)      MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 esac
 
 
+if test x$SIZE = x; then
+       if test x$ac_tool_prefix = x; then
+               SIZE=size
+       else
+               SIZE=${ac_tool_prefix}size
+               save_IFS=$IFS ; IFS=:
+               size_found=0
+               for dir in $PATH; do
+                       if test -x $dir/$SIZE ; then
+                               size_found=1
+                               break
+                       fi
+               done
+               if test $size_found -eq 0; then
+                       SIZE=:
+               fi
+               IFS=$save_IFS
+       fi
+fi
+
+
 cat >>confdefs.h <<\_ACEOF
 #define _GNU_SOURCE 1
 _ACEOF
 
 
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX 10.20 and later        -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
 echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
 if test "${ac_cv_c_const+set}" = set; then
@@ -4925,12 +4792,14 @@ if test "${ac_cv_c_const+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5000,8 +4869,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_c_const=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_c_const=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5025,15 +4893,10 @@ else
 for ac_kw in inline __inline__ __inline; do
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
+static $ac_kw int static_foo () {return 0; }
+$ac_kw int foo () {return 0; }
 #endif
 
 _ACEOF
@@ -5052,8 +4915,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_c_inline=$ac_kw; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
@@ -5082,14 +4944,16 @@ else
   # See if sys/param.h defines the BYTE_ORDER macro.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5116,14 +4980,16 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   # It does; now see whether it defined to BIG_ENDIAN or not.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/param.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5150,32 +5016,32 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_c_bigendian=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_c_bigendian=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 # It does not; compile a test program.
 if test "$cross_compiling" = yes; then
-  # try to guess the endianness by grepping values into an object file
+  # try to guess the endianess by grep'ing values into an object file
   ac_cv_c_bigendian=unknown
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
 short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
 void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
 short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
 short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
 void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5196,10 +5062,10 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+  if fgrep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
   ac_cv_c_bigendian=yes
 fi
-if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+if fgrep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
   if test "$ac_cv_c_bigendian" = unknown; then
     ac_cv_c_bigendian=no
   else
@@ -5209,18 +5075,13 @@ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
 fi
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 int
 main ()
 {
@@ -5249,12 +5110,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_c_bigendian=yes
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5271,9 +5131,9 @@ _ACEOF
   no)
      ;;
   *)
-    { { echo "$as_me:$LINENO: error: unknown endianness
+    { { echo "$as_me:$LINENO: error: unknown endianess
 presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-echo "$as_me: error: unknown endianness
+echo "$as_me: error: unknown endianess
 presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
@@ -5285,17 +5145,13 @@ if test "${ac_cv_c_stringize+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #define x(y) #y
 
 char *s = x(teststring);
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "#teststring" >/dev/null 2>&1; then
+  egrep "#teststring" >/dev/null 2>&1; then
   ac_cv_c_stringize=no
 else
   ac_cv_c_stringize=yes
@@ -5320,13 +5176,15 @@ if test "${ac_cv_c_long_double+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <float.h>
          long double foo = 0.0;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5354,8 +5212,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_c_long_double=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_c_long_double=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5398,12 +5255,14 @@ if test "${ac_cv_c_char_unsigned+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5429,8 +5288,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_c_char_unsigned=no
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_c_char_unsigned=yes
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5749,7 +5607,7 @@ echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
         rm -f messages.po
   fi
 
-            ac_config_commands="$ac_config_commands default-1"
+  ac_config_commands="$ac_config_commands default-1"
 
 
 echo "$as_me:$LINENO: checking for off_t" >&5
@@ -5759,12 +5617,14 @@ if test "${ac_cv_type_off_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5791,8 +5651,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_off_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_off_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5816,12 +5675,14 @@ if test "${ac_cv_type_size_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5848,8 +5709,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_size_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_size_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -5875,12 +5735,14 @@ if test "${ac_cv_working_alloca_h+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <alloca.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5904,8 +5766,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_working_alloca_h=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_working_alloca_h=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -5927,11 +5788,7 @@ if test "${ac_cv_func_alloca_works+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #ifdef __GNUC__
 # define alloca __builtin_alloca
 #else
@@ -5953,6 +5810,12 @@ char *alloca ();
 # endif
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -5976,8 +5839,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_alloca_works=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_alloca_works=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -6011,11 +5873,7 @@ if test "${ac_cv_os_cray+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
 #else
@@ -6024,7 +5882,7 @@ wenotbecray
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then
+  egrep "webecray" >/dev/null 2>&1; then
   ac_cv_os_cray=yes
 else
   ac_cv_os_cray=no
@@ -6044,44 +5902,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -6101,8 +5952,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -6131,11 +5981,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 int
 find_stack_direction ()
 {
@@ -6171,12 +6017,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_c_stack_direction=-1
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
@@ -6208,11 +6053,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -6231,8 +6072,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -6244,17 +6084,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -6271,8 +6107,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -6285,32 +6120,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -6343,44 +6160,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -6400,8 +6210,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -6426,11 +6235,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 /* malloc might have been renamed as rpl_malloc. */
 #undef malloc
@@ -6573,12 +6378,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_func_mmap_fixed_mapped=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
@@ -6600,11 +6404,7 @@ if test "${ac_cv_gnu_library_2_1+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <features.h>
 #ifdef __GNU_LIBRARY__
@@ -6615,7 +6415,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  egrep "Lucky GNU user" >/dev/null 2>&1; then
   ac_cv_gnu_library_2_1=yes
 else
   ac_cv_gnu_library_2_1=no
@@ -6652,11 +6452,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdlib.h>
 #include <signal.h>
@@ -6710,12 +6506,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 gt_cv_int_divbyzero_sigfpe=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 fi
@@ -6739,13 +6534,15 @@ if test "${jm_ac_cv_header_inttypes_h+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <inttypes.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -6769,8 +6566,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   jm_ac_cv_header_inttypes_h=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 jm_ac_cv_header_inttypes_h=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -6793,13 +6589,15 @@ if test "${jm_ac_cv_header_stdint_h+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <stdint.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -6823,8 +6621,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   jm_ac_cv_header_stdint_h=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 jm_ac_cv_header_stdint_h=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -6847,12 +6644,14 @@ if test "${ac_cv_type_unsigned_long_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 unsigned long long ull = 1; int i = 63;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -6877,8 +6676,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_type_unsigned_long_long=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_unsigned_long_long=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -6923,13 +6721,15 @@ else
 
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <inttypes.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -6953,8 +6753,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   gt_cv_header_inttypes_h=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 gt_cv_header_inttypes_h=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -6981,16 +6780,18 @@ else
 
         cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <inttypes.h>
 #ifdef PRId32
 char *p = PRId32;
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -7014,8 +6815,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   gt_cv_inttypes_pri_broken=no
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 gt_cv_inttypes_pri_broken=yes
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -7605,11 +7405,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -7628,8 +7424,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -7641,17 +7436,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -7668,8 +7459,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -7682,32 +7472,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -7764,44 +7536,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -7821,8 +7586,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -7878,13 +7642,15 @@ else
     am_cv_lib_iconv=no
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -7910,8 +7676,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   am_cv_func_iconv=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
@@ -7919,13 +7684,15 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
       LIBS="$LIBS $LIBICONV"
       cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -7952,8 +7719,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
         am_cv_func_iconv=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
@@ -7991,11 +7757,7 @@ else
 
       cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdlib.h>
 #include <iconv.h>
@@ -8009,6 +7771,12 @@ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, si
 size_t iconv();
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8032,8 +7800,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   am_cv_proto_iconv_arg1=""
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 am_cv_proto_iconv_arg1="const"
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -8060,12 +7827,14 @@ if test "${am_cv_langinfo_codeset+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <langinfo.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8089,8 +7858,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   am_cv_langinfo_codeset=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 am_cv_langinfo_codeset=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -8115,12 +7883,14 @@ if test "${am_cv_val_LC_MESSAGES+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <locale.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8144,8 +7914,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   am_cv_val_LC_MESSAGES=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 am_cv_val_LC_MESSAGES=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -8289,14 +8058,16 @@ if test "${gt_cv_func_gnugettext2_libc+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
 extern int *_nl_domain_bindings;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8321,8 +8092,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   gt_cv_func_gnugettext2_libc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 gt_cv_func_gnugettext2_libc=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -8721,11 +8491,7 @@ else
             LIBS="$LIBS $LIBINTL"
                         cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
 extern
@@ -8733,6 +8499,12 @@ extern
 "C"
 #endif
 const char *_nl_expand_alias ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8757,8 +8529,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   gt_cv_func_gnugettext2_libintl=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 gt_cv_func_gnugettext2_libintl=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -8766,11 +8537,7 @@ rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
               LIBS="$LIBS $LIBICONV"
               cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
 extern
@@ -8778,6 +8545,12 @@ extern
 "C"
 #endif
 const char *_nl_expand_alias ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -8805,8 +8578,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
             fi
@@ -8981,14 +8753,16 @@ if eval "test \"\${$as_ac_Header+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9013,8 +8787,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_Header=no"
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9041,11 +8814,7 @@ else
 ac_cv_search_opendir=no
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -9054,6 +8823,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char opendir ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9077,8 +8852,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_search_opendir="none required"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 if test "$ac_cv_search_opendir" = no; then
@@ -9086,11 +8860,7 @@ if test "$ac_cv_search_opendir" = no; then
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -9099,6 +8869,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char opendir ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9123,8 +8899,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
   done
@@ -9148,11 +8923,7 @@ else
 ac_cv_search_opendir=no
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -9161,6 +8932,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char opendir ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9184,8 +8961,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_search_opendir="none required"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 if test "$ac_cv_search_opendir" = no; then
@@ -9193,11 +8969,7 @@ if test "$ac_cv_search_opendir" = no; then
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -9206,6 +8978,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char opendir ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9230,8 +9008,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
   done
@@ -9254,15 +9031,17 @@ if test "${ac_cv_header_time+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
 #include <time.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9287,8 +9066,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_header_time=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_header_time=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9323,11 +9101,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -9346,8 +9120,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9359,17 +9132,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -9386,8 +9155,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -9400,32 +9168,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -9467,9 +9217,10 @@ done
 
 
 
+
 for ac_header in unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
                 memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
-                stddef.h stdint.h netdb.h grp.h strings.h regex.h
+                stddef.h stdint.h netdb.h pwd.h grp.h strings.h regex.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
@@ -9486,11 +9237,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -9509,8 +9256,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9522,17 +9268,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -9549,8 +9291,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -9563,32 +9304,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -9622,8 +9345,7 @@ done
 
 
 
-
-for ac_header in sys/ptem.h sys/pte.h sys/stream.h sys/select.h sys/file.h \
+for ac_header in sys/pte.h sys/stream.h sys/select.h sys/file.h \
                 sys/resource.h sys/param.h sys/socket.h sys/stat.h \
                 sys/time.h sys/times.h sys/types.h sys/wait.h
 do
@@ -9642,11 +9364,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -9665,8 +9383,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9678,17 +9395,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -9705,8 +9418,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -9719,32 +9431,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -9785,11 +9479,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -9808,8 +9498,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -9821,17 +9510,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -9848,8 +9533,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -9862,32 +9546,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -9910,6 +9576,47 @@ fi
 done
 
 
+echo "$as_me:$LINENO: checking for sys/ptem.h" >&5
+echo $ECHO_N "checking for sys/ptem.h... $ECHO_C" >&6
+if test "${ac_cv_header_sys_ptem_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_SYS_STREAM_H
+#  include <sys/stream.h>
+#endif
+
+
+#include <sys/ptem.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_sys_ptem_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_sys_ptem_h=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_sys_ptem_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_ptem_h" >&6
+
+
+
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo "$as_me:$LINENO: checking for working alloca.h" >&5
@@ -9919,12 +9626,14 @@ if test "${ac_cv_working_alloca_h+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <alloca.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -9948,8 +9657,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_working_alloca_h=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_working_alloca_h=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -9971,11 +9679,7 @@ if test "${ac_cv_func_alloca_works+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #ifdef __GNUC__
 # define alloca __builtin_alloca
 #else
@@ -9997,6 +9701,12 @@ char *alloca ();
 # endif
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -10020,8 +9730,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_alloca_works=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_alloca_works=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10055,11 +9764,7 @@ if test "${ac_cv_os_cray+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
 #else
@@ -10068,7 +9773,7 @@ wenotbecray
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then
+  egrep "webecray" >/dev/null 2>&1; then
   ac_cv_os_cray=yes
 else
   ac_cv_os_cray=no
@@ -10088,44 +9793,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -10145,8 +9843,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10175,11 +9872,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 int
 find_stack_direction ()
 {
@@ -10215,12 +9908,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_c_stack_direction=-1
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
@@ -10241,12 +9933,14 @@ else
   # Use it with a single arg.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -10270,8 +9964,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_func_getpgrp_void=no
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_getpgrp_void=yes
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -10292,104 +9985,34 @@ echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6
 if test "${ac_cv_func_setvbuf_reversed+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_cv_func_setvbuf_reversed=no
-   cat >conftest.$ac_ext <<_ACEOF
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdio.h>
-#        if PROTOTYPES
-          int (setvbuf) (FILE *, int, char *, size_t);
-#        endif
+/* If setvbuf has the reversed format, exit 0. */
 int
 main ()
 {
-char buf; return setvbuf (stdout, _IOLBF, &buf, 1);
-  ;
-  return 0;
+  /* This call has the arguments reversed.
+     A reversed system may check and see that the address of main
+     is not _IOLBF, _IONBF, or _IOFBF, and return nonzero.  */
+  if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
+    exit(1);
+  putc('\r', stdout);
+  exit(0);                     /* Non-reversed systems segv here.  */
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest$ac_exeext
 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdio.h>
-#           if PROTOTYPES
-             int (setvbuf) (FILE *, int, char *, size_t);
-#           endif
-int
-main ()
-{
-char buf; return setvbuf (stdout, &buf, _IOLBF, 1);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  # It compiles and links either way, so it must not be declared
-        # with a prototype and most likely this is a K&R C compiler.
-        # Try running it.
-        if test "$cross_compiling" = yes; then
-  : # Assume setvbuf is not reversed when cross-compiling.
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-/* This call has the arguments reversed.
-                  A reversed system may check and see that the address of buf
-                  is not _IOLBF, _IONBF, or _IOFBF, and return nonzero.  */
-               char buf;
-               if (setvbuf (stdout, _IOLBF, &buf, 1) != 0)
-                 exit (1);
-               putchar ('\r');
-               exit (0); /* Non-reversed systems SEGV here.  */
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
@@ -10399,26 +10022,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-rm -f core core.* *.core
-fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-       ac_cv_func_setvbuf_reversed=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+ac_cv_func_setvbuf_reversed=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f core core.* *.core
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_setvbuf_reversed" >&5
 echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6
@@ -10441,44 +10051,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -10498,8 +10101,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10518,44 +10120,37 @@ if test "${ac_cv_func__doprnt+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char _doprnt (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char _doprnt (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char _doprnt ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub__doprnt) || defined (__stub____doprnt)
 choke me
 #else
-char (*f) () = _doprnt;
-#endif
-#ifdef __cplusplus
-}
+f = _doprnt;
 #endif
 
-int
-main ()
-{
-return f != _doprnt;
   ;
   return 0;
 }
@@ -10575,8 +10170,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func__doprnt=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func__doprnt=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10605,12 +10199,14 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -10636,12 +10232,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_func_strcoll_works=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5
@@ -10671,16 +10266,12 @@ if test "$ac_cv_func_vprintf" = no; then
 echo $ECHO_N "checking for declaration of vprintf in stdio.h... $ECHO_C" >&6
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdio.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "[int[        ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1; then
+  egrep "[int[         ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1; then
   ac_cv_func_vprintf=yes
 fi
 rm -f conftest*
@@ -10706,11 +10297,7 @@ if test "${ac_cv_type_signal+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
 #ifdef signal
@@ -10722,6 +10309,12 @@ extern "C" void (*signal (int, void (*)(int)))(int);
 void (*signal ()) ();
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -10745,8 +10338,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_signal=void
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_signal=int
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -10767,44 +10359,37 @@ if test "${ac_cv_func___setostype+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char __setostype (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char __setostype (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char __setostype ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub___setostype) || defined (__stub_____setostype)
 choke me
 #else
-char (*f) () = __setostype;
-#endif
-#ifdef __cplusplus
-}
+f = __setostype;
 #endif
 
-int
-main ()
-{
-return f != __setostype;
   ;
   return 0;
 }
@@ -10824,8 +10409,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func___setostype=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func___setostype=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10846,44 +10430,37 @@ if test "${ac_cv_func_wait3+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char wait3 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char wait3 (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char wait3 ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_wait3) || defined (__stub___wait3)
 choke me
 #else
-char (*f) () = wait3;
-#endif
-#ifdef __cplusplus
-}
+f = wait3;
 #endif
 
-int
-main ()
-{
-return f != wait3;
   ;
   return 0;
 }
@@ -10903,8 +10480,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_wait3=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_wait3=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -10925,44 +10501,37 @@ if test "${ac_cv_func_isinf+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char isinf (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char isinf (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char isinf ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_isinf) || defined (__stub___isinf)
 choke me
 #else
-char (*f) () = isinf;
-#endif
-#ifdef __cplusplus
-}
+f = isinf;
 #endif
 
-int
-main ()
-{
-return f != isinf;
   ;
   return 0;
 }
@@ -10982,8 +10551,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_isinf=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_isinf=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11005,44 +10573,37 @@ if test "${ac_cv_func_mkfifo+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char mkfifo (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char mkfifo (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char mkfifo ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_mkfifo) || defined (__stub___mkfifo)
 choke me
 #else
-char (*f) () = mkfifo;
-#endif
-#ifdef __cplusplus
-}
+f = mkfifo;
 #endif
 
-int
-main ()
-{
-return f != mkfifo;
   ;
   return 0;
 }
@@ -11062,8 +10623,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_mkfifo=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_mkfifo=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 
 
 
-for ac_func in dup2 select getdtablesize getgroups gethostname \
-               setdtablesize getpagesize killpg lstat getpeername sbrk \
-               getrlimit getrusage gettimeofday waitpid tcgetpgrp \
-               readlink
+
+
+
+
+for ac_func in dup2 fcntl getdtablesize getgroups gethostname getpagesize \
+               getpeername getrlimit getrusage gettimeofday kill killpg \
+               lstat readlink sbrk select setdtablesize tcgetpgrp uname \
+               ulimit waitpid
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -11113,44 +10677,223 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
 #else
-# include <assert.h>
+f = $ac_func;
 #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in rename
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
+f = $ac_func;
 #endif
-#ifdef __cplusplus
+
+  ;
+  return 0;
 }
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+fi
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in bcopy bzero confstr fnmatch \
+               getaddrinfo gethostbyname getservbyname getservent inet_aton \
+               memmove pathconf putenv raise regcomp regexec \
+               setenv setlinebuf setlocale setvbuf siginterrupt strchr \
+               sysconf tcgetattr times ttyname tzset unsetenv
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
 #endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+char (*f) ();
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
-return f != $ac_func;
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+f = $ac_func;
+#endif
+
   ;
   return 0;
 }
@@ -11170,8 +10913,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
 done
 
 
-for ac_func in rename
+
+
+
+
+for ac_func in vsnprintf snprintf vasprintf asprintf
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -11197,44 +10943,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -11254,8 +10993,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11267,8 +11005,6 @@ if test `eval echo '${'$as_ac_var'}'` = yes; then
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
-else
-  LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
 fi
 done
 
@@ -11278,39 +11014,7 @@ done
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in bcopy bzero confstr sysconf pathconf setenv putenv unsetenv \
-               setlinebuf setvbuf setlocale strchr tcgetattr uname \
-               ulimit tzset siginterrupt memmove ttyname times \
-               getaddrinfo gethostbyname getservbyname getservent inet_aton \
-               vsnprintf snprintf vasprintf asprintf fnmatch regcomp regexec
+for ac_func in isascii isblank isgraph isprint isspace isxdigit
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -11320,44 +11024,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -11377,8 +11074,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11396,10 +11092,7 @@ done
 
 
 
-
-
-
-for ac_func in isascii isblank isgraph isprint isspace isxdigit
+for ac_func in getpwent getpwnam getpwuid
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -11409,44 +11102,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -11466,8 +11152,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11489,7 +11174,8 @@ done
 
 
 
-for ac_func in getcwd strcasecmp strerror strftime strpbrk memset strstr
+
+for ac_func in getcwd memset strcasecmp strerror strftime strnlen strpbrk strstr
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -11499,44 +11185,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -11556,8 +11235,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11592,44 +11270,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -11649,8 +11320,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -11676,12 +11346,14 @@ if test "${ac_cv_have_decl_confstr+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -11708,8 +11380,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_confstr=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_confstr=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -11739,12 +11410,14 @@ if test "${ac_cv_have_decl_printf+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -11771,8 +11444,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_printf=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_printf=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -11802,12 +11474,14 @@ if test "${ac_cv_have_decl_sbrk+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -11834,8 +11508,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_sbrk=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_sbrk=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -11865,12 +11538,14 @@ if test "${ac_cv_have_decl_strcpy+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -11897,8 +11572,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_strcpy=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_strcpy=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -11928,12 +11602,14 @@ if test "${ac_cv_have_decl_strsignal+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -11960,8 +11636,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_strsignal=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_strsignal=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -11992,12 +11667,14 @@ if test "${ac_cv_have_decl_strtold+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12024,8 +11701,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_have_decl_strtold=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_have_decl_strtold=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -12046,12 +11722,14 @@ echo $ECHO_N "checking for broken strtold... $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12075,8 +11753,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_strtold_broken=no
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_strtold_broken=yes
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -12114,11 +11791,7 @@ if test "${bash_cv_decl_strtoimax+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12127,6 +11800,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12150,8 +11829,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtoimax=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtoimax=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12181,11 +11859,7 @@ if test "${bash_cv_decl_strtol+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12194,6 +11868,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12217,8 +11897,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtol=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtol=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12248,11 +11927,7 @@ if test "${bash_cv_decl_strtoll+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12261,6 +11936,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12284,8 +11965,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtoll=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtoll=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12315,11 +11995,7 @@ if test "${bash_cv_decl_strtoul+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12328,6 +12004,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12351,8 +12033,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtoul=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtoul=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12382,11 +12063,7 @@ if test "${bash_cv_decl_strtoull+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12395,6 +12072,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12418,8 +12101,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtoull=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtoull=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12449,11 +12131,7 @@ if test "${bash_cv_decl_strtoumax+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #  include <stdlib.h>
@@ -12462,6 +12140,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 #  include <inttypes.h>
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -12485,8 +12169,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_decl_strtoumax=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_strtoumax=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12526,11 +12209,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -12549,8 +12228,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -12562,17 +12240,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -12589,8 +12263,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -12603,32 +12276,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -12661,44 +12316,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -12718,8 +12366,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -12744,11 +12391,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* Test program from Paul Eggert and Tony Leneis.  */
 #if TIME_WITH_SYS_TIME
 # include <sys/time.h>
@@ -12910,12 +12553,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_func_working_mktime=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_working_mktime" >&5
@@ -12948,11 +12590,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -12971,8 +12609,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -12984,17 +12621,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -13011,8 +12644,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -13025,32 +12657,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -13092,11 +12706,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -13115,8 +12725,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -13128,17 +12737,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -13155,8 +12760,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -13169,32 +12773,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -13227,44 +12813,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -13284,8 +12863,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -13310,11 +12888,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 /* malloc might have been renamed as rpl_malloc. */
 #undef malloc
@@ -13457,12 +13031,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_func_mmap_fixed_mapped=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
@@ -13496,44 +13069,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -13553,8 +13119,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -13600,11 +13165,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -13623,8 +13184,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -13636,17 +13196,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -13663,8 +13219,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -13677,32 +13232,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -13742,11 +13279,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -13765,8 +13298,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -13778,17 +13310,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -13805,8 +13333,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -13819,32 +13346,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -13884,11 +13393,7 @@ echo "$as_me:$LINENO: checking $ac_header usability" >&5
 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 #include <$ac_header>
 _ACEOF
@@ -13907,8 +13412,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_header_compiler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_header_compiler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -13920,17 +13424,13 @@ echo "$as_me:$LINENO: checking $ac_header presence" >&5
 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <$ac_header>
 _ACEOF
 if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
   (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
+  egrep -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
@@ -13947,8 +13447,7 @@ if test -z "$ac_cpp_err"; then
   ac_header_preproc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+  cat conftest.$ac_ext >&5
   ac_header_preproc=no
 fi
 rm -f conftest.err conftest.$ac_ext
@@ -13961,32 +13460,14 @@ case $ac_header_compiler:$ac_header_preproc in
     { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
   no:yes )
     { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
     { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    (
-      cat <<\_ASBOX
-## ------------------------------------ ##
-## Report this to bug-autoconf@gnu.org. ##
-## ------------------------------------ ##
-_ASBOX
-    ) |
-      sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
 esac
 echo "$as_me:$LINENO: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
@@ -14016,44 +13497,37 @@ if test "${ac_cv_func_mbsrtowcs+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char mbsrtowcs (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char mbsrtowcs (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char mbsrtowcs ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_mbsrtowcs) || defined (__stub___mbsrtowcs)
 choke me
 #else
-char (*f) () = mbsrtowcs;
-#endif
-#ifdef __cplusplus
-}
+f = mbsrtowcs;
 #endif
 
-int
-main ()
-{
-return f != mbsrtowcs;
   ;
   return 0;
 }
@@ -14073,8 +13547,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_mbsrtowcs=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_mbsrtowcs=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14095,44 +13568,37 @@ if test "${ac_cv_func_mbrtowc+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char mbrtowc (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char mbrtowc (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char mbrtowc ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_mbrtowc) || defined (__stub___mbrtowc)
 choke me
 #else
-char (*f) () = mbrtowc;
-#endif
-#ifdef __cplusplus
-}
+f = mbrtowc;
 #endif
 
-int
-main ()
-{
-return f != mbrtowc;
   ;
   return 0;
 }
@@ -14152,8 +13618,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_mbrtowc=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_mbrtowc=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14174,44 +13639,37 @@ if test "${ac_cv_func_mbrlen+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char mbrlen (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char mbrlen (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char mbrlen ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_mbrlen) || defined (__stub___mbrlen)
 choke me
 #else
-char (*f) () = mbrlen;
-#endif
-#ifdef __cplusplus
-}
+f = mbrlen;
 #endif
 
-int
-main ()
-{
-return f != mbrlen;
   ;
   return 0;
 }
@@ -14231,8 +13689,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_mbrlen=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_mbrlen=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14253,44 +13710,37 @@ if test "${ac_cv_func_wctomb+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char wctomb (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char wctomb (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char wctomb ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_wctomb) || defined (__stub___wctomb)
 choke me
 #else
-char (*f) () = wctomb;
-#endif
-#ifdef __cplusplus
-}
+f = wctomb;
 #endif
 
-int
-main ()
-{
-return f != wctomb;
   ;
   return 0;
 }
@@ -14310,8 +13760,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_wctomb=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_wctomb=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14332,44 +13781,37 @@ if test "${ac_cv_func_wcwidth+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char wcwidth (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char wcwidth (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char wcwidth ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_wcwidth) || defined (__stub___wcwidth)
 choke me
 #else
-char (*f) () = wcwidth;
-#endif
-#ifdef __cplusplus
-}
+f = wcwidth;
 #endif
 
-int
-main ()
-{
-return f != wcwidth;
   ;
   return 0;
 }
@@ -14389,8 +13831,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_wcwidth=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_wcwidth=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14411,44 +13852,37 @@ if test "${ac_cv_func_wcsdup+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char wcsdup (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char wcsdup (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char wcsdup ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_wcsdup) || defined (__stub___wcsdup)
 choke me
 #else
-char (*f) () = wcsdup;
-#endif
-#ifdef __cplusplus
-}
+f = wcsdup;
 #endif
 
-int
-main ()
-{
-return f != wcsdup;
   ;
   return 0;
 }
@@ -14468,8 +13902,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_wcsdup=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_wcsdup=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14491,13 +13924,15 @@ if test "${bash_cv_have_mbstate_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <wchar.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14525,8 +13960,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_have_mbstate_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_have_mbstate_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -14547,12 +13981,14 @@ if test "${bash_cv_langinfo_codeset+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <langinfo.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14576,8 +14012,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_langinfo_codeset=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_langinfo_codeset=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14604,11 +14039,7 @@ else
 LIBS="-ldl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -14617,6 +14048,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char dlopen ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14640,8 +14077,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_dl_dlopen=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_dl_dlopen=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14671,44 +14107,37 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char $ac_func (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char $ac_func ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
 choke me
 #else
-char (*f) () = $ac_func;
-#endif
-#ifdef __cplusplus
-}
+f = $ac_func;
 #endif
 
-int
-main ()
-{
-return f != $ac_func;
   ;
   return 0;
 }
@@ -14728,8 +14157,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 eval "$as_ac_var=no"
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14746,26 +14174,31 @@ done
 
 fi
 
-echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5
-echo $ECHO_N "checking whether sys_siglist is declared... $ECHO_C" >&6
-if test "${ac_cv_have_decl_sys_siglist+set}" = set; then
+echo "$as_me:$LINENO: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo $ECHO_N "checking for sys_siglist declaration in signal.h or unistd.h... $ECHO_C" >&6
+if test "${ac_cv_decl_sys_siglist+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h.  */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
-#ifndef sys_siglist
-  char *p = (char *) sys_siglist;
-#endif
-
+char *msg = *(sys_siglist + 1);
   ;
   return 0;
 }
@@ -14782,35 +14215,25 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_have_decl_sys_siglist=yes
+  ac_cv_decl_sys_siglist=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_have_decl_sys_siglist=no
+cat conftest.$ac_ext >&5
+ac_cv_decl_sys_siglist=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5
-echo "${ECHO_T}$ac_cv_have_decl_sys_siglist" >&6
-if test $ac_cv_have_decl_sys_siglist = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST 1
-_ACEOF
-
+echo "$as_me:$LINENO: result: $ac_cv_decl_sys_siglist" >&5
+echo "${ECHO_T}$ac_cv_decl_sys_siglist" >&6
+if test $ac_cv_decl_sys_siglist = yes; then
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST 0
+cat >>confdefs.h <<\_ACEOF
+#define SYS_SIGLIST_DECLARED 1
 _ACEOF
 
-
 fi
 
 
-
-
 if test "$ac_cv_func_inet_aton" != 'yes'; then
 
 echo "$as_me:$LINENO: checking for inet_aton" >&5
@@ -14820,16 +14243,18 @@ if test "${bash_cv_func_inet_aton+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 struct in_addr ap;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14853,8 +14278,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_func_inet_aton=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_func_inet_aton=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14883,11 +14307,7 @@ else
 LIBS="-lsun  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -14896,6 +14316,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char getpwent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14919,8 +14345,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_sun_getpwent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_sun_getpwent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -14960,11 +14385,7 @@ else
 LIBS="-lsocket -lnsl $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -14973,6 +14394,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char getpeername ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -14996,8 +14423,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_socket_getpeername=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_socket_getpeername=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -15039,11 +14465,7 @@ else
 LIBS="-lnsl  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -15052,6 +14474,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char t_open ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15075,8 +14503,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_nsl_t_open=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_nsl_t_open=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -15126,12 +14553,14 @@ if test "${bash_cv_have_gethostbyname+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <netdb.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15157,8 +14586,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_have_gethostbyname=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_have_gethostbyname=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -15187,16 +14615,12 @@ if test "${ac_cv_type_uid_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uid_t" >/dev/null 2>&1; then
+  egrep "uid_t" >/dev/null 2>&1; then
   ac_cv_type_uid_t=yes
 else
   ac_cv_type_uid_t=no
@@ -15229,11 +14653,7 @@ else
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* Thanks to Mike Rendell for this test.  */
 #include <sys/types.h>
 #define NGID 256
@@ -15272,26 +14692,21 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 ac_cv_type_getgroups=int
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 if test $ac_cv_type_getgroups = cross; then
         cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <unistd.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then
+  egrep "getgroups.*int.*gid_t" >/dev/null 2>&1; then
   ac_cv_type_getgroups=gid_t
 else
   ac_cv_type_getgroups=int
@@ -15315,12 +14730,14 @@ if test "${ac_cv_type_off_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15347,8 +14764,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_off_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_off_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15372,12 +14788,14 @@ if test "${ac_cv_type_mode_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15404,8 +14822,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_mode_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_mode_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15429,16 +14846,12 @@ if test "${ac_cv_type_uid_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uid_t" >/dev/null 2>&1; then
+  egrep "uid_t" >/dev/null 2>&1; then
   ac_cv_type_uid_t=yes
 else
   ac_cv_type_uid_t=no
@@ -15468,12 +14881,14 @@ if test "${ac_cv_type_pid_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15500,8 +14915,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_pid_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_pid_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15525,12 +14939,14 @@ if test "${ac_cv_type_size_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15557,8 +14973,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_size_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_size_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15582,12 +14997,14 @@ if test "${ac_cv_type_ssize_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15614,8 +15031,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_ssize_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_ssize_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15639,12 +15055,14 @@ if test "${ac_cv_type_time_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15671,8 +15089,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_time_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_time_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15698,13 +15115,15 @@ if test "${bash_cv_type_long_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 long long ll = 1; int i = 63;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15731,8 +15150,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_type_long_long='long long'
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_type_long_long='long'
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -15754,13 +15172,15 @@ if test "${bash_cv_type_unsigned_long_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 unsigned long long ull = 1; int i = 63;
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15787,8 +15207,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_type_unsigned_long_long='unsigned long long'
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_type_unsigned_long_long='unsigned long'
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -15810,11 +15229,7 @@ if test "${ac_cv_type_signal+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
 #ifdef signal
@@ -15826,6 +15241,12 @@ extern "C" void (*signal (int, void (*)(int)))(int);
 void (*signal ()) ();
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15849,8 +15270,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_signal=void
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_signal=int
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15871,12 +15291,14 @@ if test "${ac_cv_type_char+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15903,8 +15325,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_char=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_char=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -15926,12 +15347,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15958,12 +15381,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -15989,8 +15414,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -16002,16 +15426,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16038,12 +15463,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16069,8 +15496,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -16082,8 +15508,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -16094,12 +15519,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16125,40 +15552,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_char=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77" >&5
+echo "$as_me: error: cannot compute sizeof (char), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (char)); }
 unsigned long ulongval () { return (long) (sizeof (char)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16201,16 +15625,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77" >&5
+echo "$as_me: error: cannot compute sizeof (char), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -16232,12 +15653,14 @@ if test "${ac_cv_type_short+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16264,8 +15687,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_short=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_short=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -16287,12 +15709,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16319,12 +15743,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16350,8 +15776,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -16363,16 +15788,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16399,12 +15825,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16430,8 +15858,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -16443,8 +15870,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -16455,12 +15881,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16486,40 +15914,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_short=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77" >&5
+echo "$as_me: error: cannot compute sizeof (short), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (short)); }
 unsigned long ulongval () { return (long) (sizeof (short)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16562,16 +15987,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77" >&5
+echo "$as_me: error: cannot compute sizeof (short), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -16593,12 +16015,14 @@ if test "${ac_cv_type_int+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16625,8 +16049,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_int=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_int=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -16648,12 +16071,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16680,12 +16105,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16711,8 +16138,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -16724,16 +16150,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16760,12 +16187,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16791,8 +16220,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -16804,8 +16232,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -16816,12 +16243,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16847,40 +16276,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_int=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77" >&5
+echo "$as_me: error: cannot compute sizeof (int), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (int)); }
 unsigned long ulongval () { return (long) (sizeof (int)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16923,16 +16349,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77" >&5
+echo "$as_me: error: cannot compute sizeof (int), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -16954,12 +16377,14 @@ if test "${ac_cv_type_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -16986,8 +16411,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_long=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_long=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17009,12 +16433,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17041,12 +16467,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17072,8 +16500,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -17085,16 +16512,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17121,12 +16549,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17152,8 +16582,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -17165,8 +16594,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17177,12 +16605,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17208,40 +16638,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77" >&5
+echo "$as_me: error: cannot compute sizeof (long), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (long)); }
 unsigned long ulongval () { return (long) (sizeof (long)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17284,16 +16711,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77" >&5
+echo "$as_me: error: cannot compute sizeof (long), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -17315,12 +16739,14 @@ if test "${ac_cv_type_char_p+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17347,8 +16773,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_char_p=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_char_p=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17370,12 +16795,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17402,12 +16829,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17433,8 +16862,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -17446,16 +16874,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17482,12 +16911,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17513,8 +16944,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -17526,8 +16956,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17538,12 +16967,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17569,40 +17000,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_char_p=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char *), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77" >&5
+echo "$as_me: error: cannot compute sizeof (char *), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (char *)); }
 unsigned long ulongval () { return (long) (sizeof (char *)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17645,16 +17073,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char *), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char *), 77" >&5
+echo "$as_me: error: cannot compute sizeof (char *), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -17676,12 +17101,14 @@ if test "${ac_cv_type_double+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17708,8 +17135,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_double=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_double=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17731,12 +17157,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17763,12 +17191,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17794,8 +17224,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -17807,16 +17236,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17843,12 +17273,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17874,8 +17306,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -17887,8 +17318,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -17899,12 +17329,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -17930,40 +17362,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_double=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (double), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77" >&5
+echo "$as_me: error: cannot compute sizeof (double), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (double)); }
 unsigned long ulongval () { return (long) (sizeof (double)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18006,16 +17435,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (double), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77" >&5
+echo "$as_me: error: cannot compute sizeof (double), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -18037,12 +17463,14 @@ if test "${ac_cv_type_long_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18069,8 +17497,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_long_long=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_long_long=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18092,12 +17519,14 @@ else
   # Depending upon the size, compute the lo and hi bounds.
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18124,12 +17553,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18155,8 +17586,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr $ac_mid + 1`
                     if test $ac_lo -le $ac_mid; then
                       ac_lo= ac_hi=
@@ -18168,16 +17598,17 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18204,12 +17635,14 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   while :; do
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18235,8 +17668,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_hi=`expr '(' $ac_mid ')' - 1`
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -18248,8 +17680,7 @@ rm -f conftest.$ac_objext conftest.$ac_ext
   done
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo= ac_hi=
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18260,12 +17691,14 @@ while test "x$ac_lo" != "x$ac_hi"; do
   ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18291,40 +17724,37 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_lo=`expr '(' $ac_mid ')' + 1`
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 done
 case $ac_lo in
 ?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long), 77
-See \`config.log' for more details." >&2;}
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77" >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77" >&2;}
    { (exit 1); exit 1; }; } ;;
 esac
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
 long longval () { return (long) (sizeof (long long)); }
 unsigned long ulongval () { return (long) (sizeof (long long)); }
 #include <stdio.h>
 #include <stdlib.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18367,16 +17797,13 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long), 77
-See \`config.log' for more details." >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77" >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77" >&2;}
    { (exit 1); exit 1; }; }
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.val
@@ -18399,12 +17826,14 @@ if test "${ac_cv_type_u_int+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18431,8 +17860,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_int=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_int=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18456,12 +17884,14 @@ if test "${ac_cv_type_u_long+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18488,8 +17918,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_long=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_long=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18516,12 +17945,14 @@ if test "${ac_cv_type_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18548,8 +17979,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18574,12 +18004,14 @@ if test "${ac_cv_type_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18606,8 +18038,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18632,12 +18063,14 @@ if test "${ac_cv_type_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18664,8 +18097,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18693,12 +18125,14 @@ if test "${ac_cv_type_u_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18725,8 +18159,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18751,12 +18184,14 @@ if test "${ac_cv_type_u_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18783,8 +18218,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18809,12 +18243,14 @@ if test "${ac_cv_type_u_bits16_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18841,8 +18277,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits16_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits16_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18870,12 +18305,14 @@ if test "${ac_cv_type_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18902,8 +18339,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18928,12 +18364,14 @@ if test "${ac_cv_type_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -18960,8 +18398,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -18986,12 +18423,14 @@ if test "${ac_cv_type_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19018,8 +18457,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19047,12 +18485,14 @@ if test "${ac_cv_type_u_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19079,8 +18519,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19105,12 +18544,14 @@ if test "${ac_cv_type_u_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19137,8 +18578,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19163,12 +18603,14 @@ if test "${ac_cv_type_u_bits32_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19195,8 +18637,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_u_bits32_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_u_bits32_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19224,12 +18665,14 @@ if test "${ac_cv_type_bits64_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19256,8 +18699,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits64_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits64_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19282,12 +18724,14 @@ if test "${ac_cv_type_bits64_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19314,8 +18758,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits64_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits64_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19340,12 +18783,14 @@ if test "${ac_cv_type_bits64_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19372,8 +18817,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits64_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits64_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19398,12 +18842,14 @@ if test "${ac_cv_type_bits64_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19430,8 +18876,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits64_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits64_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19456,12 +18901,14 @@ if test "${ac_cv_type_bits64_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19488,8 +18935,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_bits64_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_bits64_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19518,12 +18964,14 @@ if test "${ac_cv_type_ptrdiff_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19550,8 +18998,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_ptrdiff_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_ptrdiff_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19576,12 +19023,14 @@ if test "${ac_cv_type_ptrdiff_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19608,8 +19057,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_ptrdiff_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_ptrdiff_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19634,12 +19082,14 @@ if test "${ac_cv_type_ptrdiff_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19666,8 +19116,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_ptrdiff_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_ptrdiff_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19692,12 +19141,14 @@ if test "${ac_cv_type_ptrdiff_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19724,8 +19175,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_type_ptrdiff_t=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_type_ptrdiff_t=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -19752,11 +19202,7 @@ if test "${ac_cv_header_stat_broken+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -19786,7 +19232,7 @@ You lose.
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "You lose" >/dev/null 2>&1; then
+  egrep "You lose" >/dev/null 2>&1; then
   ac_cv_header_stat_broken=yes
 else
   ac_cv_header_stat_broken=no
@@ -19841,15 +19287,17 @@ if test "${bash_cv_func_lstat+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -19873,8 +19321,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_func_lstat=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_func_lstat=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -19904,11 +19351,7 @@ echo "$as_me: WARNING: cannot check ctype macros if cross compiling -- defaultin
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
@@ -19956,12 +19399,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_func_ctype_nonascii=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -19986,11 +19428,7 @@ echo "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <fcntl.h>
@@ -20024,12 +19462,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_dup2_broken=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 fi
@@ -20056,11 +19493,7 @@ echo "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- d
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>
@@ -20126,12 +19559,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_pgrp_pipe=yes
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 fi
@@ -20154,12 +19586,14 @@ else
 
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <signal.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20189,17 +19623,18 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_signal_vintage=posix
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 
     cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <signal.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20226,19 +19661,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_signal_vintage=4.2bsd
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 
       cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
        #include <signal.h>
        RETSIGTYPE foo() { }
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20266,8 +19702,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_signal_vintage=svr3
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_signal_vintage=v7
 
 fi
@@ -20308,12 +19743,14 @@ if test "${bash_cv_sys_errlist+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <errno.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20339,8 +19776,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_sys_errlist=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_sys_errlist=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -20367,11 +19803,7 @@ echo "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaul
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <signal.h>
@@ -20402,12 +19834,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_sys_siglist=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -20427,17 +19858,19 @@ if test "${bash_cv_decl_under_sys_siglist+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20461,8 +19894,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_decl_under_sys_siglist=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_decl_under_sys_siglist=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -20489,11 +19921,7 @@ echo "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defau
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <signal.h>
@@ -20524,12 +19952,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_under_sys_siglist=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -20550,11 +19977,7 @@ if test "${bash_cv_void_sighandler+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
 #ifdef signal
@@ -20564,6 +19987,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 extern "C"
 #endif
 void (*signal ()) ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20587,8 +20016,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_void_sighandler=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_void_sighandler=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -20611,11 +20039,7 @@ if test "${bash_cv_type_clock_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20628,7 +20052,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "clock_t" >/dev/null 2>&1; then
+  egrep "clock_t" >/dev/null 2>&1; then
   bash_cv_type_clock_t=yes
 else
   bash_cv_type_clock_t=no
@@ -20656,11 +20080,7 @@ if test "${bash_cv_type_sigset_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20673,7 +20093,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sigset_t" >/dev/null 2>&1; then
+  egrep "sigset_t" >/dev/null 2>&1; then
   bash_cv_type_sigset_t=yes
 else
   bash_cv_type_sigset_t=no
@@ -20701,11 +20121,7 @@ if test "${bash_cv_type_quad_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20718,7 +20134,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "quad_t" >/dev/null 2>&1; then
+  egrep "quad_t" >/dev/null 2>&1; then
   bash_cv_type_quad_t=yes
 else
   bash_cv_type_quad_t=no
@@ -20751,11 +20167,7 @@ if test "${bash_cv_type_intmax_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20768,7 +20180,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "intmax_t" >/dev/null 2>&1; then
+  egrep "intmax_t" >/dev/null 2>&1; then
   bash_cv_type_intmax_t=yes
 else
   bash_cv_type_intmax_t=no
@@ -20796,11 +20208,7 @@ if test "${bash_cv_type_uintmax_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20813,7 +20221,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uintmax_t" >/dev/null 2>&1; then
+  egrep "uintmax_t" >/dev/null 2>&1; then
   bash_cv_type_uintmax_t=yes
 else
   bash_cv_type_uintmax_t=no
@@ -20842,11 +20250,7 @@ if test "${bash_cv_type_socklen_t+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -20859,7 +20263,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "socklen_t" >/dev/null 2>&1; then
+  egrep "socklen_t" >/dev/null 2>&1; then
   bash_cv_type_socklen_t=yes
 else
   bash_cv_type_socklen_t=no
@@ -20891,13 +20295,15 @@ if test "${bash_cv_type_rlimit+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/resource.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -20921,8 +20327,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_type_rlimit=rlim_t
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 
 if test "$cross_compiling" = yes; then
   { echo "$as_me:$LINENO: WARNING: cannot check quad_t if cross compiling -- defaulting to long" >&5
@@ -20931,11 +20336,7 @@ echo "$as_me: WARNING: cannot check quad_t if cross compiling -- defaulting to l
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/time.h>
@@ -20965,12 +20366,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_type_rlimit=long
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21000,16 +20400,18 @@ if test "${ac_cv_member_struct_termios_c_line+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <termios.h>
 
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21035,53 +20437,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_member_struct_termios_c_line=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <termios.h>
-
-
-int
-main ()
-{
-static struct termios ac_aggr;
-if (sizeof ac_aggr.c_line)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_member_struct_termios_c_line=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_member_struct_termios_c_line=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
 echo "$as_me:$LINENO: result: $ac_cv_member_struct_termios_c_line" >&5
 echo "${ECHO_T}$ac_cv_member_struct_termios_c_line" >&6
 if test $ac_cv_member_struct_termios_c_line = yes; then
@@ -21100,16 +20460,18 @@ if test "${ac_cv_member_struct_termio_c_line+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <termio.h>
 
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21135,53 +20497,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_member_struct_termio_c_line=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <termio.h>
-
-
-int
-main ()
-{
-static struct termio ac_aggr;
-if (sizeof ac_aggr.c_line)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_member_struct_termio_c_line=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_member_struct_termio_c_line=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
 echo "$as_me:$LINENO: result: $ac_cv_member_struct_termio_c_line" >&5
 echo "${ECHO_T}$ac_cv_member_struct_termio_c_line" >&6
 if test $ac_cv_member_struct_termio_c_line = yes; then
@@ -21200,11 +20520,7 @@ if test "${bash_cv_dirent_has_dino+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -21226,6 +20542,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 # endif
 #endif /* HAVE_DIRENT_H */
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21251,8 +20573,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_dirent_has_dino=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_dirent_has_dino=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21275,11 +20596,7 @@ if test "${bash_cv_dirent_has_d_fileno+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -21301,6 +20618,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 # endif
 #endif /* HAVE_DIRENT_H */
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21326,8 +20649,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_dirent_has_d_fileno=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_dirent_has_d_fileno=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21350,11 +20672,7 @@ if test "${bash_cv_dirent_has_d_namlen+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -21376,6 +20694,12 @@ cat >>conftest.$ac_ext <<_ACEOF
 # endif
 #endif /* HAVE_DIRENT_H */
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21401,8 +20725,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_dirent_has_d_namlen=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_dirent_has_d_namlen=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21424,13 +20747,15 @@ if test "${bash_cv_struct_winsize_header+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21454,17 +20779,18 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_struct_winsize_header=ioctl_h
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <termios.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21488,8 +20814,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_struct_winsize_header=termios_h
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_struct_winsize_header=other
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21525,30 +20850,22 @@ else
 
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/time.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timeval" >/dev/null 2>&1; then
+  egrep "struct timeval" >/dev/null 2>&1; then
   bash_cv_struct_timeval=yes
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <time.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timeval" >/dev/null 2>&1; then
+  egrep "struct timeval" >/dev/null 2>&1; then
   bash_cv_struct_timeval=yes
 else
   bash_cv_struct_timeval=no
@@ -21577,12 +20894,14 @@ if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 $ac_includes_default
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21608,49 +20927,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_member_struct_stat_st_blocks=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-static struct stat ac_aggr;
-if (sizeof ac_aggr.st_blocks)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_member_struct_stat_st_blocks=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_member_struct_stat_st_blocks=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
 echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5
 echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6
 if test $ac_cv_member_struct_stat_st_blocks = yes; then
@@ -21669,14 +20950,16 @@ if test "${ac_cv_struct_tm+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <time.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21700,8 +20983,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_struct_tm=time.h
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_struct_tm=sys/time.h
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -21723,15 +21005,17 @@ if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_cv_struct_tm>
 
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21757,52 +21041,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   ac_cv_member_struct_tm_tm_zone=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <$ac_cv_struct_tm>
-
-
-int
-main ()
-{
-static struct tm ac_aggr;
-if (sizeof ac_aggr.tm_zone)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_member_struct_tm_tm_zone=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_member_struct_tm_tm_zone=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
 echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
 echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
 if test $ac_cv_member_struct_tm_tm_zone = yes; then
@@ -21828,16 +21071,18 @@ if test "${ac_cv_var_tzname+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <time.h>
 #ifndef tzname /* For SGI.  */
 extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21861,8 +21106,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_var_tzname=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_var_tzname=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -21886,30 +21130,22 @@ else
 
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/time.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timezone" >/dev/null 2>&1; then
+  egrep "struct timezone" >/dev/null 2>&1; then
   bash_cv_struct_timezone=yes
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <time.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timezone" >/dev/null 2>&1; then
+  egrep "struct timezone" >/dev/null 2>&1; then
   bash_cv_struct_timezone=yes
 else
   bash_cv_struct_timezone=no
@@ -21939,13 +21175,15 @@ if test "${bash_cv_have_strsignal+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -21969,8 +21207,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_have_strsignal=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_have_strsignal=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -21998,11 +21235,7 @@ echo "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
@@ -22058,12 +21291,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_opendir_not_robust=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22089,11 +21321,7 @@ echo "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to n
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 main()
 {
@@ -22117,12 +21345,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_ulimit_maxfds=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22148,11 +21375,7 @@ echo "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- de
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>
@@ -22201,12 +21424,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_getenv_redef=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22233,11 +21455,7 @@ echo "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-c
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #ifdef HAVE_UNISTD_H
@@ -22267,12 +21485,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_getcwd_malloc=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22301,11 +21518,7 @@ echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -22360,12 +21573,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_func_sigsetjmp=missing
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22392,11 +21604,7 @@ echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #if defined (HAVE_LOCALE_H)
@@ -22449,12 +21657,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_func_strcoll_broken=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22480,11 +21687,7 @@ if test "${bash_cv_std_putenv+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -22501,6 +21704,12 @@ extern int putenv (char *);
 extern int putenv ();
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -22524,8 +21733,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_std_putenv=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_std_putenv=no
 
 fi
@@ -22557,11 +21765,7 @@ if test "${bash_cv_std_unsetenv+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #if STDC_HEADERS
 #include <stdlib.h>
@@ -22578,6 +21782,12 @@ extern int unsetenv (const char *);
 extern int unsetenv ();
 #endif
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -22601,8 +21811,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   bash_cv_std_unsetenv=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_std_unsetenv=no
 
 fi
@@ -22637,11 +21846,7 @@ echo "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to n
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <stdio.h>
 #include <string.h>
@@ -22672,12 +21877,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_printf_a_format=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22706,11 +21910,7 @@ echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaul
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
@@ -22771,12 +21971,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_must_reinstall_sighandlers=yes
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22803,11 +22002,7 @@ echo "$as_me: WARNING: cannot check job control if cross-compiling -- defaulting
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #ifdef HAVE_SYS_WAIT_H
@@ -22868,12 +22063,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_job_control_missing=missing
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22899,11 +22093,7 @@ echo "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaul
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -22958,12 +22148,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_sys_named_pipes=missing
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -22977,18 +22166,64 @@ _ACEOF
 fi
 
 
-echo "$as_me:$LINENO: checking whether termios.h defines TIOCGWINSZ" >&5
+echo "$as_me:$LINENO: checking POSIX termios" >&5
+echo $ECHO_N "checking POSIX termios... $ECHO_C" >&6
+if test "${ac_cv_sys_posix_termios+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+/* SunOS 4.0.3 has termios.h but not the library calls.  */
+   tcgetattr(0, 0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sys_posix_termios=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_sys_posix_termios=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sys_posix_termios" >&5
+echo "${ECHO_T}$ac_cv_sys_posix_termios" >&6
+
+if test $ac_cv_sys_posix_termios = yes; then
+  echo "$as_me:$LINENO: checking whether termios.h defines TIOCGWINSZ" >&5
 echo $ECHO_N "checking whether termios.h defines TIOCGWINSZ... $ECHO_C" >&6
 if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <termios.h>
 #ifdef TIOCGWINSZ
@@ -22997,7 +22232,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then
+  egrep "yes" >/dev/null 2>&1; then
   ac_cv_sys_tiocgwinsz_in_termios_h=yes
 else
   ac_cv_sys_tiocgwinsz_in_termios_h=no
@@ -23008,6 +22243,7 @@ fi
 echo "$as_me:$LINENO: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
 echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_termios_h" >&6
 
+fi
 if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
   echo "$as_me:$LINENO: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
 echo $ECHO_N "checking whether sys/ioctl.h defines TIOCGWINSZ... $ECHO_C" >&6
@@ -23016,11 +22252,7 @@ if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #ifdef TIOCGWINSZ
@@ -23029,7 +22261,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then
+  egrep "yes" >/dev/null 2>&1; then
   ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes
 else
   ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no
@@ -23056,13 +22288,15 @@ if test "${bash_cv_tiocstat_in_ioctl+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23086,8 +22320,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_tiocstat_in_ioctl=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_tiocstat_in_ioctl=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -23109,13 +22342,15 @@ if test "${bash_cv_fionread_in_ioctl+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
 #include <sys/ioctl.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23139,8 +22374,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_fionread_in_ioctl=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_fionread_in_ioctl=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -23156,6 +22390,75 @@ _ACEOF
 fi
 
 
+
+echo "$as_me:$LINENO: checking whether WCONTINUED flag to waitpid is unavailable or available but broken" >&5
+echo $ECHO_N "checking whether WCONTINUED flag to waitpid is unavailable or available but broken... $ECHO_C" >&6
+if test "${bash_cv_wcontinued_broken+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  { echo "$as_me:$LINENO: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5
+echo "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;}
+    bash_cv_wcontinued_broken=no
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+main()
+{
+       int     x;
+
+       x = waitpid(-1, (int *)0, WNOHANG|WCONTINUED);
+       if (x == -1 && errno == EINVAL)
+               exit (1);
+       else
+               exit (0);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  bash_cv_wcontinued_broken=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+bash_cv_wcontinued_broken=yes
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+
+echo "$as_me:$LINENO: result: $bash_cv_wcontinued_broken" >&5
+echo "${ECHO_T}$bash_cv_wcontinued_broken" >&6
+if test $bash_cv_wcontinued_broken = yes; then
+cat >>confdefs.h <<\_ACEOF
+#define WCONTINUED_BROKEN 1
+_ACEOF
+
+fi
+
+
 echo "$as_me:$LINENO: checking for speed_t in sys/types.h" >&5
 echo $ECHO_N "checking for speed_t in sys/types.h... $ECHO_C" >&6
 if test "${bash_cv_speed_t_in_sys_types+set}" = set; then
@@ -23163,12 +22466,14 @@ if test "${bash_cv_speed_t_in_sys_types+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 #include <sys/types.h>
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23192,8 +22497,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_speed_t_in_sys_types=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_speed_t_in_sys_types=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -23215,11 +22519,7 @@ if test "${bash_cv_getpw_declared+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
@@ -23229,7 +22529,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "getpwuid" >/dev/null 2>&1; then
+  egrep "getpwuid" >/dev/null 2>&1; then
   bash_cv_getpw_declared=yes
 else
   bash_cv_getpw_declared=no
@@ -23260,11 +22560,7 @@ echo "$as_me: WARNING: cannot check real-time signals if cross compiling -- defa
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <signal.h>
@@ -23300,12 +22596,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ( exit $ac_status )
 bash_cv_unusable_rtsigs=no
 fi
-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 fi
 
@@ -23338,15 +22633,17 @@ if test "${bash_cv_kernel_rlimit+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/resource.h>
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23373,21 +22670,22 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_kernel_rlimit=no
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 #include <sys/types.h>
 #define _KERNEL
 #include <sys/resource.h>
 #undef _KERNEL
 
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23414,8 +22712,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   bash_cv_kernel_rlimit=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 bash_cv_kernel_rlimit=no
 fi
 rm -f conftest.$ac_objext conftest.$ac_ext
@@ -23457,44 +22754,37 @@ if test "${ac_cv_func_tgetent+set}" = set; then
 else
   cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char tgetent (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+    which can conflict with char tgetent (); below.  */
+#include <assert.h>
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
-{
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+char (*f) ();
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_tgetent) || defined (__stub___tgetent)
 choke me
 #else
-char (*f) () = tgetent;
-#endif
-#ifdef __cplusplus
-}
+f = tgetent;
 #endif
 
-int
-main ()
-{
-return f != tgetent;
   ;
   return 0;
 }
@@ -23514,8 +22804,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_func_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_func_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -23534,11 +22823,7 @@ else
 LIBS="-ltermcap  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -23547,6 +22832,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23570,8 +22861,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_termcap_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_termcap_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -23591,11 +22881,7 @@ else
 LIBS="-ltinfo  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -23604,6 +22890,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23627,8 +22919,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_tinfo_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_tinfo_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -23648,11 +22939,7 @@ else
 LIBS="-lcurses  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -23661,6 +22948,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23684,8 +22977,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_curses_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_curses_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -23705,11 +22997,7 @@ else
 LIBS="-lncurses  $LIBS"
 cat >conftest.$ac_ext <<_ACEOF
 #line $LINENO "configure"
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
+#include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
@@ -23718,6 +23006,12 @@ extern "C"
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
 char tgetent ();
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
 int
 main ()
 {
@@ -23741,8 +23035,7 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   ac_cv_lib_ncurses_tgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
+cat conftest.$ac_ext >&5
 ac_cv_lib_ncurses_tgetent=no
 fi
 rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
@@ -23803,7 +23096,14 @@ if test "${bash_cv_dev_fd+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -d /dev/fd  && test -r /dev/fd/0 < /dev/null; then
-   bash_cv_dev_fd=standard
+# check for systems like FreeBSD 5 that only provide /dev/fd/[012]
+   exec 3<&0
+   if test -r /dev/fd/3; then
+     bash_cv_dev_fd=standard
+   else
+     bash_cv_dev_fd=absent
+   fi
+   exec 3<&-
  elif test -d /proc/self/fd && test -r /proc/self/fd/0 < /dev/null; then
    bash_cv_dev_fd=whacky
  else
@@ -23934,11 +23234,18 @@ sco3.2*)      LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
 sunos4*)       LOCAL_CFLAGS=-DSunOS4 ;;
 solaris2.5*)   LOCAL_CFLAGS=-DSunOS5 ;;
 lynxos*)       LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
-linux*)                LOCAL_LDFLAGS=-rdynamic ;;       # allow dynamic loading
+linux*)                LOCAL_LDFLAGS=-rdynamic          # allow dynamic loading
+               case "`uname -r`" in
+               2.[456789]*|3*) cat >>confdefs.h <<\_ACEOF
+#define PGRP_PIPE 1
+_ACEOF
+ ;;
+               esac ;;
+*qnx6*)                LOCAL_CFLAGS="-Dqnx -Dqnx6" LOCAL_LIBS="-lncurses" ;;
 *qnx*)         LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
 powerux*)      LOCAL_LIBS="-lgen" ;;
 cygwin*)       LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
-opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO" ;;
+opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE" ;;
 esac
 
 case "${host_os}-${CC}" in
@@ -23953,6 +23260,7 @@ freebsd[3-9]*)
                        LOCAL_LDFLAGS=-rdynamic # allow dynamic loading
                fi ;;
 freebsdelf*)   LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
+dragonfly*)    LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 esac
 
 case "$host_cpu" in
@@ -24004,6 +23312,10 @@ case "$srcdir" in
 esac
 
 BUILD_DIR=`pwd`
+case "$BUILD_DIR" in
+*\ *)  BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;;
+*)     ;;
+esac
 
 
 
@@ -24031,8 +23343,8 @@ BUILD_DIR=`pwd`
 #AC_SUBST(ALLOCA_SOURCE)
 #AC_SUBST(ALLOCA_OBJECT)
 
-                                                                                                                                                      ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile lib/intl/Makefile lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in examples/loadables/Makefile examples/loadables/perl/Makefile pathnames.h"
-          ac_config_commands="$ac_config_commands default"
+ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile lib/intl/Makefile lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in examples/loadables/Makefile examples/loadables/perl/Makefile pathnames.h"
+ac_config_commands="$ac_config_commands default"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -24043,7 +23355,7 @@ cat >confcache <<\_ACEOF
 # config.status only pays attention to the cache file if you give it
 # the --recheck option to rerun configure.
 #
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
 # loading this file, other *unset* `ac_cv_foo' will be assigned the
 # following values.
 
@@ -24078,7 +23390,7 @@ _ACEOF
      t end
      /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
      : end' >>confcache
-if diff $cache_file confcache >/dev/null 2>&1; then :; else
+if cmp -s $cache_file confcache; then :; else
   if test -w $cache_file; then
     test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
     cat confcache >$cache_file
 
 DEFS=-DHAVE_CONFIG_H
 
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_i=`echo "$ac_i" |
-         sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-  # 2. Add them.
-  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -24138,12 +23435,11 @@ cat >$CONFIG_STATUS <<_ACEOF
 # configure, is in config.log if it exists.
 
 debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
 SHELL=\${CONFIG_SHELL-$SHELL}
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF
+
 ## --------------------- ##
 ## M4sh Initialization.  ##
 ## --------------------- ##
@@ -24152,13 +23448,11 @@ cat >>$CONFIG_STATUS <<\_ACEOF
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
 elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
   set -o posix
 fi
 
+# NLS nuisances.
 # Support unset when possible.
 if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
   as_unset=unset
@@ -24166,42 +23460,34 @@ else
   as_unset=false
 fi
 
-
-# Work around bugs in pre-3.0 UWIN ksh.
-$as_unset ENV MAIL MAILPATH
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+    { $as_unset LANG || test "${LANG+set}" != set; } ||
+      { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+    { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+      { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+    { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+      { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+    { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+      { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+    { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+      { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+    { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+      { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+    { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+      { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+    { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
+      { LC_MESSAGES=C; export LC_MESSAGES; }
 
 
 # Name of the executable.
-as_me=`$as_basename "$0" ||
+as_me=`(basename "$0") 2>/dev/null ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)$' \| \
@@ -24212,7 +23498,6 @@ echo X/"$0" |
          /^X\/\(\/\).*/{ s//\1/; q; }
          s/.*/./; q'`
 
-
 # PATH needs CR, and LINENO needs CR and PATH.
 # Avoid depending upon Character Ranges.
 as_cr_letters='abcdefghijklmnopqrstuvwxyz'
@@ -24223,15 +23508,15 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+  echo "#! /bin/sh" >conftest.sh
+  echo  "exit 0"   >>conftest.sh
+  chmod +x conftest.sh
+  if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then
     PATH_SEPARATOR=';'
   else
     PATH_SEPARATOR=:
   fi
-  rm -f conf$$.sh
+  rm -f conftest.sh
 fi
 
 
@@ -24280,8 +23565,6 @@ do
   as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
   test "x$as_lineno_1" != "x$as_lineno_2" &&
   test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
-            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
             CONFIG_SHELL=$as_dir/$as_base
             export CONFIG_SHELL
             exec "$CONFIG_SHELL" "$0" ${1+"$@"}
@@ -24355,12 +23638,6 @@ else
 fi
 rm -f conf$$ conf$$.exe conf$$.file
 
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
-else
-  as_mkdir_p=false
-fi
-
 as_executable_p="test -f"
 
 # Sed expression to map a string onto a valid CPP name.
@@ -24377,7 +23654,7 @@ as_nl='
 IFS="  $as_nl"
 
 # CDPATH.
-$as_unset CDPATH
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
 
 exec 6>&1
 
@@ -24393,8 +23670,8 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by bash $as_me 3.0-release, which was
-generated by GNU Autoconf 2.57.  Invocation command line was
+This file was extended by bash $as_me 3.1-release, which was
+generated by GNU Autoconf 2.53.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -24434,7 +23711,6 @@ Usage: $0 [OPTIONS] [FILE]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number, then exit
-  -q, --quiet      do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
   --file=FILE[:TEMPLATE]
@@ -24456,8 +23732,8 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-bash config.status 3.0-release
-configured by $0, generated by GNU Autoconf 2.57,
+bash config.status 3.1-release
+configured by $0, generated by GNU Autoconf 2.53,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
   --*=*)
     ac_option=`expr "x$1" : 'x\([^=]*\)='`
     ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  -*)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
+    shift
+    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+    shift
     ;;
+  -*);;
   *) # This is not an option, so the user has probably given explicit
      # arguments.
-     ac_option=$1
      ac_need_defaults=false;;
   esac
 
-  case $ac_option in
+  case $1 in
   # Handling of the options.
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
+    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
   --version | --vers* | -V )
     echo "$ac_cs_version"; exit 0 ;;
   --he | --h)
@@ -24511,16 +23787,13 @@ Try \`$0 --help' for more information." >&2;}
   --debug | --d* | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    shift
+    CONFIG_FILES="$CONFIG_FILES $1"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $1"
     ac_need_defaults=false;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
 
   # This is an error.
   -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
@@ -24535,20 +23808,6 @@ Try \`$0 --help' for more information." >&2;}
   shift
 done
 
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
-  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
 _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
@@ -24607,9 +23866,6 @@ if $ac_need_defaults; then
   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
 fi
 
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason to put it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
 # Create a temporary directory, and hook for its removal unless debugging.
 $debug ||
 {
@@ -24618,17 +23874,17 @@ $debug ||
 }
 
 # Create a (secure) tmp directory for tmp files.
-
+: ${TMPDIR=/tmp}
 {
-  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
   test -n "$tmp" && test -d "$tmp"
 }  ||
 {
-  tmp=./confstat$$-$RANDOM
+  tmp=$TMPDIR/cs$$-$RANDOM
   (umask 077 && mkdir $tmp)
 } ||
 {
-   echo "$me: cannot create a temporary directory in ." >&2
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
    { (exit 1); exit 1; }
 }
 
@@ -24699,6 +23955,7 @@ s,@htmldir@,$htmldir,;t t
 s,@HELPDIR@,$HELPDIR,;t t
 s,@HELPDIRDEFINE@,$HELPDIRDEFINE,;t t
 s,@HELPINSTALL@,$HELPINSTALL,;t t
+s,@HELPSTRINGS@,$HELPSTRINGS,;t t
 s,@CC@,$CC,;t t
 s,@CFLAGS@,$CFLAGS,;t t
 s,@LDFLAGS@,$LDFLAGS,;t t
@@ -24707,7 +23964,7 @@ s,@ac_ct_CC@,$ac_ct_CC,;t t
 s,@EXEEXT@,$EXEEXT,;t t
 s,@OBJEXT@,$OBJEXT,;t t
 s,@CPP@,$CPP,;t t
-s,@EGREP@,$EGREP,;t t
+s,@CROSS_COMPILE@,$CROSS_COMPILE,;t t
 s,@SIGNAMES_H@,$SIGNAMES_H,;t t
 s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t
 s,@STATIC_LD@,$STATIC_LD,;t t
@@ -24725,6 +23982,7 @@ s,@RL_INCLUDE@,$RL_INCLUDE,;t t
 s,@HISTORY_LIB@,$HISTORY_LIB,;t t
 s,@HISTORY_DEP@,$HISTORY_DEP,;t t
 s,@HIST_LIBDIR@,$HIST_LIBDIR,;t t
+s,@TILDE_LIB@,$TILDE_LIB,;t t
 s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
 s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
 s,@INSTALL_DATA@,$INSTALL_DATA,;t t
@@ -24734,6 +23992,7 @@ s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
 s,@YACC@,$YACC,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
 s,@MAKE_SHELL@,$MAKE_SHELL,;t t
+s,@SIZE@,$SIZE,;t t
 s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
 s,@USE_NLS@,$USE_NLS,;t t
 s,@MSGFMT@,$MSGFMT,;t t
@@ -24784,7 +24043,6 @@ s,@LOCAL_LIBS@,$LOCAL_LIBS,;t t
 s,@LOCAL_CFLAGS@,$LOCAL_CFLAGS,;t t
 s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t
 s,@LOCAL_DEFS@,$LOCAL_DEFS,;t t
-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
 CEOF
 
 _ACEOF
@@ -24855,30 +24113,25 @@ echo X"$ac_file" |
          /^X\(\/\/\)$/{ s//\1/; q; }
          /^X\(\/\).*/{ s//\1/; q; }
          s/.*/./; q'`
-  { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
+  { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" ||
+        mkdir "$as_incr_dir" ||
+       { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+  esac
+done; }
 
   ac_builddir=.
 
@@ -24908,7 +24161,7 @@ esac
 # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
 # absolute.
 ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
 ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
 ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
 
@@ -25098,7 +24351,7 @@ _ACEOF
 # Break up conftest.defines because some shells have a limit on the size
 # of here documents, and old seds have small limits too (100 cmds).
 echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-echo '  if grep "^[    ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  if egrep "^[   ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
 echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
 echo '  :' >>$CONFIG_STATUS
 rm -f conftest.tail
@@ -25122,7 +24375,7 @@ do
   mv conftest.tail conftest.defines
 done
 rm -f conftest.defines
-echo '  fi # grep' >>$CONFIG_STATUS
+echo '  fi # egrep' >>$CONFIG_STATUS
 echo >>$CONFIG_STATUS
 
 # Break up conftest.undefs because some shells have a limit on the size
@@ -25162,7 +24415,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF
   cat $tmp/in >>$tmp/config.h
   rm -f $tmp/in
   if test x"$ac_file" != x-; then
-    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
       { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
 echo "$as_me: $ac_file is unchanged" >&6;}
     else
@@ -25178,30 +24431,25 @@ echo X"$ac_file" |
          /^X\(\/\/\)$/{ s//\1/; q; }
          /^X\(\/\).*/{ s//\1/; q; }
          s/.*/./; q'`
-      { if $as_mkdir_p; then
-    mkdir -p "$ac_dir"
-  else
-    as_dir="$ac_dir"
-    as_dirs=
-    while test ! -d "$as_dir"; do
-      as_dirs="$as_dir $as_dirs"
-      as_dir=`(dirname "$as_dir") 2>/dev/null ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-         X"$as_dir" : 'X\(//\)[^/]' \| \
-         X"$as_dir" : 'X\(//\)$' \| \
-         X"$as_dir" : 'X\(/\)' \| \
-         .     : '\(.\)' 2>/dev/null ||
-echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-         /^X\(\/\/\)$/{ s//\1/; q; }
-         /^X\(\/\).*/{ s//\1/; q; }
-         s/.*/./; q'`
-    done
-    test ! -n "$as_dirs" || mkdir $as_dirs
-  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-   { (exit 1); exit 1; }; }; }
+      { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" ||
+        mkdir "$as_incr_dir" ||
+       { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+  esac
+done; }
 
       rm -f $ac_file
       mv $tmp/config.h $ac_file
@@ -25260,7 +24508,7 @@ esac
 # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
 # absolute.
 ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
 ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
 ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
 
@@ -25395,11 +24643,8 @@ ac_clean_files=$ac_clean_files_save
 # need to make the FD available again.
 if test "$no_create" != yes; then
   ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
   exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  $SHELL $CONFIG_STATUS || ac_cs_success=false
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
index 791282d..182d773 100644 (file)
@@ -1,11 +1,11 @@
 dnl
-dnl Configure script for bash-3.0
+dnl Configure script for bash-3.1
 dnl
 dnl report bugs to chet@po.cwru.edu
 dnl
 dnl Process this file with autoconf to produce a configure script.
 
-# Copyright (C) 1987-2004 Free Software Foundation, Inc.
+# Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -22,9 +22,9 @@ dnl Process this file with autoconf to produce a configure script.
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-AC_REVISION([for Bash 3.0, version 3.166, from autoconf version] AC_ACVERSION)dnl
+AC_REVISION([for Bash 3.1, version 3.183])dnl
 
-define(bashvers, 3.0)
+define(bashvers, 3.1)
 define(relstatus, release)
 
 AC_INIT(bash, bashvers-relstatus, bug-bash@gnu.org)
@@ -73,7 +73,7 @@ sparc-netbsd*)        opt_bash_malloc=no ;;   # needs 8-byte alignment
 mips-irix6*)   opt_bash_malloc=no ;;   # needs 8-byte alignment
 m68k-sysv)     opt_bash_malloc=no ;;   # fixes file descriptor leak in closedir
 sparc-linux*)  opt_bash_malloc=no ;;   # sparc running linux; requires ELF
-*-freebsd*-gnu)        opt_bash_malloc=no ;;   # there's some undetermined problem here
+#*-freebsd*-gnu)       opt_bash_malloc=no ;;   # there's some undetermined problem here
 #*-freebsd*)   opt_bash_malloc=no ;;   # they claim it's better; I disagree
 *-openbsd*)    opt_bash_malloc=no ;;   # they claim it needs eight-bit alignment
 *-aix*)                opt_bash_malloc=no ;;   # AIX machines
@@ -82,7 +82,7 @@ sparc-linux*) opt_bash_malloc=no ;;   # sparc running linux; requires ELF
 *-rhapsody*)   opt_bash_malloc=no ;;   # Apple Rhapsody (MacOS X)
 *-darwin*)     opt_bash_malloc=no ;;   # Apple Darwin (MacOS X)
 *-dgux*)       opt_bash_malloc=no ;;   # DG/UX machines
-*-qnx*)                opt_bash_malloc=no ;;   # QNX 4.2
+*-qnx*)                opt_bash_malloc=no ;;   # QNX 4.2, QNX 6.x
 *-machten4)    opt_bash_malloc=no ;;   # MachTen 4.x
 *-bsdi2.1|*-bsdi3.?)   opt_bash_malloc=no ; : ${CC:=shlicc2} ;; # for loadable builtins
 *-beos*)       opt_bash_malloc=no ;;   # they say it's suitable
@@ -173,6 +173,7 @@ opt_brace_expansion=yes
 opt_disabled_builtins=no
 opt_command_timing=yes
 opt_xpg_echo=no
+opt_strict_posix=no
 opt_cond_command=yes
 opt_cond_regexp=yes
 opt_arith_for_command=yes
@@ -181,6 +182,7 @@ opt_progcomp=yes
 opt_separate_help=no
 opt_multibyte=yes
 opt_debugger=yes
+opt_single_longdoc_strings=yes
 
 dnl options that affect how bash is compiled and linked
 opt_static_link=no
@@ -227,6 +229,8 @@ AC_ARG_ENABLE(readline, AC_HELP_STRING([--enable-readline], [turn on command lin
 AC_ARG_ENABLE(restricted, AC_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval)
 AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval)
 AC_ARG_ENABLE(separate-helpfiles, AC_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval)
+AC_ARG_ENABLE(single-help-strings, AC_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval)
+AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval)
 AC_ARG_ENABLE(usg-echo-default, AC_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval)
 AC_ARG_ENABLE(xpg-echo-default, AC_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval)
 
@@ -280,6 +284,9 @@ fi
 if test $opt_xpg_echo = yes ; then
 AC_DEFINE(DEFAULT_ECHO_TO_XPG)
 fi
+if test $opt_strict_posix = yes; then
+AC_DEFINE(STRICT_POSIX)
+fi
 if test $opt_extended_glob = yes ; then
 AC_DEFINE(EXTENDED_GLOB)
 fi
@@ -325,6 +332,10 @@ if test "$opt_separate_help" != no; then
        HELPDIRDEFINE='-H ${HELPDIR}'
        HELPINSTALL='install-help'
 fi
+HELPSTRINGS=
+if test "$opt_single_longdoc_strings" != "yes"; then
+       HELPSTRINGS='-S'
+fi
 
 dnl now substitute in the values generated by arguments
 AC_SUBST(TESTSCRIPT)
@@ -342,6 +353,7 @@ AC_SUBST(htmldir)
 AC_SUBST(HELPDIR)
 AC_SUBST(HELPDIRDEFINE)
 AC_SUBST(HELPINSTALL)
+AC_SUBST(HELPSTRINGS)
 
 echo ""
 echo "Beginning configuration for bash-$BASHVERS-$RELSTATUS for ${host_cpu}-${host_vendor}-${host_os}"
@@ -356,13 +368,10 @@ dnl test for Unix variants
 AC_ISC_POSIX
 AC_MINIX
 
-dnl test for non-Unix variants
-AC_CYGWIN
-AC_MINGW32
-
 AC_SYS_LARGEFILE
 
-dnl BEGIN changes for cross-building for cygwin and BeOS
+dnl BEGIN changes for cross-building (currently cygwin, minGW, and
+dnl (obsolete) BeOS)
 
 SIGNAMES_H=lsignames.h
 
@@ -379,6 +388,9 @@ if test "x$cross_compiling" = "xyes"; then
        cross_cache=${srcdir}/cross-build/cygwin32.cache
        SIGNAMES_H='$(srcdir)/cross-build/win32sig.h'
        ;;
+    *-mingw*)
+       cross_cache=${srcdir}/cross-build/cygwin32.cache
+       ;;
     i[[3456]]86-*-beos*)
        cross_cache=${srcdir}/cross-build/x86-beos.cache
        SIGNAMES_H='${srcdir}/cross-build/beos-sig.h'
@@ -391,6 +403,8 @@ if test "x$cross_compiling" = "xyes"; then
        . ${cross_cache}
     fi
     unset cross_cache
+    CROSS_COMPILE='-DCROSS_COMPILING'
+    AC_SUBST(CROSS_COMPILE)
 fi
 AC_SUBST(SIGNAMES_H)
 
@@ -475,9 +489,9 @@ then
        esac
 fi
 
+TILDE_LIB=-ltilde
 if test $opt_readline = yes; then
        AC_DEFINE(READLINE)
-       READLINE_LIB=-lreadline
        if test "$opt_with_installed_readline" != "no" ; then
                case "$opt_with_installed_readline" in
                yes)    RL_INCLUDE= ;;
@@ -488,9 +502,23 @@ if test $opt_readline = yes; then
                        ;;
                esac
                READLINE_DEP=
+               READLINE_LIB=-lreadline
+               # section for OS versions that don't allow unresolved symbols
+               # to be compiled into dynamic libraries.
+               case "$host_os" in
+               cygwin*)        TILDE_LIB= ;;
+               esac
        else
                RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
                READLINE_DEP='$(READLINE_LIBRARY)'
+               # section for OS versions that ship an older/broken version of
+               # readline as a standard dynamic library and don't allow a
+               # static version specified as -llibname to override the
+               # dynamic version
+               case "${host_os}" in
+               darwin8*)       READLINE_LIB='${READLINE_LIBRARY}' ;;
+               *)              READLINE_LIB=-lreadline ;;
+               esac
        fi
 else
        RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
@@ -503,10 +531,10 @@ if test $opt_history = yes || test $opt_bang_history = yes; then
        if test $opt_bang_history = yes; then
                AC_DEFINE(BANG_HISTORY)
        fi
-       HISTORY_LIB=-lhistory
        if test "$opt_with_installed_readline" != "no"; then
                HIST_LIBDIR=$RL_LIBDIR
                HISTORY_DEP=
+               HISTORY_LIB=-lhistory
                case "$opt_with_installed_readline" in
                yes)    RL_INCLUDE= ;;
                *)      case "$RL_INCLUDEDIR" in
@@ -518,6 +546,14 @@ if test $opt_history = yes || test $opt_bang_history = yes; then
        else
                HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
                HISTORY_DEP='$(HISTORY_LIBRARY)'
+               # section for OS versions that ship an older version of
+               # readline as a standard dynamic library and don't allow a
+               # static version specified as -llibname to override the
+               # dynamic version
+               case "${host_os}" in
+               darwin8*)       HISTORY_LIB='${HISTORY_LIBRARY}' ;;
+               *)              HISTORY_LIB=-lhistory ;;
+               esac
        fi
 else
        HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
@@ -531,6 +567,7 @@ AC_SUBST(RL_INCLUDE)
 AC_SUBST(HISTORY_LIB)
 AC_SUBST(HISTORY_DEP)
 AC_SUBST(HIST_LIBDIR)
+AC_SUBST(TILDE_LIB)
 
 dnl END READLINE and HISTORY LIBRARY SECTION
 
@@ -550,6 +587,28 @@ opennt*|interix*)  MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 esac
 AC_SUBST(MAKE_SHELL)
 
+dnl this is similar to the expanded AC_PROG_RANLIB
+if test x$SIZE = x; then
+       if test x$ac_tool_prefix = x; then
+               SIZE=size
+       else
+               SIZE=${ac_tool_prefix}size
+               save_IFS=$IFS ; IFS=:
+               size_found=0
+               for dir in $PATH; do
+                       if test -x $dir/$SIZE ; then
+                               size_found=1
+                               break
+                       fi
+               done
+               if test $size_found -eq 0; then
+                       SIZE=:
+               fi
+               IFS=$save_IFS
+       fi
+fi
+AC_SUBST(SIZE)
+
 dnl Turn on any extensions available in the GNU C library.
 AC_DEFINE(_GNU_SOURCE, 1)
 
@@ -573,12 +632,20 @@ BASH_HEADER_INTTYPES
 
 AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
                 memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
-                stddef.h stdint.h netdb.h grp.h strings.h regex.h)
-AC_CHECK_HEADERS(sys/ptem.h sys/pte.h sys/stream.h sys/select.h sys/file.h \
+                stddef.h stdint.h netdb.h pwd.h grp.h strings.h regex.h)
+AC_CHECK_HEADERS(sys/pte.h sys/stream.h sys/select.h sys/file.h \
                 sys/resource.h sys/param.h sys/socket.h sys/stat.h \
                 sys/time.h sys/times.h sys/types.h sys/wait.h)
 AC_CHECK_HEADERS(netinet/in.h arpa/inet.h)
 
+dnl sys/ptem.h requires definitions from sys/stream.h on systems where it
+dnl exists
+AC_CHECK_HEADER(sys/ptem.h, , ,[[
+#if HAVE_SYS_STREAM_H
+#  include <sys/stream.h>
+#endif
+]])
+
 dnl special checks for libc functions
 AC_FUNC_ALLOCA
 AC_FUNC_GETPGRP
@@ -625,20 +692,23 @@ dnl checks for missing libc functions
 AC_CHECK_FUNC(mkfifo,AC_DEFINE(HAVE_MKFIFO),AC_DEFINE(MKFIFO_MISSING))
 
 dnl checks for system calls
-AC_CHECK_FUNCS(dup2 select getdtablesize getgroups gethostname \
-               setdtablesize getpagesize killpg lstat getpeername sbrk \
-               getrlimit getrusage gettimeofday waitpid tcgetpgrp \
-               readlink)
+AC_CHECK_FUNCS(dup2 fcntl getdtablesize getgroups gethostname getpagesize \
+               getpeername getrlimit getrusage gettimeofday kill killpg \
+               lstat readlink sbrk select setdtablesize tcgetpgrp uname \
+               ulimit waitpid)
 AC_REPLACE_FUNCS(rename)
 
 dnl checks for c library functions
-AC_CHECK_FUNCS(bcopy bzero confstr sysconf pathconf setenv putenv unsetenv \
-               setlinebuf setvbuf setlocale strchr tcgetattr uname \
-               ulimit tzset siginterrupt memmove ttyname times \
+AC_CHECK_FUNCS(bcopy bzero confstr fnmatch \
                getaddrinfo gethostbyname getservbyname getservent inet_aton \
-               vsnprintf snprintf vasprintf asprintf fnmatch regcomp regexec)
+               memmove pathconf putenv raise regcomp regexec \
+               setenv setlinebuf setlocale setvbuf siginterrupt strchr \
+               sysconf tcgetattr times ttyname tzset unsetenv)
+
+AC_CHECK_FUNCS(vsnprintf snprintf vasprintf asprintf)
 AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit)
-AC_REPLACE_FUNCS(getcwd strcasecmp strerror strftime strpbrk memset strstr)
+AC_CHECK_FUNCS(getpwent getpwnam getpwuid)
+AC_REPLACE_FUNCS(getcwd memset strcasecmp strerror strftime strnlen strpbrk strstr)
 AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoimax strtoumax)
 
 AC_CHECK_DECLS([confstr])
@@ -852,6 +922,8 @@ AC_HEADER_TIOCGWINSZ
 BASH_HAVE_TIOCSTAT
 BASH_HAVE_FIONREAD
 
+BASH_CHECK_WCONTINUED
+
 dnl miscellaneous
 BASH_CHECK_SPEED_T
 BASH_CHECK_GETPW_FUNCS
@@ -917,11 +989,15 @@ sco3.2*)  LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
 sunos4*)       LOCAL_CFLAGS=-DSunOS4 ;;
 solaris2.5*)   LOCAL_CFLAGS=-DSunOS5 ;;
 lynxos*)       LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
-linux*)                LOCAL_LDFLAGS=-rdynamic ;;       # allow dynamic loading
+linux*)                LOCAL_LDFLAGS=-rdynamic          # allow dynamic loading
+               case "`uname -r`" in
+               2.[[456789]]*|3*)       AC_DEFINE(PGRP_PIPE) ;;
+               esac ;;
+*qnx6*)                LOCAL_CFLAGS="-Dqnx -Dqnx6" LOCAL_LIBS="-lncurses" ;;
 *qnx*)         LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
 powerux*)      LOCAL_LIBS="-lgen" ;;
 cygwin*)       LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
-opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO" ;;
+opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE" ;;
 esac
 
 dnl Stanza for OS/compiler pair-specific flags
@@ -938,6 +1014,7 @@ freebsd[[3-9]]*)
                        LOCAL_LDFLAGS=-rdynamic # allow dynamic loading
                fi ;;
 freebsdelf*)   LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
+dragonfly*)    LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 esac
 
 case "$host_cpu" in
@@ -987,6 +1064,10 @@ case "$srcdir" in
 esac
 
 BUILD_DIR=`pwd`
+case "$BUILD_DIR" in
+*\ *)  BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;;
+*)     ;;
+esac
 
 AC_SUBST(PROFILE_FLAGS)
 
index e5e1873..280542d 100644 (file)
@@ -24,7 +24,7 @@
 /* Placeholder for future modifications if cross-compiling or building a
    `fat' binary, e.g. on Apple Rhapsody.  These values are used in multiple
    files, so they appear here. */
-#if !defined (RHAPSODY)
+#if !defined (RHAPSODY) && !defined (MACOSX)
 #  define HOSTTYPE     CONF_HOSTTYPE
 #  define OSTYPE       CONF_OSTYPE
 #  define MACHTYPE     CONF_MACHTYPE
index 1a4c0d7..ee2e68c 100644 (file)
@@ -1,6 +1,6 @@
 /* dispose_command.c -- dispose of a COMMAND structure. */
 
-/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -239,11 +239,16 @@ dispose_word (w)
      WORD_DESC *w;
 {
   FREE (w->word);
-#if 0
-  free (w);
-#else
   ocache_free (wdcache, WORD_DESC, w);
-#endif
+}
+
+/* Free a WORD_DESC, but not the word contained within. */
+void
+dispose_word_desc (w)
+     WORD_DESC *w;
+{
+  w->word = 0;
+  ocache_free (wdcache, WORD_DESC, w);
 }
 
 /* How to get rid of a linked list of words.  A WORD_LIST. */
index 2d23505..55723d4 100644 (file)
@@ -1,6 +1,6 @@
 /* dispose_cmd.h -- Functions appearing in dispose_cmd.c. */
 
-/* Copyright (C) 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -24,6 +24,7 @@
 #include "stdc.h"
 
 extern void dispose_command __P((COMMAND *));
+extern void dispose_word_desc __P((WORD_DESC *));
 extern void dispose_word __P((WORD_DESC *));
 extern void dispose_words __P((WORD_LIST *));
 extern void dispose_word_array __P((char **));
diff --git a/doc/FAQ b/doc/FAQ
index c0e902f..2d48fff 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,4 +1,4 @@
-This is the Bash FAQ, version 3.27, for Bash version 3.0.
+This is the Bash FAQ, version 3.32, for Bash version 3.1.
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -36,9 +36,9 @@ A10) What is the bash `posix mode'?
 
 Section B:  The latest version
 
-B1) What's new in version 3.0?
-B2) Are there any user-visible incompatibilities between bash-3.0 and
-    bash-1.14.7?
+B1) What's new in version 3.1?
+B2) Are there any user-visible incompatibilities between bash-3.1 and
+    bash-2.05b?
 
 Section C:  Differences from other Unix shells
 
@@ -140,22 +140,26 @@ of Case Western Reserve University.
 
 A2)  What's the latest version?
 
-The latest version is 3.0, first made available on 27 July, 2004.
+The latest version is 3.1, first made available on 09 December, 2005.
 
 A3)  Where can I get it?
 
 Bash is the GNU project's shell, and so is available from the
 master GNU archive site, ftp.gnu.org, and its mirrors.  The
 latest version is also available for FTP from ftp.cwru.edu.
-The following URLs tell how to get version 3.0:
+The following URLs tell how to get version 3.1:
 
-ftp://ftp.gnu.org/pub/gnu/bash/bash-3.0.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-3.0.tar.gz
+ftp://ftp.gnu.org/pub/gnu/bash/bash-3.1.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-3.1.tar.gz
 
 Formatted versions of the documentation are available with the URLs:
 
-ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.0.tar.gz
-ftp://ftp.cwru.edu/pub/bash/bash-doc-3.0.tar.gz
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.1.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-3.1.tar.gz
+
+Any patches for the current version are available with the URL:
+
+ftp://ftp.cwru.edu/pub/bash/bash-3.1-patches/
 
 A4)  On what machines will bash run?
 
@@ -181,16 +185,15 @@ earlier Minix versions yet.
 
 Bash has been ported to versions of Windows implementing the Win32
 programming interface.  This includes Windows 95 and Windows NT.
-The port was done by Cygnus Solutions as part of their CYGWIN
-project.  For more information about the project, look at the URLs
-
-http://www.cygwin.com/
-http://sourceware.cygnus.com/cygwin
+The port was done by Cygnus Solutions (now part of Red Hat) as part
+of their CYGWIN project.  For more information about the project, see
+http://www.cygwin.com/.
 
 Cygnus originally ported bash-1.14.7, and that port was part of their
-early GNU-Win32 (the original name) releases.  Cygnus has also done a
-port of bash-2.05 to the CYGWIN environment, and it is available as
-part of their current release.
+early GNU-Win32 (the original name) releases.  Cygnus has also done
+ports of bash-2.05b and bash-3.0 to the CYGWIN environment, and both
+are available as part of their current release.  Bash-3.1 is currently
+being tested and should be available soon.
 
 Bash-2.05b and later versions should require no local Cygnus changes to
 build and run under CYGWIN.
@@ -212,7 +215,8 @@ ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip      source
 Mark began to work with bash-2.05, but I don't know the current status.
 
 Bash-3.0 compiles and runs with no modifications under Microsoft's Services
-for Unix (SFU), once known as Interix.
+for Unix (SFU), once known as Interix.  I do not anticipate any problems
+with building bash-3.1.
 
 A6) How can I build bash with gcc? 
 
@@ -381,15 +385,25 @@ They are also listed in a section in the Bash Reference Manual
 
 Section B:  The latest version
 
-B1) What's new in version 3.0?
+B1) What's new in version 3.1?
+
+Bash-3.1 is the first maintenance release of the third major release of
+bash.  It contains the following significant new features (see the manual
+page for complete descriptions and the CHANGES and NEWS files in the
+bash-3.1 distribution).
+
+o Bash-3.1 may now be configured and built in a mode that enforces strict
+  POSIX compliance.
 
-Bash-3.0 is the third major release of bash.  The features introduced
-in the intermediate releases following bash-2.05 have been completed.
-Support for the bash debugger (a separate project) has been integrated.
+o The `+=' assignment operator, which appends to the value of a string or
+  array variable, has been implemented.
 
-Bash-3.0 contains the following new features (see the manual page for
-complete descriptions and the CHANGES and NEWS files in the bash-3.0
-distribution):
+o It is now possible to ignore case when matching in contexts other than
+  filename generation using the new `nocasematch' shell option.
+
+A short feature history dating from Bash-2.0:
+
+Bash-3.0 contained the following new features:
 
 o Features to support the bash debugger have been implemented, and there
   is a new `extdebug' option to turn the non-default options on
@@ -419,8 +433,6 @@ o The `jobs', `kill', and `wait' builtins now accept job control notation
 o The `gettext' package and libintl have been integrated, and the shell
   messages may be translated into other languages
 
-A short feature history dating from Bash-2.0:
-
 Bash-2.05b introduced the following new features:
 
 o support for multibyte characters has been added to both bash and readline
@@ -628,10 +640,10 @@ grammar tighter and smaller (66 reduce-reduce conflicts gone)
 lots of code now smaller and faster
 test suite greatly expanded
 
-B2) Are there any user-visible incompatibilities between bash-3.0 and
-    bash-1.14.7?
+B2) Are there any user-visible incompatibilities between bash-3.1 and
+    bash-2.05b?
 
-There are a few incompatibilities between version 1.14.7 and version 3.0.
+There are a few incompatibilities between version 2.05b and version 3.1.
 They are detailed in the file COMPAT in the bash distribution.  That file
 is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
 if if you find something that's not mentioned there.
@@ -714,11 +726,12 @@ Things bash has that sh does not:
        case-insensitive pattern matching and globbing
        variable assignments preceding commands affect only that command,
                even for builtins and functions
-       posix mode
+       posix mode and strict posix conformance
        redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
                /dev/tcp/host/port, /dev/udp/host/port
        debugger support, including `caller' builtin and new variables
        RETURN trap
+       the `+=' assignment operator
 
 
 Things sh has that bash does not:
@@ -796,6 +809,7 @@ Things bash has or uses that ksh88 does not:
        RETURN trap
        Timestamps in history entries
        {x..y} brace expansion
+       The `+=' assignment operator
 
 Things ksh88 has or uses that bash does not:
        tracked aliases (alias -t)
@@ -842,7 +856,6 @@ New things in ksh-93 not in bash-3.0:
        `fc' has been renamed to `hist'
        `.' can execute shell functions
        exit statuses between 0 and 255
-       `+=' variable assignment operator
        FPATH and PATH mixing
        getopts -a
        -I invocation option
@@ -876,6 +889,7 @@ New things in ksh-93 present in bash-3.0:
        command name completion
        ENV processed only for interactive shells
        set -o pipefail
+       The `+=' assignment operator
 
 Section D:  Why does bash do some things differently than other Unix shells?
 
@@ -1099,9 +1113,8 @@ will try to write on a pipe without a reader.  In that case, bash
 will print `Broken pipe' to stderr when ps is killed by a
 SIGPIPE. 
 
-You can build a version of bash that will not report SIGPIPE errors
-by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
-config-top.h.
+As of bash-3.1, bash will not report SIGPIPE errors by default.  You
+can build a version of bash that will report such errors.
 
 E3) When I have terminal escape sequences in my prompt, why does bash
     wrap lines at the wrong column?
@@ -1128,12 +1141,12 @@ simple calls to `read'.  For example, piping a command's output
 into a `while' loop that repeatedly calls `read' will result in
 the same behavior.
 
-Each element of a pipeline runs in a separate process, a child of
-the shell running the pipeline.  A subprocess cannot affect its
-parent's environment.  When the `read' command sets the variable
-to the input, that variable is set only in the subshell, not the
-parent shell.  When the subshell exits, the value of the variable
-is lost. 
+Each element of a pipeline, even a builtin or shell function,
+runs in a separate process, a child of the shell running the
+pipeline.  A subprocess cannot affect its parent's environment. 
+When the `read' command sets the variable to the input, that
+variable is set only in the subshell, not the parent shell.  When
+the subshell exits, the value of the variable is lost. 
 
 Many pipelines that end with `read variable' can be converted
 into command substitutions, which will capture the output of
@@ -1763,21 +1776,19 @@ These are features that may or may not appear in a future version of bash.
 
 breaking some of the shell functionality into embeddable libraries
 a module system like zsh's, using dynamic loading like builtins
-date-stamped command history
 a bash programmer's guide with a chapter on creating loadable builtins
 a better loadable interface to perl with access to the shell builtins and
        variables (contributions gratefully accepted)
 ksh93-like `nameref' variables
-ksh93-like `+=' variable assignment operator
 ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
        associated disipline functions
 Some of the new ksh93 pattern matching operators, like backreferencing
 
 H5) When will the next release appear?
 
-The next version will appear sometime in 2005.  Never make predictions. 
+The next version will appear sometime in 2006.  Never make predictions. 
 
-This document is Copyright 1995-2004 by Chester Ramey.
+This document is Copyright 1995-2005 by Chester Ramey.
 
 Permission is hereby granted, without written agreement and
 without license or royalty fees, to use, copy, and distribute
diff --git a/doc/article.ps b/doc/article.ps
new file mode 100644 (file)
index 0000000..3aadf2f
--- /dev/null
@@ -0,0 +1,1418 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.16.1
+%%CreationDate: Mon Nov 19 13:06:55 2001
+%%DocumentNeededResources: font Times-Bold
+%%+ font Times-Italic
+%%+ font Times-Roman
+%%+ font Courier
+%%DocumentSuppliedResources: procset grops 1.16 1
+%%Pages: 11
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.16 1
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/MANUAL{
+statusdict begin/manualfeed true store end
+}bind def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Courier
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
+def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
+/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
+/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
+/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
+/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
+/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
+/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
+/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
+/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
+/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
+/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
+/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
+/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
+/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
+/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
+/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
+/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/Courier@0 ENC0/Courier RE/Times-Roman@0 ENC0/Times-Roman RE
+/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 12/Times-Bold@0 SF(Bash \255 The GNU shell*)227.904 123 Q/F1 10
+/Times-Italic@0 SF(Chet Rame)263.85 147 Q(y)-.3 E(Case W)221.72 159 Q
+(estern Reserve Univer)-.92 E(sity)-.1 E -.15(ch)250.425 171 S
+(et@po.cwru.edu).15 E/F2 10/Times-Bold@0 SF 2.5(1. Intr)72 207 R
+(oduction)-.18 E(Bash)97 222.6 Q/F3 10/Times-Roman@0 SF .904
+(is the shell, or command language interpreter)3.404 F 3.404(,t)-.4 G
+.904(hat will appear in the GNU operating system.)-3.404 F 1.075
+(The name is an acron)72 234.6 R 1.075(ym for the \231Bourne-Ag)-.15 F
+1.075(ain SHell\232, a pun on Ste)-.05 F 1.375 -.15(ve B)-.25 H 1.075
+(ourne, the author of the direct).15 F .206(ancestor of the current)72
+246.6 R/F4 8/Times-Roman@0 SF(UNIX)2.706 E F3 2.706<ae73>C(hell)-2.706 E
+F1(/bin/sh)2.706 E F3 2.706(,w)C .205(hich appeared in the Se)-2.706 F
+-.15(ve)-.25 G .205(nth Edition Bell Labs Research v).15 F(er)-.15 E(-)
+-.2 E(sion of)72 258.6 Q/F5 9/Times-Roman@0 SF(UNIX)2.5 E F3(.)A .387
+(Bash is an)97 274.2 R F2(sh)2.887 E F3 .387
+(\255compatible shell that incorporates useful features from the K)B
+.388(orn shell \()-.35 F F2(ksh)A F3 2.888(\)a)C .388(nd the C)-2.888 F
+.023(shell \()72 286.2 R F2(csh)A F3 .023
+(\), described later in this article.)B .022
+(It is ultimately intended to be a conformant implementation of the)
+5.022 F 3.568(IEEE POSIX Shell and Utilities speci\214cation \(IEEE W)72
+298.2 R 3.568(orking Group 1003.2\).)-.8 F 3.569(It of)8.569 F 3.569
+(fers functional)-.25 F(impro)72 310.2 Q -.15(ve)-.15 G(ments o).15 E
+-.15(ve)-.15 G 2.5(rs).15 G 2.5(hf)-2.5 G(or both interacti)-2.5 E .3
+-.15(ve a)-.25 H(nd programming use.).15 E .697
+(While the GNU operating system will most lik)97 325.8 R .697
+(ely include a v)-.1 F .697(ersion of the Berk)-.15 F(ele)-.1 E 3.197
+(ys)-.15 G .696(hell csh, Bash)-3.197 F .015(will be the def)72 337.8 R
+.015(ault shell.)-.1 F(Lik)5.015 E 2.515(eo)-.1 G .015(ther GNU softw)
+-2.515 F .016(are, Bash is quite portable.)-.1 F .016
+(It currently runs on nearly e)5.016 F -.15(ve)-.25 G(ry).15 E -.15(ve)
+72 349.8 S .523(rsion of).15 F F4(UNIX)3.023 E F3 .523(and a fe)3.023 F
+3.023(wo)-.25 G .523
+(ther operating systems \255 an independently-supported port e)-3.023 F
+.523(xists for OS/2, and)-.15 F .706
+(there are rumors of ports to DOS and W)72 361.8 R(indo)-.4 E .706
+(ws NT)-.25 F 5.706(.P)-.74 G .706(orts to)-5.706 F F5(UNIX)3.206 E F3
+(-lik)A 3.206(es)-.1 G .706(ystems such as QNX and Minix)-3.206 F
+(are part of the distrib)72 373.8 Q(ution.)-.2 E .405
+(The original author of Bash w)97 389.4 R .405(as Brian F)-.1 F .405
+(ox, an emplo)-.15 F .405(yee of the Free Softw)-.1 F .405(are F)-.1 F
+2.905(oundation. The)-.15 F(cur)2.905 E(-)-.2 E(rent de)72 401.4 Q -.15
+(ve)-.25 G(loper and maintainer is Chet Rame).15 E 1.3 -.65(y, a v)-.15
+H(olunteer who w).45 E(orks at Case W)-.1 E(estern Reserv)-.8 E 2.5(eU)
+-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(.)-.65 E F2 2.5(2. What')72
+425.4 R 2.5(sP)-.37 G(OSIX, anyway?)-2.5 E F1(POSIX)97 441 Q F3 .343
+(is a name originally coined by Richard Stallman for a f)2.843 F .343
+(amily of open system standards based)-.1 F(on)72 453 Q F5(UNIX)3.24 E
+F3 5.74(.T)C .74(here are a number of aspects of)-5.74 F F5(UNIX)3.24 E
+F3 .74(under consideration for standardization, from the basic)3.24 F
+.192(system services at the system call and C library le)72 465 R -.15
+(ve)-.25 G 2.692(lt).15 G 2.692(oa)-2.692 G .192
+(pplications and tools to system administration and)-2.692 F 2.5
+(management. Each)72 477 R(area of standardization is assigned to a w)
+2.5 E(orking group in the 1003 series.)-.1 E 2.814
+(The POSIX Shell and Utilities standard has been de)97 492.6 R -.15(ve)
+-.25 G 2.814(loped by IEEE W).15 F 2.813(orking Group 1003.2)-.8 F .254
+(\(POSIX.2\).\210 It concentrates on the command interpreter interf)72
+504.6 R .253(ace and utility programs commonly e)-.1 F -.15(xe)-.15 G
+(cuted).15 E 1.112(from the command line or by other programs.)72 516.6
+R 1.112(An initial v)6.112 F 1.113
+(ersion of the standard has been appro)-.15 F -.15(ve)-.15 G 3.613(da)
+.15 G(nd)-3.613 E .365(published by the IEEE, and w)72 528.6 R .365
+(ork is currently underw)-.1 F .365(ay to update it.)-.1 F .365
+(There are four primary areas of w)5.365 F(ork)-.1 E
+(in the 1003.2 standard:)72 540.6 Q 21.5<8341>72 556.2 S .835
+(spects of the shell')-21.5 F 3.335(ss)-.55 G .835
+(yntax and command language.)-3.335 F 3.335(An)5.835 G .835
+(umber of special b)-3.335 F .835(uiltins such as)-.2 F F2(cd)3.335 E F3
+(and)3.335 E F2(exec)97 568.2 Q F3 .545(are being speci\214ed as part o\
+f the shell, since their functionality usually cannot be implemented)
+3.046 F(by a separate e)97 580.2 Q -.15(xe)-.15 G(cutable;).15 E 21.5
+<8341>72 595.8 S .926
+(set of utilities to be called by shell scripts and applications.)
+-18.074 F .927(Examples are programs lik)5.927 F(e)-.1 E F1 .927
+(sed, tr)3.427 F(,)-1.11 E F3(and)97 607.8 Q F1(awk.)2.797 E F3 .297
+(Utilities commonly implemented as shell b)5.297 F .296
+(uiltins are described in this section, such as)-.2 F F2(test)2.796 E F3
+(and)97 619.8 Q F2(kill)3.422 E F3 5.922(.A)C 3.422(ne)-5.922 G .922
+(xpansion of this section')-3.572 F 3.423(ss)-.55 G .923
+(cope, termed the User Portability Extension, or UPE, has)-3.423 F
+(standardized interacti)97 631.8 Q .3 -.15(ve p)-.25 H(rograms such as)
+.15 E F1(vi)2.5 E F3(and)2.5 E F1(mailx;)2.5 E F3 21.5<8341>72 647.4 S
+.288(group of functional interf)-18.712 F .287(aces to services pro)-.1
+F .287(vided by the shell, such as the traditional)-.15 F/F6 10
+/Courier@0 SF(system\(\))2.787 E F3 3.289(Cl)97 659.4 S .789
+(ibrary function.)-3.289 F .789(There are functions to perform shell w)
+5.789 F .789(ord e)-.1 F .79(xpansions, perform \214lename e)-.15 F
+(xpan-)-.15 E .324(sion \()97 671.4 R F1(globbing)A F3 .324
+(\), obtain v)B .323(alues of POSIX.2 system con\214guration v)-.25 F
+.323(ariables, retrie)-.25 F .623 -.15(ve v)-.25 H .323(alues of en)-.1
+F(viron-)-.4 E(ment v)97 683.4 Q(ariables \()-.25 E F6(getenv\(\))A F3
+(\), and other services;).833 E .32 LW 144 691.4 72 691.4 DL F4
+(*An earlier v)72 703.2 Q
+(ersion of this article appeared in The Linux Journal.)-.12 E(\210IEEE,)
+72 715 Q/F7 8/Times-Italic@0 SF 1.231(IEEE Standar)3.231 F 3.231(df)
+-.296 G 1.231(or Information T)-3.231 F(ec)-.736 E(hnolo)-.12 E 1.231
+(gy -- P)-.08 F 1.231(ortable Oper)-.64 F 1.232
+(ating System Interface \(POSIX\) P)-.12 F 1.232(art 2:)-.64 F
+(Shell and Utilities)72 725 Q F4 2(,1)C(992.)-2 E EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-2-)282.17 48 Q 21.5<8341>72 84 S
+(suite of \231de)-19 E -.15(ve)-.25 G(lopment\232 utilities such as).15
+E/F1 10/Times-Italic@0 SF(c89)2.5 E F0(\(the POSIX.2 v)2.5 E(ersion of)
+-.15 E F1(cc)2.5 E F0(\), and)A F1(yacc.)2.5 E F0 .483
+(Bash is concerned with the aspects of the shell')97 99.6 R 2.983(sb)
+-.55 G(eha)-2.983 E .484(vior de\214ned by POSIX.2.)-.2 F .484
+(The shell command)5.484 F 1.439
+(language has of course been standardized, including the basic \215o)72
+111.6 R 3.938(wc)-.25 G 1.438(ontrol and program e)-3.938 F -.15(xe)-.15
+G 1.438(cution con-).15 F 1.284
+(structs, I/O redirection and pipelining, ar)72 123.6 R 1.284
+(gument handling, v)-.18 F 1.284(ariable e)-.25 F 1.284
+(xpansion, and quoting.)-.15 F(The)6.285 E F1(special)3.785 E F0 -.2(bu)
+72 135.6 S .676
+(iltins, which must be implemented as part of the shell to pro).2 F .676
+(vide the desired functionality)-.15 F 3.176(,a)-.65 G .676
+(re speci\214ed)-3.176 F .7(as being part of the shell; e)72 147.6 R .7
+(xamples of these are)-.15 F/F2 10/Times-Bold@0 SF -2.3 -.15(ev a)3.201
+H(l).15 E F0(and)3.201 E F2(export)3.201 E F0 5.701(.O)C .701
+(ther utilities appear in the sections of)-5.701 F .256(POSIX.2 not de)
+72 159.6 R -.2(vo)-.25 G .256(ted to the shell which are commonly \(and\
+ in some cases must be\) implemented as b).2 F(uiltin)-.2 E .213
+(commands, such as)72 171.6 R F2 -.18(re)2.713 G(ad).18 E F0(and)2.713 E
+F2(test)2.713 E F0 5.213(.P)C .213
+(OSIX.2 also speci\214es aspects of the shell')-5.213 F 2.713(si)-.55 G
+(nteracti)-2.713 E .513 -.15(ve b)-.25 H(eha).15 E .214(vior as part)-.2
+F .598(of the UPE, including job control and command line editing.)72
+183.6 R .598(Interestingly enough, only)5.598 F F1(vi)3.098 E F0 .598
+(-style line edit-)B(ing commands ha)72 195.6 Q .3 -.15(ve b)-.2 H
+(een standardized;).15 E F1(emacs)2.5 E F0
+(editing commands were left out due to objections.)2.5 E 1.128
+(While POSIX.2 includes much of what the shell has traditionally pro)97
+211.2 R 1.129(vided, some important things)-.15 F(ha)72 223.2 Q .344
+-.15(ve b)-.2 H .044(een omitted as being \231be).15 F .044
+(yond its scope.)-.15 F 5.043<9a54>-.7 G .043
+(here is, for instance, no mention of a dif)-5.043 F .043
+(ference between a)-.25 F F1(lo)72 235.2 Q(gin)-.1 E F0 1.445
+(shell and an)3.945 F 3.945(yo)-.15 G 1.445(ther interacti)-3.945 F
+1.745 -.15(ve s)-.25 H 1.446
+(hell \(since POSIX.2 does not specify a login program\).).15 F 1.446
+(No \214x)6.446 F(ed)-.15 E(startup \214les are de\214ned, either \255 \
+the standard does not mention)72 247.2 Q F1(.pr)2.5 E(o\214le)-.45 E F0
+(.)A F2 2.5(3. Basic)72 271.2 R(Bash featur)2.5 E(es)-.18 E F0 1.448
+(Since the Bourne shell pro)97 286.8 R 1.448
+(vides Bash with most of its philosophical underpinnings, Bash inherits)
+-.15 F .64(most of its features and functionality from sh.)72 298.8 R
+.641(Bash implements all of the traditional sh \215o)5.641 F 3.141(wc)
+-.25 G .641(ontrol con-)-3.141 F .8(structs \()72 310.8 R F1(for)A F0(,)
+A F1(if)3.3 E F0(,)A F1(while)3.3 E F0 3.3(,e)C 3.3(tc.\). All)-3.3 F
+.799(of the Bourne shell b)3.3 F .799
+(uiltins, including those not speci\214ed in the POSIX.2)-.2 F .536
+(standard, appear in Bash.)72 322.8 R(Shell)5.536 E F1(functions)3.036 E
+F0 3.036(,i)C .536(ntroduced in the SVR2 v)-3.036 F .537
+(ersion of the Bourne shell, are similar)-.15 F .779
+(to shell scripts, b)72 334.8 R .779
+(ut are de\214ned using a special syntax and are e)-.2 F -.15(xe)-.15 G
+.779(cuted in the same process as the calling).15 F 2.841(shell. Bash)72
+346.8 R .341(has shell functions which beha)2.841 F .641 -.15(ve i)-.2 H
+2.841(naf).15 G .341(ashion upw)-2.941 F .342
+(ard-compatible with sh functions.)-.1 F .342(There are)5.342 F 1.447
+(certain shell v)72 358.8 R 1.446
+(ariables that Bash interprets in the same w)-.25 F 1.446
+(ay as sh, such as)-.1 F F2(PS1)3.946 E F0(,)A F2(IFS)3.946 E F0 3.946
+(,a)C(nd)-3.946 E F2 -.74(PA)3.946 G(TH)-.21 E F0 6.446(.B)C(ash)-6.446
+E 1.423(implements essentially the same grammar)72 370.8 R 3.924(,p)-.4
+G 1.424(arameter and v)-3.924 F 1.424(ariable e)-.25 F 1.424
+(xpansion semantics, redirection, and)-.15 F 1.06
+(quoting as the Bourne shell.)72 382.8 R 1.06(Where dif)6.06 F 1.06
+(ferences appear between the POSIX.2 standard and traditional sh)-.25 F
+(beha)72 394.8 Q(vior)-.2 E 2.5(,B)-.4 G(ash follo)-2.5 E(ws POSIX.)-.25
+E 1.608(The K)97 410.4 R 1.608(orn Shell \()-.35 F F2(ksh)A F0 4.108
+(\)i)C 4.108(sad)-4.108 G 1.608
+(escendent of the Bourne shell written at A)-4.108 F 1.609
+(T&T Bell Laboratories by)-1.11 F(Da)72 422.4 Q 1.059(vid K)-.2 F 3.559
+(orn\207. It)-.35 F(pro)3.559 E 1.059
+(vides a number of useful features that POSIX and Bash ha)-.15 F 1.359
+-.15(ve a)-.2 H 3.558(dopted. Man).15 F 3.558(yo)-.15 G 3.558(ft)-3.558
+G(he)-3.558 E(interacti)72 434.4 Q 1.312 -.15(ve f)-.25 H 1.012
+(acilities in POSIX.2 ha).05 F 1.312 -.15(ve t)-.2 H 1.012
+(heir roots in the ksh: for e).15 F 1.013
+(xample, the POSIX and ksh job control)-.15 F -.1(fa)72 446.4 S .513
+(cilities are nearly identical. Bash includes features from the K).1 F
+.513(orn Shell for both interacti)-.35 F .813 -.15(ve u)-.25 H .513
+(se and shell).15 F 3.905(programming. F)72 458.4 R 1.405
+(or programming, Bash pro)-.15 F 1.405(vides v)-.15 F 1.405
+(ariables such as)-.25 F F2(RANDOM)3.905 E F0(and)3.905 E F2(REPL)3.905
+E(Y)-.92 E F0 3.905(,t)C(he)-3.905 E F2(typeset)3.905 E F0 -.2(bu)72
+470.4 S .398(iltin, the ability to remo).2 F .698 -.15(ve s)-.15 H .398
+(ubstrings from v).15 F .398
+(ariables based on patterns, and shell arithmetic.)-.25 F F2(RANDOM)
+5.397 E F0 -.15(ex)72 482.4 S .489
+(pands to a random number each time it is referenced; assigning a v).15
+F .49(alue to)-.25 F F2(RANDOM)2.99 E F0 .49(seeds the random)2.99 F
+.055(number generator)72 494.4 R(.)-.55 E F2(REPL)5.055 E(Y)-.92 E F0
+.054(is the def)2.554 F .054(ault v)-.1 F .054(ariable used by the)-.25
+F F2 -.18(re)2.554 G(ad).18 E F0 -.2(bu)2.554 G .054(iltin when no v).2
+F .054(ariable names are sup-)-.25 F .742(plied as ar)72 506.4 R 3.243
+(guments. The)-.18 F F2(typeset)3.243 E F0 -.2(bu)3.243 G .743
+(iltin is used to de\214ne v).2 F .743(ariables and gi)-.25 F 1.043 -.15
+(ve t)-.25 H .743(hem attrib).15 F .743(utes such as)-.2 F F2 -.18(re)
+3.243 G(ad-).18 E(only)72 518.4 Q F0 5.512(.B)C .512
+(ash arithmetic allo)-5.512 F .512(ws the e)-.25 F -.25(va)-.25 G .511
+(luation of an e).25 F .511
+(xpression and the substitution of the result.)-.15 F .511(Shell v)5.511
+F(ari-)-.25 E .222
+(ables may be used as operands, and the result of an e)72 530.4 R .222
+(xpression may be assigned to a v)-.15 F 2.722(ariable. Nearly)-.25 F
+.222(all of)2.722 F(the operators from the C language are a)72 542.4 Q
+-.25(va)-.2 G(ilable, with the same precedence rules:).25 E/F3 10
+/Courier@0 SF 6($e)97 560.4 S(cho $\(\(3 + 5 * 32\)\))-6 E(163)97 572.4
+Q F0 -.15(Fo)72 594 S 3.24(ri).15 G(nteracti)-3.24 E 1.04 -.15(ve u)-.25
+H .74(se, Bash implements ksh-style aliases and b).15 F .74
+(uiltins such as)-.2 F F2(fc)3.24 E F0 .74(\(discussed belo)3.24 F .74
+(w\) and)-.25 F F2(jobs)3.24 E F0(.)A .291(Bash aliases allo)72 606 R
+2.791(was)-.25 G .291(tring to be substituted for a command name.)-2.791
+F(The)5.291 E 2.791(yc)-.15 G .291(an be used to create a mnemonic)
+-2.791 F .568(for a)72 618 R/F4 9/Times-Roman@0 SF(UNIX)3.068 E F0 .568
+(command name \()3.068 F F3 .568(alias del=rm)B F0 .568(\), to e)B .567
+(xpand a single w)-.15 F .567(ord to a comple)-.1 F 3.067(xc)-.15 G .567
+(ommand \()-3.067 F F3(alias)A .255
+(news='xterm -g 80x45 -title trn -e trn -e -S1 -N &')72 630 R F0 .255
+(\), or to ensure that a command)B(is in)72 642 Q -.2(vo)-.4 G -.1(ke).2
+G 2.5(dw).1 G(ith a basic set of options \()-2.5 E F3
+(alias ls="/bin/ls -F")A F0(\).)A .293(The C shell \()97 657.6 R F2(csh)
+A F0 .293(\)\207, originally written by Bill Jo)B 2.792(yw)-.1 G .292
+(hile at Berk)-2.792 F(ele)-.1 E 1.592 -.65(y, i)-.15 H 2.792(sw).65 G
+.292(idely used and quite popular)-2.792 F 1.499(for its interacti)72
+669.6 R 1.799 -.15(ve f)-.25 H 3.999(acilities. Bash).05 F 1.499
+(includes a csh-compatible history e)3.999 F 1.5
+(xpansion mechanism \(\231! history\232\),)-.15 F .019(brace e)72 681.6
+R .018(xpansion, access to a stack of directories via the)-.15 F F2
+(pushd)2.518 E F0(,)A F2(popd)2.518 E F0 2.518(,a)C(nd)-2.518 E F2(dirs)
+2.518 E F0 -.2(bu)2.518 G .018(iltins, and tilde e).2 F(xpansion,)-.15 E
+1.293(to generate users' home directories.)72 693.6 R -.35(Ti)6.294 G
+1.294(lde e).35 F 1.294(xpansion has also been adopted by both the K)
+-.15 F 1.294(orn Shell and)-.35 F .32 LW 144 708.2 72 708.2 DL/F5 8
+/Times-Roman@0 SF(\207Morris Bolsk)72 720 Q 2(ya)-.12 G(nd Da)-2 E
+(vid K)-.16 E(orn,)-.28 E/F6 8/Times-Italic@0 SF(The K)2 E
+(ornShell Command and Pr)-.32 E -.08(og)-.36 G -.12(ra).08 G
+(mming Langua).12 E -.08(ge)-.08 G F5 2(,P).08 G(rentice Hall, 1989.)-2
+E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-3-)282.17 48 Q(POSIX.2.)72 84 Q .148
+(There were certain areas in which POSIX.2 felt standardization w)97
+99.6 R .149(as necessary)-.1 F 2.649(,b)-.65 G .149(ut no e)-2.849 F
+.149(xisting imple-)-.15 F 1.598(mentation pro)72 111.6 R 1.598
+(vided the proper beha)-.15 F(vior)-.2 E 6.598(.T)-.55 G 1.598(he w)
+-6.598 F 1.597(orking group in)-.1 F -.15(ve)-.4 G 1.597
+(nted and standardized functionality in).15 F .674
+(these areas, which Bash implements.)72 123.6 R(The)5.674 E/F1 10
+/Times-Bold@0 SF(command)3.174 E F0 -.2(bu)3.174 G .674(iltin w).2 F
+.674(as in)-.1 F -.15(ve)-.4 G .674
+(nted so that shell functions could be).15 F .996(written to replace b)
+72 135.6 R .996(uiltins; it mak)-.2 F .996(es the capabilities of the b)
+-.1 F .995(uiltin a)-.2 F -.25(va)-.2 G .995(ilable to the function.).25
+F .995(The reserv)5.995 F(ed)-.15 E -.1(wo)72 147.6 S 1.731
+(rd \231!\232 w).1 F 1.731(as added to ne)-.1 F -.05(ga)-.15 G 1.731
+(te the return v).05 F 1.731(alue of a command or pipeline; it w)-.25 F
+1.732(as nearly impossible to)-.1 F -.15(ex)72 159.6 S .286
+(press \231if not x\232 cleanly using the sh language.).15 F .286
+(There e)5.286 F .286(xist multiple incompatible implementations of the)
+-.15 F F1(test)72 171.6 Q F0 -.2(bu)3.163 G .663
+(iltin, which tests \214les for type and other attrib).2 F .664
+(utes and performs arithmetic and string comparisons.)-.2 F .5
+(POSIX considered none of these correct, so the standard beha)72 183.6 R
+.5(vior w)-.2 F .5(as speci\214ed in terms of the number of)-.1 F(ar)72
+195.6 Q .412(guments to the command.)-.18 F .412(POSIX.2 dictates e)
+5.412 F .412(xactly what will happen when four or fe)-.15 F .412(wer ar)
+-.25 F .412(guments are)-.18 F(gi)72 207.6 Q -.15(ve)-.25 G 5.01(nt).15
+G(o)-5.01 E F1(test)5.01 E F0 5.01(,a)C 2.51(nd lea)-5.01 F -.15(ve)-.2
+G 5.01(st).15 G 2.51(he beha)-5.01 F 2.51(vior unde\214ned when more ar)
+-.2 F 2.51(guments are supplied.)-.18 F 2.51(Bash uses the)7.51 F
+(POSIX.2 algorithm, which w)72 219.6 Q(as concei)-.1 E -.15(ve)-.25 G
+2.5(db).15 G 2.5(yD)-2.5 G -.2(av)-2.5 G(id K).2 E(orn.)-.35 E F1 2.5
+(3.1. F)72 243.6 R(eatur)-.25 E(es not in the Bour)-.18 E(ne Shell)-.15
+E F0 .718(There are a number of minor dif)97 259.2 R .719
+(ferences between Bash and the v)-.25 F .719
+(ersion of sh present on most other)-.15 F -.15(ve)72 271.2 S .874
+(rsions of).15 F/F2 9/Times-Roman@0 SF(UNIX)3.374 E F0 5.873(.T)C .873
+(he majority of these are due to the POSIX standard, b)-5.873 F .873
+(ut some are the result of Bash)-.2 F .386
+(adopting features from other shells.)72 283.2 R -.15(Fo)5.386 G 2.886
+(ri).15 G .386(nstance, Bash includes the ne)-2.886 F 2.886<7799>-.25 G
+.386(!\232 reserv)-2.886 F .386(ed w)-.15 F .386(ord, the)-.1 F F1
+(command)2.886 E F0 -.2(bu)72 295.2 S .116(iltin, the ability of the).2
+F F1 -.18(re)2.616 G(ad).18 E F0 -.2(bu)2.615 G .115
+(iltin to correctly return a line ending with a backslash, symbolic ar)
+.2 F(guments)-.18 E .798(to the)72 307.2 R F1(umask)3.298 E F0 -.2(bu)
+3.298 G .798(iltin, v).2 F .798(ariable substring remo)-.25 F -.25(va)
+-.15 G .798(l, a w).25 F .799(ay to get the length of a v)-.1 F .799
+(ariable, and the ne)-.25 F 3.299(wa)-.25 G(lgo-)-3.299 E(rithm for the)
+72 319.2 Q F1(test)2.5 E F0 -.2(bu)2.5 G
+(iltin from the POSIX.2 standard, none of which appear in sh.).2 E 1.225
+(Bash also implements the \231$\(...\)\232 command substitution syntax,\
+ which supersedes the sh `...` con-)97 334.8 R 2.851(struct. The)72
+346.8 R .351(\231$\(...\)\232 construct e)2.851 F .351(xpands to the ou\
+tput of the command contained within the parentheses, with)-.15 F .664
+(trailing ne)72 358.8 R .664(wlines remo)-.25 F -.15(ve)-.15 G 3.164
+(d. The).15 F .664(sh syntax is accepted for backw)3.164 F .664
+(ards compatibility)-.1 F 3.164(,b)-.65 G .664
+(ut the \231$\(...\)\232 form is)-3.364 F(preferred because its quoting\
+ rules are much simpler and it is easier to nest.)72 370.8 Q .772
+(The Bourne shell does not pro)97 386.4 R .772
+(vide such features as brace e)-.15 F .772
+(xpansion, the ability to de\214ne a v)-.15 F(ariable)-.25 E .283
+(and a function with the same name, local v)72 398.4 R .282
+(ariables in shell functions, the ability to enable and disable indi-)
+-.25 F .547(vidual b)72 410.4 R .547
+(uiltins or write a function to replace a b)-.2 F .547
+(uiltin, or a means to e)-.2 F .547
+(xport a shell function to a child pro-)-.15 F(cess.)72 422.4 Q .32
+(Bash has closed a long-standing shell security hole by not using the)97
+438 R F1($IFS)2.82 E F0 -.25(va)2.82 G .32(riable to split each w).25 F
+(ord)-.1 E 1.254(read by the shell, b)72 450 R 1.254
+(ut splitting only the results of e)-.2 F 1.255
+(xpansion \(ksh and the 4.4 BSD sh ha)-.15 F 1.555 -.15(ve \214)-.2 H
+-.15(xe).15 G 3.755(dt).15 G 1.255(his as)-3.755 F 2.907(well\). Useful)
+72 462 R(beha)2.907 E .407(vior such as a means to abort e)-.2 F -.15
+(xe)-.15 G .407(cution of a script read with the \231.).15 F 2.906<9a63>
+-.7 G .406(ommand using the)-2.906 F F1 -.18(re)72 474 S(tur).18 E(n)
+-.15 E F0 -.2(bu)2.742 G .242(iltin or automatically e).2 F .242
+(xporting v)-.15 F .243(ariables in the shell')-.25 F 2.743(se)-.55 G
+-.4(nv)-2.743 G .243(ironment to children is also not present).4 F .969
+(in the Bourne shell.)72 486 R .968(Bash pro)5.968 F .968
+(vides a much more po)-.15 F .968(werful en)-.25 F .968
+(vironment for both interacti)-.4 F 1.268 -.15(ve u)-.25 H .968
+(se and pro-).15 F(gramming.)72 498 Q F1 2.5(4. Bash-speci\214c)72 522 R
+-.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 .491(This section details a fe)97
+537.6 R 2.991(wo)-.25 G 2.991(ft)-2.991 G .491(he features which mak)
+-2.991 F 2.991(eB)-.1 G .491(ash unique.)-2.991 F .492(Most of them pro)
+5.491 F .492(vide impro)-.15 F -.15(ve)-.15 G(d).15 E(interacti)72 549.6
+Q 1.182 -.15(ve u)-.25 H .882(se, b).15 F .882(ut a fe)-.2 F 3.382(wp)
+-.25 G .882(rogramming impro)-3.382 F -.15(ve)-.15 G .882
+(ments are present as well.).15 F .882(Full descriptions of these fea-)
+5.882 F(tures can be found in the Bash documentation.)72 561.6 Q F1 2.5
+(4.1. Startup)72 585.6 R(Files)2.5 E F0 .161(Bash e)97 601.2 R -.15(xe)
+-.15 G .161(cutes startup \214les dif).15 F .161
+(ferently than other shells.)-.25 F .162(The Bash beha)5.161 F .162
+(vior is a compromise between)-.2 F .29
+(the csh principle of startup \214les with \214x)72 613.2 R .29
+(ed names e)-.15 F -.15(xe)-.15 G .29
+(cuted for each shell and the sh \231minimalist\232 beha).15 F(vior)-.2
+E(.)-.55 E 2.955(An interacti)72 625.2 R 3.255 -.15(ve i)-.25 H 2.955
+(nstance of Bash started as a login shell reads and e).15 F -.15(xe)-.15
+G(cutes).15 E/F3 10/Times-Italic@0 SF(~/.bash_pr)5.456 E(o\214le)-.45 E
+F0 2.956(\(the \214le)5.456 F .954(.bash_pro\214le in the user')72 637.2
+R 3.454(sh)-.55 G .953(ome directory\), if it e)-3.454 F 3.453
+(xists. An)-.15 F(interacti)3.453 E 1.253 -.15(ve n)-.25 H .953
+(on-login shell reads and e).15 F -.15(xe)-.15 G(cutes).15 E F3
+(~/.bashr)72 649.2 Q(c)-.37 E F0 5.641(.A)C(non-interacti)-2.5 E .942
+-.15(ve s)-.25 H .642(hell \(one be).15 F .642(gun to e)-.15 F -.15(xe)
+-.15 G .642(cute a shell script, for e).15 F .642
+(xample\) reads no \214x)-.15 F .642(ed startup)-.15 F .342(\214le, b)72
+661.2 R .342(ut uses the v)-.2 F .342(alue of the v)-.25 F(ariable)-.25
+E F1($ENV)2.842 E F0 2.841(,i)C 2.841(fs)-2.841 G .341
+(et, as the name of a startup \214le.)-2.841 F .341
+(The ksh practice of read-)5.341 F(ing)72 673.2 Q F1($ENV)3.114 E F0
+.614(for e)3.114 F -.15(ve)-.25 G .614(ry shell, with the accompan).15 F
+.615(ying dif)-.15 F .615(\214culty of de\214ning the proper v)-.25 F
+.615(ariables and functions)-.25 F .721(for interacti)72 685.2 R 1.021
+-.15(ve a)-.25 H .721(nd non-interacti).15 F 1.021 -.15(ve s)-.25 H .721
+(hells or ha).15 F .721(ving the \214le read only for interacti)-.2 F
+1.02 -.15(ve s)-.25 H .72(hells, w).15 F .72(as considered)-.1 F .158
+(too comple)72 697.2 R 2.658(x. Ease)-.15 F .158(of use w)2.658 F .158
+(on out here.)-.1 F(Interestingly)5.158 E 2.658(,t)-.65 G .158(he ne)
+-2.658 F .159(xt release of ksh will change to reading)-.15 F F1($ENV)
+2.659 E .32 LW 144 705.2 72 705.2 DL/F4 8/Times-Roman@0 SF .559
+(\207Bill Jo)72 717 R 1.599 -.52(y, A)-.08 H 2.559(nI).52 G .559
+(ntroduction to the C Shell,)-2.559 F/F5 8/Times-Italic@0 SF .558
+(UNIX User')2.558 F 2.558(sS)-.32 G .558(upplementary Documents)-2.558 F
+F4 2.558(,U)C(ni)-2.558 E -.12(ve)-.2 G .558(rsity of California at).12
+F(Berk)72 727 Q(ele)-.08 E 1.04 -.52(y, 1)-.12 H(986.).52 E EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-4-)282.17 48 Q(only for interacti)72 84 Q .3
+-.15(ve s)-.25 H(hells.).15 E/F1 10/Times-Bold@0 SF 2.5(4.2. New)72 108
+R(Builtin Commands)2.5 E F0 1.02(There are a fe)97 123.6 R 3.52(wb)-.25
+G 1.02(uiltins which are ne)-3.72 F 3.52(wo)-.25 G 3.52(rh)-3.52 G -2.25
+-.2(av e)-3.52 H 1.02(been e)3.72 F 1.02(xtended in Bash.)-.15 F(The)
+6.02 E F1(enable)3.52 E F0 -.2(bu)3.52 G 1.02(iltin allo).2 F(ws)-.25 E
+-.2(bu)72 135.6 S .824(iltin commands to be turned on and of).2 F 3.324
+(fa)-.25 G(rbitrarily)-3.324 E 5.824(.T)-.65 G 3.324(ou)-6.624 G .824
+(se the v)-3.324 F .824(ersion of)-.15 F/F2 10/Times-Italic@0 SF(ec)
+3.324 E(ho)-.15 E F0 .825(found in a user')3.324 F 3.325(ss)-.55 G
+(earch)-3.325 E .625(path rather than the Bash b)72 147.6 R(uiltin,)-.2
+E/F3 10/Courier@0 SF .625(enable -n echo)3.125 F F0(suf)3.125 E 3.125
+(\214ces. The)-.25 F F1(help)3.124 E F0 -.2(bu)3.124 G .624(iltin pro).2
+F .624(vides quick synopses)-.15 F .703(of the shell f)72 159.6 R .704
+(acilities without requiring access to a manual page.)-.1 F F1(Builtin)
+5.704 E F0 .704(is similar to)3.204 F F1(command)3.204 E F0 .704
+(in that it)3.204 F .342(bypasses shell functions and directly e)72
+171.6 R -.15(xe)-.15 G .342(cutes b).15 F .342(uiltin commands.)-.2 F
+.342(Access to a csh-style stack of directories)5.342 F .072(is pro)72
+183.6 R .073(vided via the)-.15 F F1(pushd)2.573 E F0(,)A F1(popd)2.573
+E F0 2.573(,a)C(nd)-2.573 E F1(dirs)2.573 E F0 -.2(bu)2.573 G(iltins.).2
+E F1(Pushd)5.073 E F0(and)2.573 E F1(popd)2.573 E F0 .073
+(insert and remo)2.573 F .373 -.15(ve d)-.15 H .073(irectories from the)
+.15 F 2.858(stack, respecti)72 195.6 R -.15(ve)-.25 G(ly).15 E 5.358(,a)
+-.65 G(nd)-5.358 E F1(dirs)5.358 E F0 2.858(lists the stack contents.)
+5.358 F 2.858(On systems that allo)7.858 F 5.358<778c>-.25 G 2.857
+(ne-grained control of)-5.358 F 1.339(resources, the)72 207.6 R F1
+(ulimit)3.839 E F0 -.2(bu)3.839 G 1.339
+(iltin can be used to tune these settings.).2 F F1(Ulimit)6.34 E F0
+(allo)3.84 E 1.34(ws a user to control, among)-.25 F 1.086
+(other things, whether core dumps are to be generated, ho)72 219.6 R
+3.586(wm)-.25 G 1.086(uch memory the shell or a child process is)-3.586
+F(allo)72 231.6 Q .496(wed to allocate, and ho)-.25 F 2.996(wl)-.25 G
+(ar)-2.996 E .496(ge a \214le created by a child process can gro)-.18 F
+4.296 -.65(w. T)-.25 H(he).65 E F1(suspend)2.996 E F0 .497(command will)
+2.997 F .744(stop the shell process when job control is acti)72 243.6 R
+-.15(ve)-.25 G 3.243(;m).15 G .743(ost other shells do not allo)-3.243 F
+3.243(wt)-.25 G(hemselv)-3.243 E .743(es to be stopped)-.15 F(lik)72
+255.6 Q 2.717(et)-.1 G(hat.)-2.717 E F1 -.74(Ty)5.217 G(pe,).74 E F0
+.217(the Bash answer to)2.717 F F1(which)2.717 E F0(and)2.717 E F1
+(whence,)2.717 E F0(sho)2.717 E .218(ws what will happen when a w)-.25 F
+.218(ord is typed as a)-.1 F(command:)72 267.6 Q F3 6($t)97 285.6 S
+(ype export)-6 E(export is a shell builtin)97 297.6 Q 6($t)97 309.6 S
+(ype -t export)-6 E(builtin)97 321.6 Q 6($t)97 333.6 S(ype bash)-6 E
+(bash is /bin/bash)97 345.6 Q 6($t)97 357.6 S(ype cd)-6 E
+(cd is a function)97 369.6 Q(cd \(\))97 381.6 Q({)97 393.6 Q
+(builtin cd ${1+"$@"} && xtitle $HOST: $PWD)121 405.6 Q(})97 417.6 Q F0
+-1.11(Va)72 439.2 S .682(rious modes tell what a command w)1.11 F .681
+(ord is \(reserv)-.1 F .681(ed w)-.15 F .681(ord, alias, function, b)-.1
+F .681(uiltin, or \214le\) or which v)-.2 F(er)-.15 E(-)-.2 E 1.15
+(sion of a command will be e)72 451.2 R -.15(xe)-.15 G 1.15
+(cuted based on a user').15 F 3.65(ss)-.55 G 1.15(earch path.)-3.65 F
+1.15(Some of this functionality has been)6.15 F
+(adopted by POSIX.2 and folded into the)72 463.2 Q F1(command)2.5 E F0
+(utility)2.5 E(.)-.65 E F1 2.5(4.3. Editing)72 487.2 R(and Completion)
+2.5 E F0 .682(One area in which Bash shines is command line editing.)97
+502.8 R .682(Bash uses the)5.682 F F2 -.37(re)3.182 G(adline).37 E F0
+.681(library to read and)3.181 F .942(edit lines when interacti)72 514.8
+R -.15(ve)-.25 G 5.942(.R).15 G .942(eadline is a po)-5.942 F .942
+(werful and \215e)-.25 F .942(xible input f)-.15 F .943
+(acility that a user can con\214gure to)-.1 F(indi)72 526.8 Q .732
+(vidual tastes.)-.25 F .732(It allo)5.732 F .732(ws lines to be edited \
+using either emacs or vi commands, where those commands)-.25 F .2
+(are appropriate.)72 538.8 R .2
+(The full capability of emacs is not present \255 there is no w)5.2 F .2
+(ay to e)-.1 F -.15(xe)-.15 G .2(cute a named command).15 F 1.15
+(with M-x, for instance \255 b)72 550.8 R 1.15(ut the e)-.2 F 1.149
+(xisting commands are more than adequate.)-.15 F 1.149
+(The vi mode is compliant)6.149 F
+(with the command line editing standardized by POSIX.2.)72 562.8 Q 1.69
+(Readline is fully customizable.)97 578.4 R 1.691
+(In addition to the basic commands and k)6.69 F 1.991 -.15(ey b)-.1 H
+1.691(indings, the library).15 F(allo)72 590.4 Q .028
+(ws users to de\214ne additional k)-.25 F .327 -.15(ey b)-.1 H .027
+(indings using a startup \214le.).15 F(The)5.027 E F2(inputr)2.527 E(c)
+-.37 E F0 .027(\214le, which def)2.527 F .027(aults to the \214le)-.1 F
+F2(~/.inputr)72 602.4 Q(c)-.37 E F0 3.002(,i)C 3.002(sr)-3.002 G .503(e\
+ad each time readline initializes, permitting users to maintain a consi\
+stent interf)-3.002 F .503(ace across a)-.1 F .893(set of programs.)72
+614.4 R .893(Readline includes an e)5.893 F .893(xtensible interf)-.15 F
+.892(ace, so each program using the library can add its)-.1 F -.25(ow)72
+626.4 S 3.56(nb).25 G 1.06(indable commands and program-speci\214c k)
+-3.56 F 1.361 -.15(ey b)-.1 H 3.561(indings. Bash).15 F 1.061
+(uses this f)3.561 F 1.061(acility to add bindings that)-.1 F
+(perform history e)72 638.4 Q(xpansion or shell w)-.15 E(ord e)-.1 E
+(xpansions on the current input line.)-.15 E .707
+(Readline interprets a number of v)97 654 R .706
+(ariables which further tune its beha)-.25 F(vior)-.2 E 5.706(.V)-.55 G
+.706(ariables e)-6.816 F .706(xist to control)-.15 F .157
+(whether or not eight-bit characters are directly read as input or con)
+72 666 R -.15(ve)-.4 G .158(rted to meta-pre\214x).15 F .158(ed k)-.15 F
+.458 -.15(ey s)-.1 H .158(equences \(a).15 F(meta-pre\214x)72 678 Q .082
+(ed k)-.15 F .382 -.15(ey s)-.1 H .081(equence consists of the characte\
+r with the eighth bit zeroed, preceded by the).15 F F2(meta-pr)2.581 E
+(e\214x)-.37 E F0(character)72 690 Q 3.233(,u)-.4 G .733
+(sually escape, which selects an alternate k)-3.233 F -.15(ey)-.1 G .734
+(map\), to decide whether to output characters with).15 F .624
+(the eighth bit set directly or as a meta-pre\214x)72 702 R .624(ed k)
+-.15 F .924 -.15(ey s)-.1 H .623
+(equence, whether or not to wrap to a ne).15 F 3.123(ws)-.25 G .623
+(creen line)-3.123 F 1.196
+(when a line being edited is longer than the screen width, the k)72 714
+R -.15(ey)-.1 G 1.196(map to which subsequent k).15 F 1.496 -.15(ey b)
+-.1 H(indings).15 E .531(should apply)72 726 R 3.031(,o)-.65 G 3.031(re)
+-3.031 G -.15(ve)-3.281 G 3.031(nw).15 G .531
+(hat happens when readline w)-3.031 F .531(ants to ring the terminal')
+-.1 F 3.03(sb)-.55 G 3.03(ell. All)-3.03 F .53(of these v)3.03 F
+(ariables)-.25 E EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-5-)282.17 48 Q
+(can be set in the inputrc \214le.)72 84 Q .284
+(The startup \214le understands a set of C preprocessor)97 99.6 R(-lik)
+-.2 E 2.785(ec)-.1 G .285(onditional constructs which allo)-2.785 F
+2.785(wv)-.25 G(ariables)-3.035 E .12(or k)72 111.6 R .42 -.15(ey b)-.1
+H .119(indings to be assigned based on the application using readline, \
+the terminal currently being used, or).15 F .338(the editing mode.)72
+123.6 R .338(Users can add program-speci\214c bindings to mak)5.338 F
+2.838(et)-.1 G .338(heir li)-2.838 F -.15(ve)-.25 G 2.838(se).15 G 2.838
+(asier: I)-2.838 F(ha)2.838 E .639 -.15(ve b)-.2 H .339(indings that).15
+F(let me edit the v)72 135.6 Q(alue of)-.25 E/F1 10/Times-Bold@0 SF($P)
+2.5 E -.95(AT)-.74 G(H).95 E F0(and double-quote the current or pre)2.5
+E(vious w)-.25 E(ord:)-.1 E/F2 10/Courier@0 SF 6(#M)97 153.6 S
+(acros that are convenient for shell interaction)-6 E($if Bash)97 165.6
+Q 6(#e)97 177.6 S(dit the path)-6 E
+("\\C-xp": "PATH=${PATH}\\e\\C-e\\C-a\\ef\\C-f")97 189.6 Q 6(#p)97 201.6
+S(repare to type a quoted word -- insert open and close double)-6 E 6
+(#q)97 213.6 S(uotes and move to just after the open quote)-6 E
+("\\C-x\\"": "\\"\\"\\C-b")97 225.6 Q 6(#Q)97 237.6 S
+(uote the current or previous word)-6 E("\\C-xq": "\\eb\\"\\ef\\"")97
+249.6 Q($endif)97 261.6 Q F0 .322(There is a readline command to re-rea\
+d the \214le, so users can edit the \214le, change some bindings, and b\
+e)72 283.2 R(gin)-.15 E(to use them almost immediately)72 295.2 Q(.)-.65
+E .851(Bash implements the)97 310.8 R F1(bind)3.351 E F0 -.2(bu)3.351 G
+.851(iltin for more dyamic control of readline than the startup \214le \
+permits.).2 F F1(Bind)72 322.8 Q F0 .25(is used in se)2.75 F -.15(ve)
+-.25 G .25(ral w).15 F 2.75(ays. In)-.1 F/F3 10/Times-Italic@0 SF(list)
+2.75 E F0 .25(mode, it can display the current k)2.75 F .55 -.15(ey b)
+-.1 H .25(indings, list all the readline edit-).15 F .149(ing directi)72
+334.8 R -.15(ve)-.25 G 2.649(sa).15 G -.25(va)-2.849 G .149
+(ilable for binding, list which k).25 F -.15(ey)-.1 G 2.649(si).15 G
+-1.9 -.4(nv o)-2.649 H .349 -.1(ke a g).4 H -2.15 -.25(iv e).1 H 2.65
+(nd).25 G(irecti)-2.65 E -.15(ve)-.25 G 2.65(,o).15 G 2.65(ro)-2.65 G
+.15(utput the current set of k)-2.65 F -.15(ey)-.1 G .042(bindings in a\
+ format that can be incorporated directly into an inputrc \214le.)72
+346.8 R(In)5.041 E F3(batc)2.541 E(h)-.15 E F0 .041
+(mode, it reads a series of)2.541 F -.1(ke)72 358.8 S 2.858(yb)-.05 G
+.359(indings directly from a \214le and passes them to readline.)-2.858
+F .359(In its most common usage,)5.359 F F1(bind)2.859 E F0(tak)2.859 E
+.359(es a sin-)-.1 F 1.117(gle string and passes it directly to readlin\
+e, which interprets the line as if it had just been read from the)72
+370.8 R(inputrc \214le.)72 382.8 Q(Both k)5 E .3 -.15(ey b)-.1 H
+(indings and v).15 E(ariable assignments may appear in the string gi)
+-.25 E -.15(ve)-.25 G 2.5(nt).15 G(o)-2.5 E F1(bind)2.5 E F0(.)A .53
+(The readline library also pro)97 398.4 R .53(vides an interf)-.15 F .53
+(ace for)-.1 F F3(wor)3.03 E 3.03(dc)-.37 G(ompletion)-3.03 E F0 5.53
+(.W)C .53(hen the)-5.53 F F3(completion)3.03 E F0(character)3.03 E 1.261
+(\(usually T)72 410.4 R 1.261(AB\) is typed, readline looks at the w)
+-.93 F 1.26(ord currently being entered and computes the set of \214le-)
+-.1 F .523(names of which the current w)72 422.4 R .523(ord is a v)-.1 F
+.523(alid pre\214x.)-.25 F .524
+(If there is only one possible completion, the rest of the)5.523 F .358
+(characters are inserted directly)72 434.4 R 2.858(,o)-.65 G .358(therw\
+ise the common pre\214x of the set of \214lenames is added to the curre\
+nt)-2.858 F -.1(wo)72 446.4 S 3.199(rd. A).1 F .699(second T)3.199 F
+.699(AB character entered immediately after a non-unique completion cau\
+ses readline to list)-.93 F 1.814
+(the possible completions; there is an option to ha)72 458.4 R 2.113
+-.15(ve t)-.2 H 1.813(he list displayed immediately).15 F 6.813(.R)-.65
+G 1.813(eadline pro)-6.813 F(vides)-.15 E .482
+(hooks so that applications can pro)72 470.4 R .482
+(vide speci\214c types of completion before the def)-.15 F .483
+(ault \214lename completion)-.1 F .132(is attempted.)72 482.4 R .132
+(This is quite \215e)5.132 F .132
+(xible, though it is not completely user)-.15 F 2.632
+(-programmable. Bash,)-.2 F .132(for e)2.632 F .132(xample, can)-.15 F
+.37(complete \214lenames, command names \(including aliases, b)72 494.4
+R .37(uiltins, shell reserv)-.2 F .37(ed w)-.15 F .37
+(ords, shell functions, and)-.1 F -.15(exe)72 506.4 S .424
+(cutables found in the \214le system\), shell v).15 F .424
+(ariables, usernames, and hostnames.)-.25 F .423
+(It uses a set of heuristics)5.424 F(that, while not perfect, is genera\
+lly quite good at determining what type of completion to attempt.)72
+518.4 Q F1 2.5(4.4. History)72 542.4 R F0 .144
+(Access to the list of commands pre)97 558 R .144(viously entered \(the)
+-.25 F F3 .144(command history)2.644 F F0 2.644(\)i)C 2.644(sp)-2.644 G
+(ro)-2.644 E .144(vided jointly by Bash)-.15 F .078
+(and the readline library)72 570 R 5.077(.B)-.65 G .077(ash pro)-5.077 F
+.077(vides v)-.15 F .077(ariables \()-.25 F F1($HISTFILE)A F0(,)A F1
+($HISTSIZE)2.577 E F0 2.577(,a)C(nd)-2.577 E F1($HISTCONTR)2.577 E(OL)
+-.3 E F0 2.577(\)a)C(nd)-2.577 E(the)72 582 Q F1(history)2.89 E F0(and)
+2.89 E F1(fc)2.89 E F0 -.2(bu)2.89 G .39
+(iltins to manipulate the history list.).2 F .391(The v)5.391 F .391
+(alue of)-.25 F F1($HISTFILE)2.891 E F0 .391(specifes the \214le where)
+2.891 F .49(Bash writes the command history on e)72 594 R .489
+(xit and reads it on startup.)-.15 F F1($HISTSIZE)5.489 E F0 .489
+(is used to limit the number)2.989 F .642(of commands sa)72 606 R -.15
+(ve)-.2 G 3.142(di).15 G 3.142(nt)-3.142 G .642(he history)-3.142 F(.)
+-.65 E F1($HISTCONTR)5.642 E(OL)-.3 E F0(pro)3.142 E .642
+(vides a crude form of control o)-.15 F -.15(ve)-.15 G 3.142(rw).15 G
+.642(hich com-)-3.142 F .025(mands are sa)72 618 R -.15(ve)-.2 G 2.525
+(do).15 G 2.525(nt)-2.525 G .025(he history list: a v)-2.525 F .025
+(alue of)-.25 F F3(ignor)2.525 E(espace)-.37 E F0 .025(means to not sa)
+2.525 F .324 -.15(ve c)-.2 H .024(ommands which be).15 F .024
+(gin with a)-.15 F .927(space; a v)72 630 R .927(alue of)-.25 F F3
+(ignor)3.427 E(edups)-.37 E F0 .927(means to not sa)3.427 F 1.228 -.15
+(ve c)-.2 H .928(ommands identical to the last command sa).15 F -.15(ve)
+-.2 G(d.).15 E F1($HIST)5.928 E(-)-.92 E(CONTR)72 642 Q(OL)-.3 E F0 -.1
+(wa)3.778 G 3.778(sn).1 G(amed)-3.778 E F1($history_contr)3.778 E(ol)
+-.18 E F0 1.278(in earlier v)3.778 F 1.278
+(ersions of Bash; the old name is still accepted for)-.15 F(backw)72 654
+Q .575(ards compatibility)-.1 F 5.575(.T)-.65 G(he)-5.575 E F1(history)
+3.075 E F0 .575
+(command can read or write \214les containing the history list and dis-)
+3.075 F .167(play the current list contents.)72 666 R(The)5.167 E F1(fc)
+2.667 E F0 -.2(bu)2.667 G .167(iltin, adopted from POSIX.2 and the K).2
+F .167(orn Shell, allo)-.35 F .167(ws display and)-.25 F(re-e)72 678 Q
+-.15(xe)-.15 G .58
+(cution, with optional editing, of commands from the history list.).15 F
+.58(The readline library of)5.58 F .58(fers a set of)-.25 F 1.255(comma\
+nds to search the history list for a portion of the current input line \
+or a string typed by the user)72 690 R(.)-.55 E(Finally)72 702 Q 2.535
+(,t)-.65 G(he)-2.535 E F3(history)2.535 E F0(library)2.535 E 2.535(,g)
+-.65 G .036(enerally incorporated directly into the readline library)
+-2.535 F 2.536(,i)-.65 G .036(mplements a f)-2.536 F .036(acility for)
+-.1 F 1.023(history recall, e)72 714 R 1.022(xpansion, and re-e)-.15 F
+-.15(xe)-.15 G 1.022(cution of pre).15 F 1.022(vious commands v)-.25 F
+1.022(ery similar to csh \(\231bang history\232, so)-.15 F
+(called because the e)72 726 Q
+(xclamation point introduces a history substitution\):)-.15 E EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-6-)282.17 48 Q/F1 10/Courier@0 SF 6($e)97 84 S
+(cho a b c d e)-6 E 6(abcde)97 96 S 6($!)97 108 S 6(!fghi)-6 G
+(echo a b c d e f g h i)97 120 Q 6(abcdefghi)97 132 S 6($!)97 144 S(-2)
+-6 E(echo a b c d e)97 156 Q 6(abcde)97 168 S 6($e)97 180 S(cho !-2:1-4)
+-6 E(echo a b c d)97 192 Q 6(abcd)97 204 S F0 1.456
+(The command history is only sa)72 225.6 R -.15(ve)-.2 G 3.957(dw).15 G
+1.457(hen the shell is interacti)-3.957 F -.15(ve)-.25 G 3.957(,s).15 G
+3.957(oi)-3.957 G 3.957(ti)-3.957 G 3.957(sn)-3.957 G 1.457(ot a)-3.957
+F -.25(va)-.2 G 1.457(ilable for use by shell).25 F(scripts.)72 237.6 Q
+/F2 10/Times-Bold@0 SF 2.5(4.5. New)72 261.6 R(Shell V)2.5 E(ariables)
+-.92 E F0 .59(There are a number of con)97 277.2 R -.15(ve)-.4 G .589
+(nience v).15 F .589(ariables that Bash interprets to mak)-.25 F 3.089
+(el)-.1 G .589(ife easier)-3.089 F 5.589(.T)-.55 G .589(hese include)
+-5.589 F F2(FIGNORE)72 289.2 Q F0 3.973(,w)C 1.473
+(hich is a set of \214lename suf)-3.973 F<8c78>-.25 E 1.474
+(es identifying \214les to e)-.15 F 1.474
+(xclude when completing \214lenames;)-.15 F F2(HOSTTYPE)72 301.2 Q F0
+2.932(,w)C .432
+(hich is automatically set to a string describing the type of hardw)
+-2.932 F .431(are on which Bash is cur)-.1 F(-)-.2 E .335(rently e)72
+313.2 R -.15(xe)-.15 G(cuting;).15 E F2(command_oriented_history)2.835 E
+F0 2.835(,w)C .335(hich directs Bash to sa)-2.835 F .635 -.15(ve a)-.2 H
+.336(ll lines of a multiple-line com-).15 F 1.071(mand such as a)72
+325.2 R/F3 10/Times-Italic@0 SF(while)3.571 E F0(or)3.571 E F3(for)3.571
+E F0 1.071(loop in a single history entry)3.571 F 3.57(,a)-.65 G(llo)
+-3.57 E 1.07(wing easy re-editing; and)-.25 F F2(IGNOREEOF)3.57 E F0(,)A
+.747(whose v)72 337.2 R .747(alue indicates the number of consecuti)-.25
+F 1.047 -.15(ve E)-.25 H .747(OF characters that an interacti).15 F
+1.048 -.15(ve s)-.25 H .748(hell will read before).15 F -.15(ex)72 349.2
+S 1.432(iting \255 an easy w).15 F 1.432(ay to k)-.1 F 1.432
+(eep yourself from being logged out accidentally)-.1 F 6.432(.T)-.65 G
+(he)-6.432 E F2(auto_r)3.932 E(esume)-.18 E F0 -.25(va)3.932 G(riable)
+.25 E .571(alters the w)72 361.2 R .571
+(ay the shell treats simple command names: if job control is acti)-.1 F
+-.15(ve)-.25 G 3.071(,a).15 G .571(nd this v)-3.071 F .571
+(ariable is set, sin-)-.25 F(gle-w)72 373.2 Q .239(ord simple commands \
+without redirections cause the shell to \214rst look for and restart a \
+suspended job)-.1 F(with that name before starting a ne)72 385.2 Q 2.5
+(wp)-.25 G(rocess.)-2.5 E F2 2.5(4.6. Brace)72 409.2 R(Expansion)2.5 E
+F0 .653(Since sh of)97 424.8 R .653(fers no con)-.25 F -.15(ve)-.4 G
+.653(nient w).15 F .653
+(ay to generate arbitrary strings that share a common pre\214x or suf)
+-.1 F<8c78>-.25 E 2.124(\(\214lename e)72 436.8 R 2.124
+(xpansion requires that the \214lenames e)-.15 F 2.123
+(xist\), Bash implements)-.15 F F3(br)4.623 E 2.123(ace e)-.15 F
+(xpansion)-.2 E F0 4.623(,ac)C(apability)-4.623 E(pick)72 448.8 Q .773
+(ed up from csh.)-.1 F .774(Brace e)5.773 F .774
+(xpansion is similar to \214lename e)-.15 F .774(xpansion, b)-.15 F .774
+(ut the strings generated need not)-.2 F 1.211(correspond to e)72 460.8
+R 1.211(xisting \214les.)-.15 F 3.711(Ab)6.211 G 1.211(race e)-3.711 F
+1.211(xpression consists of an optional)-.15 F F3(pr)3.71 E(eamble)-.37
+E F0 3.71(,f)C(ollo)-3.71 E 1.21(wed by a pair of)-.25 F 2.938
+(braces enclosing a series of comma-separated strings, and an optional)
+72 472.8 R F3(postamble)5.438 E F0 7.938(.T)C 2.938(he preamble is)
+-7.938 F(prepended to each string within the braces, and the postamble \
+is then appended to each resulting string:)72 484.8 Q F1 6($e)97 502.8 S
+(cho a{d,c,b}e)-6 E(ade ace abe)97 514.8 Q F0 .306(As this e)72 536.4 R
+.306(xample demonstrates, the results of brace e)-.15 F .305
+(xpansion are not sorted, as the)-.15 F 2.805(ya)-.15 G .305
+(re by \214lename e)-2.805 F(xpan-)-.15 E(sion.)72 548.4 Q F2 2.5
+(4.7. Pr)72 572.4 R(ocess Substitution)-.18 E F0 .457
+(On systems that can support it, Bash pro)97 588 R .457(vides a f)-.15 F
+.457(acility kno)-.1 F .458(wn as)-.25 F F3(pr)2.958 E .458
+(ocess substitution)-.45 F F0 5.458(.P)C .458(rocess sub-)-5.458 F .347
+(stitution is similar to command substitution in that its speci\214cati\
+on includes a command to e)72 600 R -.15(xe)-.15 G .346(cute, b).15 F
+.346(ut the)-.2 F .181(shell does not collect the command')72 612 R
+2.681(so)-.55 G .181(utput and insert it into the command line.)-2.681 F
+(Rather)5.181 E 2.681(,B)-.4 G .182(ash opens a pipe)-2.681 F 1.861
+(to the command, which is run in the background.)72 624 R 1.861
+(The shell uses named pipes \(FIFOs\) or the)6.861 F F3(/de)4.361 E
+(v/fd)-.15 E F0 .961(method of naming open \214les to e)72 636 R .962(x\
+pand the process substitution to a \214lename which connects to the pip\
+e)-.15 F .104(when opened.)72 648 R .103
+(This \214lename becomes the result of the e)5.104 F 2.603
+(xpansion. Process)-.15 F .103(substitution can be used to com-)2.603 F
+(pare the outputs of tw)72 660 Q 2.5(od)-.1 G(if)-2.5 E(ferent v)-.25 E
+(ersions of an application as part of a re)-.15 E(gression test:)-.15 E
+F1 6($c)97 678 S(mp <\(old_prog\) <\(new_prog\))-6 E EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-7-)282.17 48 Q/F1 10/Times-Bold@0 SF 2.5
+(4.8. Pr)72 84 R(ompt Customization)-.18 E F0 2.229
+(One of the more popular interacti)97 99.6 R 2.529 -.15(ve f)-.25 H
+2.229(eatures that Bash pro).15 F 2.23
+(vides is the ability to customize the)-.15 F 3.234(prompt. Both)72
+111.6 R F1($PS1)3.234 E F0(and)3.234 E F1($PS2,)3.234 E F0 .734
+(the primary and secondary prompts, are e)3.234 F .733
+(xpanded before being displayed.)-.15 F -.15(Pa)72 123.6 S .804
+(rameter and v).15 F .804(ariable e)-.25 F .805
+(xpansion is performed when the prompt string is e)-.15 F .805
+(xpanded, so an)-.15 F 3.305(ys)-.15 G .805(hell v)-3.305 F(ariable)-.25
+E .729(can be put into the prompt \(e.g.,)72 135.6 R F1($SHL)3.228 E(VL)
+-.92 E F0 3.228(,w)C .728(hich indicates ho)-3.228 F 3.228(wd)-.25 G
+.728(eeply the current shell is nested\).)-3.228 F(Bash)5.728 E 1.895(s\
+pecially interprets characters in the prompt string preceded by a backs\
+lash.)72 147.6 R 1.895(Some of these backslash)6.895 F .874
+(escapes are replaced with the current time, the date, the current w)72
+159.6 R .874(orking directory)-.1 F 3.373(,t)-.65 G .873
+(he username, and the)-3.373 F .78
+(command number or history number of the command being entered.)72 171.6
+R .781(There is e)5.781 F -.15(ve)-.25 G 3.281(nab).15 G .781
+(ackslash escape to)-3.281 F .007
+(cause the shell to change its prompt when running as root after an)72
+183.6 R/F2 10/Times-Italic@0 SF(su)2.507 E F0 5.007(.B)C .007
+(efore printing each primary prompt,)-5.007 F .305(Bash e)72 195.6 R
+.305(xpands the v)-.15 F(ariable)-.25 E F1($PR)2.805 E(OMPT_COMMAND)-.3
+E F0 .305(and, if it has a v)2.805 F .306(alue, e)-.25 F -.15(xe)-.15 G
+.306(cutes the e).15 F .306(xpanded v)-.15 F .306(alue as)-.25 F 3.735
+(ac)72 207.6 S 1.235(ommand, allo)-3.735 F 1.234
+(wing additional prompt customization.)-.25 F -.15(Fo)6.234 G 3.734(re)
+.15 G 1.234(xample, this assignment causes the current)-3.884 F(user)72
+219.6 Q 2.917(,t)-.4 G .417
+(he current host, the time, the last component of the current w)-2.917 F
+.417(orking directory)-.1 F 2.917(,t)-.65 G .418(he le)-2.917 F -.15(ve)
+-.25 G 2.918(lo).15 G 2.918(fs)-2.918 G .418(hell nest-)-2.918 F(ing, a\
+nd the history number of the current command to be embedded into the pr\
+imary prompt:)72 231.6 Q/F3 10/Courier@0 SF 6($P)97 249.6 S
+(S1='\\u@\\h [\\t] \\W\($SHLVL:\\!\)\\$ ')-6 E
+(chet@odin [21:03:44] documentation\(2:636\)$ cd ..)97 261.6 Q
+(chet@odin [21:03:54] src\(2:637\)$)97 273.6 Q F0 .146(The string being\
+ assigned is surrounded by single quotes so that if it is e)72 295.2 R
+.146(xported, the v)-.15 F .146(alue of)-.25 F F1($SHL)2.646 E(VL)-.92 E
+F0(will)2.646 E(be updated by a child shell:)72 307.2 Q F3
+(chet@odin [21:17:35] src\(2:638\)$ export PS1)97 325.2 Q
+(chet@odin [21:17:40] src\(2:639\)$ bash)97 337.2 Q
+(chet@odin [21:17:46] src\(3:696\)$)97 349.2 Q F0
+(The \\$ escape is displayed as \231)72 370.8 Q F1($)A F0 2.5<9a77>C
+(hen running as a normal user)-2.5 E 2.5(,b)-.4 G(ut as \231)-2.7 E F1
+(#)A F0 2.5<9a77>C(hen running as root.)-2.5 E F1 2.5(4.9. File)72 394.8
+R(System V)2.5 E(iews)-.37 E F0 .029(Since Berk)97 410.4 R(ele)-.1 E
+2.529(yi)-.15 G .029
+(ntroduced symbolic links in 4.2 BSD, one of their most anno)-2.529 F
+.03(ying properties has been)-.1 F .764(the \231w)72 422.4 R .764
+(arping\232 to a completely dif)-.1 F .764
+(ferent area of the \214le system when using)-.25 F F1(cd)3.263 E F0
+3.263(,a)C .763(nd the resultant non-intu-)-3.263 F(iti)72 434.4 Q .704
+-.15(ve b)-.25 H(eha).15 E .405(vior of \231)-.2 F F1 .405(cd ..)B F0
+2.905(\232. The)B/F4 9/Times-Roman@0 SF(UNIX)2.905 E F0 -.1(ke)2.905 G
+.405(rnel treats symbolic links).1 F F2(physically)2.905 E F0 5.405(.W)C
+.405(hen the k)-5.405 F .405(ernel is translating)-.1 F 3.223(ap)72
+446.4 S .723(athname in which one component is a symbolic link, it repl\
+aces all or part of the pathname while pro-)-3.223 F .668
+(cessing the link.)72 458.4 R .668
+(If the contents of the symbolic link be)5.668 F .669
+(gin with a slash, the k)-.15 F .669(ernel replaces the pathname)-.1 F
+.219(entirely; if not, the link contents replace the current component.)
+72 470.4 R .219(In either case, the symbolic link is visible.)5.219 F
+.058(If the link v)72 482.4 R .058(alue is an absolute pathname, the us\
+er \214nds himself in a completely dif)-.25 F .059
+(ferent part of the \214le sys-)-.25 F(tem.)72 494.4 Q .704(Bash pro)97
+510 R .704(vides a)-.15 F F2(lo)3.203 E(gical)-.1 E F0(vie)3.203 E 3.203
+(wo)-.25 G 3.203(ft)-3.203 G .703(he \214le system.)-3.203 F .703
+(In this def)5.703 F .703(ault mode, command and \214lename com-)-.1 F
+.522(pletion and b)72 522 R .522(uiltin commands such as)-.2 F F1(cd)
+3.022 E F0(and)3.022 E F1(pushd)3.022 E F0 .522
+(which change the current w)3.022 F .522(orking directory transpar)-.1 F
+(-)-.2 E .127(ently follo)72 534 R 2.627(ws)-.25 G .127
+(ymbolic links as if the)-2.627 F 2.627(yw)-.15 G .127(ere directories.)
+-2.627 F(The)5.126 E F1($PWD)2.626 E F0 -.25(va)2.626 G .126
+(riable, which holds the shell').25 F 2.626(si)-.55 G .126(dea of)-2.626
+F .366(the current w)72 546 R .366(orking directory)-.1 F 2.866(,d)-.65
+G .367
+(epends on the path used to reach the directory rather than its ph)
+-2.866 F .367(ysical loca-)-.05 F
+(tion in the local \214le system hierarch)72 558 Q 3.8 -.65(y. F)-.05 H
+(or e).5 E(xample:)-.15 E F3 6($c)97 576 S 6(d/)-6 G(usr/local/bin)-6 E
+6($e)97 588 S(cho $PWD)-6 E(/usr/local/bin)97 600 Q 6($p)97 612 S(wd)-6
+E(/usr/local/bin)97 624 Q 6($/)97 636 S(bin/pwd)-6 E
+(/net/share/sun4/local/bin)97 648 Q 6($c)97 660 S 6(d.)-6 G(.)-6 E 6($p)
+97 672 S(wd)-6 E(/usr/local)97 684 Q 6($/)97 696 S(bin/pwd)-6 E
+(/net/share/sun4/local)97 708 Q 6($c)97 720 S 6(d.)-6 G(.)-6 E EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-8-)282.17 48 Q/F1 10/Courier@0 SF 6($p)97 84 S
+(wd)-6 E(/usr)97 96 Q 6($/)97 108 S(bin/pwd)-6 E(/usr)97 120 Q F0 .3(On\
+e problem with this, of course, arises when programs that do not unders\
+tand the shell')72 141.6 R 2.8(sl)-.55 G .3(ogical notion of)-2.8 F .217
+(the \214le system interpret \231..)72 153.6 R 2.718<9a64>-.7 G(if)
+-2.718 E(ferently)-.25 E 5.218(.T)-.65 G .218
+(his generally happens when Bash completes \214lenames containing)-5.218
+F(\231..)72 165.6 Q 3.384<9a61>-.7 G .884
+(ccording to a logical hierarch)-3.384 F 3.384(yw)-.05 G .884
+(hich does not correspond to their ph)-3.384 F .883(ysical location.)
+-.05 F -.15(Fo)5.883 G 3.383(ru).15 G .883(sers who)-3.383 F
+(\214nd this troublesome, a corresponding)72 177.6 Q/F2 10
+/Times-Italic@0 SF(physical)2.5 E F0(vie)2.5 E 2.5(wo)-.25 G 2.5(ft)-2.5
+G(he \214le system is a)-2.5 E -.25(va)-.2 G(ilable:).25 E F1 6($c)97
+195.6 S 6(d/)-6 G(usr/local/bin)-6 E 6($p)97 207.6 S(wd)-6 E
+(/usr/local/bin)97 219.6 Q 6($s)97 231.6 S(et -o physical)-6 E 6($p)97
+243.6 S(wd)-6 E(/net/share/sun4/local/bin)97 255.6 Q/F3 10/Times-Bold@0
+SF 2.5(4.10. Inter)72 285.6 R(nationalization)-.15 E F0 .145
+(One of the most signi\214cant impro)97 301.2 R -.15(ve)-.15 G .145
+(ments in v).15 F .145(ersion 1.13 of Bash w)-.15 F .145
+(as the change to \231eight-bit clean-)-.1 F 2.933(liness\232. Pre)72
+313.2 R .433(vious v)-.25 F .432
+(ersions used the eighth bit of characters to mark whether or not the)
+-.15 F 2.932(yw)-.15 G .432(ere quoted when)-2.932 F 1.495(performing w)
+72 325.2 R 1.495(ord e)-.1 F 3.995(xpansions. While)-.15 F 1.495
+(this did not af)3.995 F 1.496
+(fect the majority of users, most of whom used only)-.25 F(se)72 337.2 Q
+-.15(ve)-.25 G 1.236(n-bit ASCII characters, some found it con\214ning.)
+.15 F(Be)6.236 E 1.236(ginning with v)-.15 F 1.236
+(ersion 1.13, Bash implemented a)-.15 F(dif)72 349.2 Q .02(ferent quoti\
+ng mechanism that did not alter the eighth bit of characters.)-.25 F
+.021(This allo)5.021 F .021(wed Bash to manipulate)-.25 F .427
+(\214les with \231odd\232 characters in their names, b)72 361.2 R .427
+(ut did nothing to help users enter those names, so v)-.2 F .426
+(ersion 1.13)-.15 F 1.458
+(introduced changes to readline that made it eight-bit clean as well.)72
+373.2 R 1.458(Options e)6.458 F 1.458(xist that force readline to)-.15 F
+.744(attach no special signi\214cance to characters with the eighth bit\
+ set \(the def)72 385.2 R .744(ault beha)-.1 F .744(vior is to con)-.2 F
+-.15(ve)-.4 G .744(rt these).15 F .641(characters to meta-pre\214x)72
+397.2 R .641(ed k)-.15 F .941 -.15(ey s)-.1 H .642
+(equences\) and to output these characters without con).15 F -.15(ve)-.4
+G .642(rsion to meta-pre-).15 F<8c78>72 409.2 Q .008(ed sequences.)-.15
+F .007(These changes, along with the e)5.007 F .007(xpansion of k)-.15 F
+-.15(ey)-.1 G .007(maps to a full eight bits, enable readline to).15 F
+-.1(wo)72 421.2 S(rk with most of the ISO-8859 f).1 E
+(amily of character sets, used by man)-.1 E 2.5(yE)-.15 G
+(uropean countries.)-2.5 E F3 2.5(4.11. POSIX)72 445.2 R(Mode)2.5 E F0
+.584(Although Bash is intended to be POSIX.2 conformant, there are area\
+s in which the def)97 460.8 R .584(ault beha)-.1 F(vior)-.2 E .463
+(is not compatible with the standard.)72 472.8 R -.15(Fo)5.463 G 2.962
+(ru).15 G .462(sers who wish to operate in a strict POSIX.2 en)-2.962 F
+.462(vironment, Bash)-.4 F .505(implements a)72 484.8 R F2 .505
+(POSIX mode)3.005 F F0 5.505(.W)C .505(hen this mode is acti)-5.505 F
+-.15(ve)-.25 G 3.005(,B).15 G .505(ash modi\214es its def)-3.005 F .505
+(ault operation where it dif)-.1 F(fers)-.25 E .267
+(from POSIX.2 to match the standard.)72 496.8 R .266
+(POSIX mode is entered when Bash is started with the)5.267 F F3(-posix)
+2.766 E F0(option.)2.766 E .149(This feature is also a)72 508.8 R -.25
+(va)-.2 G .149(ilable as an option to the).25 F F3(set)2.649 E F0 -.2
+(bu)2.649 G(iltin,).2 E F3 .149(set -o posix)2.649 F F0 5.149(.F)C .149
+(or compatibility with other GNU)-5.299 F(softw)72 520.8 Q 4.02(are tha\
+t attempts to be POSIX.2 compliant, Bash also enters POSIX mode if the \
+v)-.1 F(ariable)-.25 E F3($POSIXL)72 532.8 Q(Y_CORRECT)-.92 E F0 5.824
+(is set when Bash is started or assigned a v)8.324 F 5.825
+(alue during e)-.25 F -.15(xe)-.15 G(cution.).15 E F3($POSIX_PED)72
+544.8 Q(ANTIC)-.35 E F0 .27
+(is accepted as well, to be compatible with some older GNU utilities.)
+2.77 F .27(When Bash is)5.27 F .506(started in POSIX mode, for e)72
+556.8 R .506(xample, it sources the \214le named by the v)-.15 F .507
+(alue of)-.25 F F3($ENV)3.007 E F0 .507(rather than the \231nor)3.007 F
+(-)-.2 E(mal\232 startup \214les, and does not allo)72 568.8 Q 2.5(wr)
+-.25 G(eserv)-2.5 E(ed w)-.15 E(ords to be aliased.)-.1 E F3 2.5(5. New)
+72 592.8 R -.25(Fe)2.5 G(atur).25 E(es and Futur)-.18 E 2.5(eP)-.18 G
+(lans)-2.5 E F0 1.632(There are se)97 608.4 R -.15(ve)-.25 G 1.632
+(ral features introduced in the current v).15 F 1.631(ersion of Bash, v)
+-.15 F 1.631(ersion 1.14, and a number)-.15 F .241
+(under consideration for future releases.)72 620.4 R .242
+(This section will brie\215y detail the ne)5.242 F 2.742(wf)-.25 G .242
+(eatures in v)-2.742 F .242(ersion 1.14 and)-.15 F(describe se)72 632.4
+Q -.15(ve)-.25 G(ral features that may appear in later v).15 E(ersions.)
+-.15 E F3 2.5(5.1. New)72 656.4 R -.25(Fe)2.5 G(atur).25 E
+(es in Bash-1.14)-.18 E F0 .884(The ne)97 672 R 3.384(wf)-.25 G .884
+(eatures a)-3.384 F -.25(va)-.2 G .884(ilable in Bash-1.14 answer se).25
+F -.15(ve)-.25 G .883(ral of the most common requests for enhance-).15 F
+2.931(ments. Most)72 684 R(notably)2.931 E 2.931(,t)-.65 G .432(here is\
+ a mechanism for including non-visible character sequences in prompts, \
+such)-2.931 F .136
+(as those which cause a terminal to print characters in dif)72 696 R
+.135(ferent colors or in standout mode.)-.25 F .135(There w)5.135 F .135
+(as noth-)-.1 F .558(ing pre)72 708 R -.15(ve)-.25 G .558
+(nting the use of these sequences in earlier v).15 F .559(ersions, b)
+-.15 F .559(ut the readline redisplay algorithm assumed)-.2 F
+(each character occupied ph)72 720 Q(ysical screen space and w)-.05 E
+(ould wrap lines prematurely)-.1 E(.)-.65 E EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-9-)282.17 48 Q .13(Readline has a fe)97 84 R
+2.63(wn)-.25 G .63 -.25(ew va)-2.63 H .13(riables, se).25 F -.15(ve)-.25
+G .13(ral ne).15 F 2.63(wb)-.25 G .13
+(indable commands, and some additional emacs mode)-2.63 F(def)72 96 Q
+.918(ault k)-.1 F 1.218 -.15(ey b)-.1 H 3.418(indings. A).15 F(ne)3.418
+E 3.418(wh)-.25 G .919(istory search mode has been implemented: in this\
+ mode, readline searches)-3.418 F .336(the history for lines be)72 108 R
+.336(ginning with the characters between the be)-.15 F .336
+(ginning of the current line and the cursor)-.15 F(.)-.55 E .555(The e)
+72 120 R .556(xisting readline incremental search commands no longer ma\
+tch identical lines more than once.)-.15 F(File-)5.556 E 1.979
+(name completion no)72 132 R 4.479(we)-.25 G 1.979(xpands v)-4.629 F
+1.979(ariables in directory names.)-.25 F 1.978(The history e)6.978 F
+1.978(xpansion f)-.15 F 1.978(acilities are no)-.1 F(w)-.25 E 1.449
+(nearly completely csh-compatible: missing modi\214ers ha)72 144 R 1.749
+-.15(ve b)-.2 H 1.449(een added and history substitution has been).15 F
+-.15(ex)72 156 S(tended.).15 E(Se)97 171.6 Q -.15(ve)-.25 G .474
+(ral of the features described earlier).15 F 2.973(,s)-.4 G .473(uch as)
+-2.973 F/F1 10/Times-Bold@0 SF .473(set -o posix)2.973 F F0(and)2.973 E
+F1($POSIX_PED)2.973 E(ANTIC)-.35 E F0 2.973(,a)C .473(re ne)-2.973 F
+2.973(wi)-.25 G(n)-2.973 E -.15(ve)72 183.6 S .106(rsion 1.14.).15 F
+.106(There is a ne)5.106 F 2.606(ws)-.25 G .106(hell v)-2.606 F
+(ariable,)-.25 E F1(OSTYPE)2.606 E F0 2.606(,t)C 2.606(ow)-2.606 G .106
+(hich Bash assigns a v)-2.606 F .106(alue that identi\214es the v)-.25 F
+(er)-.15 E(-)-.2 E 1.38(sion of)72 195.6 R/F2 9/Times-Roman@0 SF(UNIX)
+3.88 E F0(it')3.88 E 3.879(sr)-.55 G 1.379(unning on \(great for puttin\
+g architecture-speci\214c binary directories into the)-3.879 F F1($P)
+3.879 E -.95(AT)-.74 G(H).95 E F0(\).)A -1 -.8(Tw o)72 207.6 T -.25(va)
+6.215 G 2.915(riables ha).25 F 3.215 -.15(ve b)-.2 H 2.915(een renamed:)
+.15 F F1($HISTCONTR)5.416 E(OL)-.3 E F0(replaces)5.416 E F1
+($history_contr)5.416 E(ol)-.18 E F0 5.416(,a)C(nd)-5.416 E F1
+($HOSTFILE)5.416 E F0(replaces)72 219.6 Q F1
+($hostname_completion_\214le)2.521 E F0 5.021(.I)C 2.521(nb)-5.021 G
+.021(oth cases, the old names are accepted for backw)-2.521 F .02
+(ards compatibil-)-.1 F(ity)72 231.6 Q 5.788(.T)-.65 G .788(he ksh)
+-5.788 F/F3 10/Times-Italic@0 SF(select)3.288 E F0 .788
+(construct, which allo)3.288 F .788
+(ws the generation of simple menus, has been implemented.)-.25 F(Ne)
+5.788 E(w)-.25 E 1.496(capabilities ha)72 243.6 R 1.796 -.15(ve b)-.2 H
+1.496(een added to e).15 F 1.495(xisting v)-.15 F(ariables:)-.25 E F1
+($auto_r)3.995 E(esume)-.18 E F0 1.495(can no)3.995 F 3.995(wt)-.25 G
+(ak)-3.995 E 3.995(ev)-.1 G 1.495(alues of)-4.245 F F3 -.2(ex)3.995 G
+(act).2 E F0(or)3.995 E F3(sub-)3.995 E(string)72 255.6 Q F0 4.843(,a)C
+(nd)-4.843 E F1($HISTCONTR)4.843 E(OL)-.3 E F0 2.343(understands the v)
+4.843 F(alue)-.25 E F3(ignor)4.844 E(eboth)-.37 E F0 4.844(,w)C 2.344
+(hich combines the tw)-4.844 F 4.844(op)-.1 G(re)-4.844 E(viously)-.25 E
+1.556(acceptable v)72 267.6 R 4.056(alues. The)-.25 F F1(dirs)4.056 E F0
+-.2(bu)4.056 G 1.556(iltin has acquired options to print out speci\214c\
+ members of the directory).2 F 3.062(stack. The)72 279.6 R F1($nolinks)
+3.062 E F0 -.25(va)3.062 G .562(riable, which forces a ph).25 F .562
+(ysical vie)-.05 F 3.062(wo)-.25 G 3.062(ft)-3.062 G .563
+(he \214le system, has been superseded by the)-3.062 F F1<ad50>72 291.6
+Q F0 .494(option to the)2.994 F F1(set)2.994 E F0 -.2(bu)2.994 G .494
+(iltin \(equi).2 F -.25(va)-.25 G .494(lent to).25 F F1 .494(set -o ph)
+2.994 F(ysical)-.15 E F0 .493(\); the v)B .493
+(ariable is retained for backw)-.25 F .493(ards compati-)-.1 F(bility)72
+303.6 Q 5.196(.T)-.65 G .196(he v)-5.196 F .196
+(ersion string contained in)-.15 F F1($B)2.696 E(ASH_VERSION)-.3 E F0
+(no)2.696 E 2.696(wi)-.25 G .196(ncludes an indication of the patch le)
+-2.696 F -.15(ve)-.25 G 2.696(la).15 G(s)-2.696 E .85(well as the \231b)
+72 315.6 R .85(uild v)-.2 F 3.35(ersion\232. Some)-.15 F .85
+(little-used features ha)3.35 F 1.15 -.15(ve b)-.2 H .85(een remo).15 F
+-.15(ve)-.15 G 3.35(d: the).15 F F1(by)3.35 E(e)-.1 E F0(synon)3.35 E
+.85(ym for)-.15 F F1(exit)3.35 E F0(and)3.35 E(the)72 327.6 Q F1($NO_PR)
+3.498 E(OMPT_V)-.3 E(ARS)-1.35 E F0 -.25(va)3.498 G .998
+(riable are gone.).25 F .998(There is no)5.998 F 3.498(wa)-.25 G 3.498
+(no)-3.498 G -2.19 -.18(rg a)-3.498 H .998
+(nized test suite that can be run as a).18 F(re)72 339.6 Q
+(gression test when b)-.15 E(uilding a ne)-.2 E 2.5(wv)-.25 G
+(ersion of Bash.)-2.65 E 1.696(The documentation has been thoroughly o)
+97 355.2 R -.15(ve)-.15 G 1.696(rhauled: there is a ne).15 F 4.196(wm)
+-.25 G 1.695(anual page on the readline)-4.196 F .467(library and the)72
+367.2 R F3(info)2.967 E F0 .467
+(\214le has been updated to re\215ect the current v)2.967 F 2.968
+(ersion. As)-.15 F(al)2.968 E -.1(wa)-.1 G .468(ys, as man).1 F 2.968
+(yb)-.15 G .468(ugs as possi-)-3.168 F(ble ha)72 379.2 Q .3 -.15(ve b)
+-.2 H(een \214x).15 E(ed, although some surely remain.)-.15 E F1 2.5
+(5.2. Other)72 403.2 R -.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 1.68
+(There are a fe)97 418.8 R 4.18(wf)-.25 G 1.68
+(eatures that I hope to include in later Bash releases.)-4.18 F 1.68
+(Some are based on w)6.68 F(ork)-.1 E(already done in other shells.)72
+430.8 Q .958(In addition to simple v)97 446.4 R .959(ariables, a future\
+ release of Bash will include one-dimensional arrays, using)-.25 F .206
+(the ksh implementation of arrays as a model.)72 458.4 R .205
+(Additions to the ksh syntax, such as)5.205 F F3(varname)2.705 E F0 .205
+(=\( ... \) to assign)B 2.587(al)72 470.4 S .087(ist of w)-2.587 F .088
+(ords directly to an array and a mechanism to allo)-.1 F 2.588(wt)-.25 G
+(he)-2.588 E F1 -.18(re)2.588 G(ad).18 E F0 -.2(bu)2.588 G .088
+(iltin to read a list of v).2 F .088(alues directly)-.25 F .092
+(into an array)72 482.4 R 2.592(,w)-.65 G .092(ould be desirable.)-2.692
+F(Gi)5.092 E -.15(ve)-.25 G 2.592(nt).15 G .092(hose e)-2.592 F .092
+(xtensions, the ksh)-.15 F F1 .092(set \255A)2.592 F F0 .091
+(syntax may not be w)2.591 F .091(orth support-)-.1 F(ing \(the)72 494.4
+Q F1<ad41>2.5 E F0(option assigns a list of v)2.5 E(alues to an array)
+-.25 E 2.5(,b)-.65 G(ut is a rather peculiar special case\).)-2.7 E .76
+(Some shells include a means of)97 510 R F3(pr)3.26 E -.1(og)-.45 G -.15
+(ra).1 G(mmable).15 E F0 -.1(wo)3.26 G .76
+(rd completion, where the user speci\214es on a per).1 F(-)-.2 E .163
+(command basis ho)72 522 R 2.663(wt)-.25 G .163(he ar)-2.663 F .163(gum\
+ents of the command are to be treated when completion is attempted: as \
+\214le-)-.18 F .194(names, hostnames, e)72 534 R -.15(xe)-.15 G .194
+(cutable \214les, and so on.).15 F .195
+(The other aspects of the current Bash implementation could)5.195 F .482
+(remain as-is; the e)72 546 R .482(xisting heuristics w)-.15 F .481
+(ould still be v)-.1 F 2.981(alid. Only)-.25 F .481
+(when completing the ar)2.981 F .481(guments to a simple)-.18 F
+(command w)72 558 Q(ould the programmable completion be in ef)-.1 E
+(fect.)-.25 E .479(It w)97 573.6 R .479(ould also be nice to gi)-.1 F
+.779 -.15(ve t)-.25 H .479(he user \214ner).15 F .479
+(-grained control o)-.2 F -.15(ve)-.15 G 2.98(rw).15 G .48
+(hich commands are sa)-2.98 F -.15(ve)-.2 G 2.98(do).15 G .48(nto the)
+-2.98 F 1.786(history list.)72 585.6 R 1.786(One proposal is for a v)
+6.786 F 1.786(ariable, tentati)-.25 F -.15(ve)-.25 G 1.786(ly named).15
+F F1(HISTIGNORE)4.286 E F0 4.285(,w)C 1.785(hich w)-4.285 F 1.785
+(ould contain a)-.1 F .496(colon-separated list of commands.)72 597.6 R
+.496(Lines be)5.496 F .496
+(ginning with these commands, after the restrictions of)-.15 F F1($HIST)
+2.997 E(-)-.92 E(CONTR)72 609.6 Q(OL)-.3 E F0(ha)2.65 E .45 -.15(ve b)
+-.2 H .15(een applied, w).15 F .15
+(ould not be placed onto the history list.)-.1 F .15
+(The shell pattern-matching capa-)5.15 F(bilities could also be a)72
+621.6 Q -.25(va)-.2 G(ilable when specifying the contents of).25 E F1
+($HISTIGNORE)2.5 E F0(.)A .729(One thing that ne)97 637.2 R .729
+(wer shells such as)-.25 F F1(wksh)3.229 E F0 .729(\(also kno)3.229 F
+.729(wn as)-.25 F F1(dtksh)3.23 E F0 3.23(\)p)C(ro)-3.23 E .73
+(vide is a command to dynami-)-.15 F 1.189
+(cally load code implementing additional b)72 649.2 R 1.189
+(uiltin commands into a running shell.)-.2 F 1.188(This ne)6.188 F 3.688
+(wb)-.25 G 1.188(uiltin w)-3.888 F(ould)-.1 E(tak)72 661.2 Q 2.875(ea)
+-.1 G 2.875(no)-2.875 G .375
+(bject \214le or shared library implementing the \231body\232 of the b)
+-2.875 F .375(uiltin \()-.2 F F3(xxx_b)A(uiltin\(\))-.2 E F0 .375
+(for those f)2.875 F(amiliar)-.1 E .052
+(with Bash internals\) and a structure containing the name of the ne)72
+673.2 R 2.552(wc)-.25 G .051(ommand, the function to call when the)
+-2.552 F(ne)72 685.2 Q 3.458(wb)-.25 G .958(uiltin is in)-3.658 F -.2
+(vo)-.4 G -.1(ke).2 G 3.458(d\().1 G .959
+(presumably de\214ned in the shared object speci\214ed as an ar)-3.458 F
+.959(gument\), and the docu-)-.18 F 1.352
+(mentation to be printed by the)72 697.2 R F1(help)3.851 E F0 1.351
+(command \(possibly present in the shared object as well\).)3.851 F
+1.351(It w)6.351 F(ould)-.1 E(manage the details of e)72 709.2 Q
+(xtending the internal table of b)-.15 E(uiltins.)-.2 E EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-10-)279.67 48 Q 3.291(Af)97 84 S 1.291 -.25
+(ew o)-3.291 H .791(ther b).25 F .791(uiltins w)-.2 F .791
+(ould also be desirable: tw)-.1 F 3.291(oa)-.1 G .791(re the POSIX.2)
+-3.291 F/F1 10/Times-Bold@0 SF(getconf)3.292 E F0 .792
+(command, which prints)3.292 F 1.412(the v)72 96 R 1.412
+(alues of system con\214guration v)-.25 F 1.411
+(ariables de\214ned by POSIX.2, and a)-.25 F F1(diso)3.911 E(wn)-.1 E F0
+-.2(bu)3.911 G 1.411(iltin, which causes a).2 F 1.347
+(shell running with job control acti)72 108 R 1.647 -.15(ve t)-.25 H
+3.847<6f99>.15 G(for)-3.847 E 1.347
+(get about\232 one or more background jobs in its internal jobs)-.18 F
+3.465(table. Using)72 120 R F1(getconf)3.465 E F0 3.465(,f)C .965(or e)
+-3.465 F .965(xample, a user could retrie)-.15 F 1.264 -.15(ve a v)-.25
+H .964(alue for)-.1 F F1($P)3.464 E -.95(AT)-.74 G(H).95 E F0 .964
+(guaranteed to \214nd all of the)3.464 F .884
+(POSIX standard utilities, or \214nd out ho)72 132 R 3.385(wl)-.25 G
+.885
+(ong \214lenames may be in the \214le system containing a speci\214ed)
+-3.385 F(directory)72 144 Q(.)-.65 E 1.521
+(There are no implementation timetables for an)97 159.6 R 4.021(yo)-.15
+G 4.021(ft)-4.021 G 1.52(hese features, nor are there concrete plans to)
+-4.021 F(include them.)72 171.6 Q(If an)5 E(yone has comments on these \
+proposals, feel free to send me electronic mail.)-.15 E F1 2.5
+(6. Re\215ections)72 195.6 R(and Lessons Lear)2.5 E(ned)-.15 E F0 .433
+(The lesson that has been repeated most often during Bash de)97 211.2 R
+-.15(ve)-.25 G .433(lopment is that there are dark corners).15 F .181
+(in the Bourne shell, and people use all of them.)72 223.2 R .18
+(In the original description of the Bourne shell, quoting and)5.181 F
+.073(the shell grammar are both poorly speci\214ed and incomplete; subs\
+equent descriptions ha)72 235.2 R .373 -.15(ve n)-.2 H .073
+(ot helped much.).15 F 1.856(The grammar presented in Bourne')72 247.2 R
+4.356(sp)-.55 G 1.856(aper describing the shell distrib)-4.356 F 1.855
+(uted with the Se)-.2 F -.15(ve)-.25 G 1.855(nth Edition of).15 F/F2 9
+/Times-Roman@0 SF(UNIX)72 259.2 Q F0 2.5<8769>C 2.5(ss)-2.5 G 2.5(of)
+-2.5 G(ar of)-2.6 E 2.5(ft)-.25 G(hat it does not allo)-2.5 E 2.5(wt)
+-.25 G(he command)-2.5 E/F3 10/Courier@0 SF(who|wc)2.5 E F0 5(.I)C 2.5
+(nf)-5 G(act, as T)-2.6 E(om Duf)-.8 E 2.5(fs)-.25 G(tates:)-2.5 E 1.375
+(Nobody really kno)97 274.8 R 1.375(ws what the Bourne shell')-.25 F
+3.875(sg)-.55 G 1.375(rammar is.)-3.875 F(Ev)6.376 E 1.376(en e)-.15 F
+1.376(xamination of the source)-.15 F(code is little help.\210)97 286.8
+Q .382(The POSIX.2 standard includes a)72 302.4 R/F4 10/Times-Italic@0
+SF(yacc)2.882 E F0 .382
+(grammar that comes close to capturing the Bourne shell')2.882 F 2.882
+(sb)-.55 G(eha)-2.882 E(vior)-.2 E(,)-.4 E -.2(bu)72 314.4 S 3.246(ti).2
+G 3.246(td)-3.246 G(isallo)-3.246 E .747(ws some constructs which sh ac\
+cepts without complaint \255 and there are scripts out there that)-.25 F
+.501(use them.)72 326.4 R .501(It took a fe)5.501 F 3.001(wv)-.25 G .501
+(ersions and se)-3.151 F -.15(ve)-.25 G .501(ral b).15 F .5
+(ug reports before Bash implemented sh-compatible quoting,)-.2 F .279
+(and there are still some \231le)72 338.4 R -.05(ga)-.15 G .279
+(l\232 sh constructs which Bash \215ags as syntax errors.).05 F .28
+(Complete sh compatibility)5.28 F(is a tough nut.)72 350.4 Q 1.231
+(The shell is bigger and slo)97 366 R 1.231(wer than I w)-.25 F 1.231
+(ould lik)-.1 F 1.23(e, though the current v)-.1 F 1.23
+(ersion is substantially f)-.15 F(aster)-.1 E .086(than pre)72 378 R
+(viously)-.25 E 5.086(.T)-.65 G .087
+(he readline library could stand a substantial re)-5.086 F 2.587
+(write. A)-.25 F .087(hand-written parser to replace the)2.587 F
+(current)72 390 Q F4(yacc)2.978 E F0 .478(-generated one w)B .477
+(ould probably result in a speedup, and w)-.1 F .477(ould solv)-.1 F
+2.977(eo)-.15 G .477(ne glaring problem:)-2.977 F(the)5.477 E .384
+(shell could parse commands in \231$\(...\)\232 constructs as the)72 402
+R 2.884(ya)-.15 G .385
+(re entered, rather than reporting errors when the)-2.884 F
+(construct is e)72 414 Q(xpanded.)-.15 E 1.064(As al)97 429.6 R -.1(wa)
+-.1 G 1.064(ys, there is some chaf).1 F 3.564(ft)-.25 G 3.564(og)-3.564
+G 3.564(ow)-3.564 G 1.064(ith the wheat.)-3.564 F 1.063
+(Areas of duplicated functionality need to be)6.063 F .382(cleaned up.)
+72 441.6 R .382(There are se)5.382 F -.15(ve)-.25 G .382
+(ral cases where Bash treats a v).15 F .382
+(ariable specially to enable functionality a)-.25 F -.25(va)-.2 G
+(ilable).25 E .185(another w)72 453.6 R .185(ay \()-.1 F F1($notify)A F0
+(vs.)2.684 E F1 .184(set -o notify)5.184 F F0(and)2.684 E F1($nolinks)
+2.684 E F0(vs.)2.684 E F1 .184(set -o ph)2.684 F(ysical)-.15 E F0 2.684
+(,f)C .184(or instance\); the special treatment)-2.684 F 3.421(of the v)
+72 465.6 R 3.421(ariable name should probably be remo)-.25 F -.15(ve)
+-.15 G 5.921(d. A).15 F(fe)5.921 E 5.921(wm)-.25 G 3.422
+(ore things could stand remo)-5.921 F -.25(va)-.15 G 3.422(l; the).25 F
+F1($allo)72 477.6 Q(w_null_glob_expansion)-.1 E F0(and)4.112 E F1
+($glob_dot_\214lenames)4.112 E F0 -.25(va)4.111 G 1.611
+(riables are of particularly questionable v).25 F(alue.)-.25 E(The)72
+489.6 Q F1($[...])3.977 E F0 1.477(arithmetic e)3.977 F -.25(va)-.25 G
+1.478(luation syntax is redundant no).25 F 3.978(wt)-.25 G 1.478
+(hat the POSIX-mandated)-3.978 F F1($\(\(...\)\))3.978 E F0 1.478
+(construct has)3.978 F .326(been implemented, and could be deleted.)72
+501.6 R .326(It w)5.326 F .326(ould be nice if the te)-.1 F .326
+(xt output by the)-.15 F F1(help)2.825 E F0 -.2(bu)2.825 G .325
+(iltin were e).2 F(xter)-.15 E(-)-.2 E .061
+(nal to the shell rather than compiled into it.)72 513.6 R .062
+(The beha)5.062 F .062(vior enabled by)-.2 F F1
+($command_oriented_history)2.562 E F0 2.562(,w)C(hich)-2.562 E 1.125
+(causes the shell to attempt to sa)72 525.6 R 1.424 -.15(ve a)-.2 H
+1.124(ll lines of a multi-line command in a single history entry).15 F
+3.624(,s)-.65 G 1.124(hould be)-3.624 F(made the def)72 537.6 Q
+(ault and the v)-.1 E(ariable remo)-.25 E -.15(ve)-.15 G(d.).15 E F1 2.5
+(7. A)72 561.6 R -.1(va)-1 G(ilability).1 E F0 .047
+(As with all other GNU softw)97 577.2 R .047(are, Bash is a)-.1 F -.25
+(va)-.2 G .047(ilable for anon).25 F .047(ymous FTP from)-.15 F F4(pr)
+2.547 E(ep.ai.mit.edu:/pub/gnu)-.37 E F0 1.05(and from other GNU softw)
+72 589.2 R 1.05(are mirror sites.)-.1 F 1.049(The current v)6.049 F
+1.049(ersion is in)-.15 F F4(bash-1.14.1.tar)3.549 E(.gz)-1.11 E F0
+1.049(in that directory)3.549 F(.)-.65 E(Use)72 601.2 Q F4(ar)5.965 E
+-.15(ch)-.37 G(ie).15 E F0 3.465(to \214nd the nearest archi)5.965 F
+3.766 -.15(ve s)-.25 H 5.966(ite. The).15 F 3.466(latest v)5.966 F 3.466
+(ersion is al)-.15 F -.1(wa)-.1 G 3.466(ys a).1 F -.25(va)-.2 G 3.466
+(ilable for FTP from).25 F F4(bash.CWR)72 613.2 Q -.25(U.)-.4 G
+(Edu:/pub/dist.).25 E F0(Bash documentation is a)5 E -.25(va)-.2 G
+(ilable for FTP from).25 E F4(bash.CWR)2.5 E -.25(U.)-.4 G
+(Edu:/pub/bash.).25 E F0 1.169(The Free Softw)97 628.8 R 1.169(are F)-.1
+F 1.169(oundation sells tapes and CD-R)-.15 F 1.168
+(OMs containing Bash; send electronic mail to)-.4 F F3
+(gnu@prep.ai.mit.edu)72 640.8 Q F0(or call)2.5 E F3(+1-617-876-3296)2.5
+E F0(for more information.)2.5 E .694(Bash is also distrib)97 656.4 R
+.694(uted with se)-.2 F -.15(ve)-.25 G .694(ral v).15 F .694(ersions of)
+-.15 F F2(UNIX)3.194 E F0 .694(-compatible systems.)B .695
+(It is included as /bin/sh)5.694 F .948(and /bin/bash on se)72 668.4 R
+-.15(ve)-.25 G .948(ral Linux distrib).15 F .948
+(utions \(more about the dif)-.2 F .948
+(ference in a moment\), and as contrib)-.25 F(uted)-.2 E .32 LW 144
+676.4 72 676.4 DL/F5 8/Times-Roman@0 SF .781
+(\207S. R. Bourne, \231UNIX T)72 688.2 R .781(ime-Sharing System:)-.28 F
+.781(The UNIX Shell\232,)4.781 F/F6 8/Times-Italic@0 SF .78
+(Bell System T)2.78 F(ec)-.736 E .78(hnical J)-.12 F(ournal)-.2 E F5
+2.78(,5)C .78(7\(6\), July-)-2.78 F(August, 1978, pp. 1971-1990.)72
+698.2 Q<8854>72 710 Q .431(om Duf)-.64 F .431
+(f, \231Rc \255 A Shell for Plan 9 and)-.2 F/F7 7/Times-Roman@0 SF(UNIX)
+2.432 E F5(systems\232,)2.432 E F6(Pr)2.432 E .432
+(oc. of the Summer 1990 EUUG Confer)-.36 F(ence)-.296 E F5 2.432(,L)C
+(on-)-2.432 E(don, July)72 720 Q 2(,1)-.52 G(990, pp. 21-33.)-2 E EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF(-11-)279.67 48 Q(softw)72 84 Q(are in BSDI')-.1
+E 2.5(sB)-.55 G(SD/386* and FreeBSD.)-2.5 E .598(The Linux distrib)97
+99.6 R .598(ution deserv)-.2 F .598(es special mention.)-.15 F .598
+(There are tw)5.598 F 3.099(oc)-.1 G .599
+(on\214gurations included in the stan-)-3.099 F .733(dard Bash distrib)
+72 111.6 R .732(ution: a \231normal\232 con\214guration, in which all o\
+f the standard features are included, and a)-.2 F .519(\231minimal\232 \
+con\214guration, which omits job control, aliases, history and command \
+line editing, the directory)72 123.6 R .886(stack and)72 135.6 R/F1 10
+/Times-Bold@0 SF(pushd/popd/dirs,)3.386 E F0 .886(process substitution,\
+ prompt string special character decoding, and the)3.386 F/F2 10
+/Times-Italic@0 SF(select)3.385 E F0 3.368(construct. This)72 147.6 R
+.868(minimal v)3.368 F .869
+(ersion is designed to be a drop-in replacement for the traditional)-.15
+F/F3 9/Times-Roman@0 SF(UNIX)3.369 E F0(/bin/sh,)3.369 E
+(and is included as the Linux /bin/sh in se)72 159.6 Q -.15(ve)-.25 G
+(ral packagings.).15 E F1 2.5(8. Conclusion)72 183.6 R F0 .8
+(Bash is a w)97 199.2 R(orth)-.1 E 3.3(ys)-.05 G .8(uccessor to sh.)-3.3
+F .8(It is suf)5.8 F .8(\214ciently portable to run on nearly e)-.25 F
+-.15(ve)-.25 G .8(ry v).15 F .8(ersion of)-.15 F F3(UNIX)3.299 E F0 .31
+(from 4.3 BSD to SVR4.2, and se)72 211.2 R -.15(ve)-.25 G(ral).15 E F3
+(UNIX)2.81 E F0 -.1(wo)2.81 G(rkalik).1 E 2.81(es. It)-.1 F .311(is rob)
+2.81 F .311(ust enough to replace sh on most of those)-.2 F 1.515
+(systems, and pro)72 223.2 R 1.515(vides more functionality)-.15 F 6.515
+(.I)-.65 G 4.015(th)-6.515 G 1.515(as se)-4.015 F -.15(ve)-.25 G 1.515
+(ral thousand re).15 F 1.515(gular users, and their feedback has)-.15 F
+(helped to mak)72 235.2 Q 2.5(ei)-.1 G 2.5(ta)-2.5 G 2.5(sg)-2.5 G
+(ood as it is today \255 a testament to the bene\214ts of free softw)
+-2.5 E(are.)-.1 E .32 LW 144 708.2 72 708.2 DL/F4 8/Times-Roman@0 SF
+(*BSD/386 is a trademark of Berk)72 720 Q(ele)-.08 E 2(yS)-.12 G(oftw)-2
+E(are Design, Inc.)-.08 E EP
+%%Trailer
+end
+%%EOF
index 21d0aba..40e1fbd 100644 (file)
@@ -1,17 +1,17 @@
-.\"
+\"
 .\" MAN PAGE COMMENTS to
 .\"
 .\"    Chet Ramey
 .\"    Information Network Services
 .\"    Case Western Reserve University
-.\"    chet@po.CWRU.Edu
+.\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Sat Jun 26 14:26:44 EDT 2004
+.\"    Last Change: Sat Aug 27 13:28:44 EDT 2005
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2004 June 26" "GNU Bash-3.0"
+.TH BASH 1 "2005 Aug 27" "GNU Bash-3.1-beta1"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -51,8 +51,8 @@ bash \- GNU Bourne-Again SHell
 [options]
 [file]
 .SH COPYRIGHT
-.if n Bash is Copyright (C) 1989-2004 by the Free Software Foundation, Inc.
-.if t Bash is Copyright \(co 1989-2004 by the Free Software Foundation, Inc.
+.if n Bash is Copyright (C) 1989-2005 by the Free Software Foundation, Inc.
+.if t Bash is Copyright \(co 1989-2005 by the Free Software Foundation, Inc.
 .SH DESCRIPTION
 .B Bash
 is an \fBsh\fR-compatible command language interpreter that
@@ -64,6 +64,8 @@ shells (\fBksh\fP and \fBcsh\fP).
 .B Bash
 is intended to be a conformant implementation of the IEEE
 POSIX Shell and Tools specification (IEEE Working Group 1003\.2).
+.B Bash
+can be configured to be POSIX-conformant by default.
 .SH OPTIONS
 In addition to the single-character shell options documented in the
 description of the \fBset\fR builtin command, \fBbash\fR
@@ -115,7 +117,7 @@ when invoking an interactive shell.
 .TP
 .B \-D
 A list of all double-quoted strings preceded by \fB$\fP
-is printed on the standard ouput.
+is printed on the standard output.
 These are the strings that
 are subject to language translation when the current locale
 is not \fBC\fP or \fBPOSIX\fP.
@@ -154,11 +156,13 @@ single-character options to be recognized.
 .TP
 .B \-\-debugger
 Arrange for the debugger profile to be executed before the shell
-starts.  Turns on extended debugging mode (see the description of the
+starts.
+Turns on extended debugging mode (see the description of the
 .B extdebug
 option to the
 .B shopt
-builtin below) and shell function tracing (see the description of the
+builtin below)
+and shell function tracing (see the description of the
 \fB\-o functrace\fP option to the
 .B set
 builtin below).
@@ -669,6 +673,10 @@ as primaries.
 When the \fB==\fP and \fB!=\fP operators are used, the string to the
 right of the operator is considered a pattern and matched according
 to the rules described below under \fBPattern Matching\fP.
+If the shell option
+.B nocasematch
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
 The return value is 0 if the string matches or does not match
 the pattern, respectively, and 1 otherwise.
 Any part of the pattern may be quoted to force it to be matched as a
@@ -684,7 +692,7 @@ the pattern, and 1 otherwise.
 If the regular expression is syntactically incorrect, the conditional
 expression's return value is 2.
 If the shell option
-.B nocaseglob
+.B nocasematch
 is enabled, the match is performed without regard to the case
 of alphabetic characters.
 Substrings matched by parenthesized subexpressions within the regular
@@ -798,7 +806,12 @@ A \fBcase\fP command first expands \fIword\fP, and tries to match
 it against each \fIpattern\fP in turn, using the same matching rules
 as for pathname expansion (see
 .B Pathname Expansion
-below).  When a match is found, the
+below).
+If the shell option
+.B nocasematch
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
+When a match is found, the
 corresponding \fIlist\fP is executed.  After the first match, no
 subsequent matches are attempted.  The exit status is zero if no
 pattern matches.  Otherwise, it is the exit status of the
@@ -895,7 +908,11 @@ Each of the \fImetacharacters\fP listed above under
 has special meaning to the shell and must be quoted if it is to
 represent itself.
 .PP
-When the command history expansion facilities are being used, the
+When the command history expansion facilities are being used
+(see
+.SM
+.B HISTORY EXPANSION
+below), the
 \fIhistory expansion\fP character, usually \fB!\fP, must be quoted
 to prevent history expansion.
 .PP
@@ -919,8 +936,9 @@ Enclosing characters in double quotes preserves the literal value
 of all characters within the quotes, with the exception of
 .BR $ ,
 .BR ` ,
-and
-.BR \e .
+.BR \e ,
+and, when history expansion is enabled,
+.BR ! .
 The characters
 .B $
 and
@@ -936,8 +954,12 @@ or
 .BR <newline> .
 A double quote may be quoted within double quotes by preceding it with
 a backslash.
-When command history is being used, the double quote may not be used to
-quote the history expansion character.
+If enabled, history expansion will be performed unless an
+.B !
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the
+.B !
+is not removed.
 .PP
 The special parameters
 .B *
@@ -951,7 +973,7 @@ below).
 .PP
 Words of the form \fB$\fP'\fIstring\fP' are treated specially.  The
 word expands to \fIstring\fP, with backslash-escaped characters replaced
-as specifed by the ANSI C standard.  Backslash escape sequences, if
+as specified by the ANSI C standard.  Backslash escape sequences, if
 present, are decoded as follows:
 .RS
 .PD 0
@@ -1076,6 +1098,20 @@ Assignment statements may also appear as arguments to the
 and
 .B local
 builtin commands.
+.PP
+In the context where an assignment statement is assigning a value
+to a shell variable or array index, the += operator can be used to
+append to or add to the variable's previous value.
+When += is applied to a variable for which the integer attribute has been
+set, \fIvalue\fP is evaluated as an arithmetic expression and added to the
+variable's current value, which is also evaluated.
+When += is applied to an array variable using compound assignment (see
+.B Arrays
+below), the
+variable's value is not unset (as it is when using =), and new values are
+appended to the array beginning at one greater than the array's maximum index.
+When applied to a string-valued variable, \fIvalue\fP is expanded and
+appended to the variable's value.
 .SS Positional Parameters
 .PP
 A
@@ -1130,6 +1166,10 @@ Expands to the positional parameters, starting from one.  When the
 expansion occurs within double quotes, each parameter expands to a
 separate word.  That is, "\fB$@\fP" is equivalent to
 "\fB$1\fP" "\fB$2\fP" ...
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
 When there are no positional parameters, "\fB$@\fP" and 
 .B $@
 expand to nothing (i.e., they are removed).
@@ -1178,12 +1218,13 @@ to the file name used to invoke
 as given by argument zero.
 .TP
 .B _
-At shell startup, set to the absolute file name of the shell or shell
-script being executed as passed in the argument list.
+At shell startup, set to the absolute pathname used to invoke the
+shell or shell script being executed as passed in the environment
+or argument list.
 Subsequently, expands to the last argument to the previous command,
 after expansion.
-Also set to the full file name of each command executed and placed in
-the environment exported to that command.
+Also set to the full pathname used to invoke each command executed
+and placed in the environment exported to that command.
 When checking mail, this parameter holds the name of the mail file
 currently being checked.
 .PD
@@ -1199,11 +1240,18 @@ Expands to the full file name used to invoke this instance of
 .TP
 .B BASH_ARGC
 An array variable whose values are the number of parameters in each
-frame of the current bash execution call stack.  The number of
+frame of the current bash execution call stack.
+The number of
 parameters to the current subroutine (shell function or script executed
-with \fB.\fP or \fBsource\fP) is at the top of the stack.  When a
-subroutine is executed, the number of parameters passed is pushed onto
+with \fB.\fP or \fBsource\fP) is at the top of the stack.
+When a subroutine is executed, the number of parameters passed is pushed onto
 \fBBASH_ARGC\fP.
+The shell sets \fBBASH_ARGC\fP only when in extended debugging mode
+(see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below)
 .TP
 .B BASH_ARGV
 An array variable containing all of the parameters in the current bash
@@ -1211,6 +1259,12 @@ execution call stack.  The final parameter of the last subroutine call
 is at the top of the stack; the first parameter of the initial call is
 at the bottom.  When a subroutine is executed, the parameters supplied
 are pushed onto \fBBASH_ARGV\fP.
+The shell sets \fBBASH_ARGV\fP only when in extended debugging mode
+(see the description of the
+.B extdebug
+option to the
+.B shopt
+builtin below)
 .TP
 .B BASH_COMMAND
 The command currently being executed or about to be executed, unless the
@@ -1222,10 +1276,10 @@ The command argument to the \fB\-c\fP invocation option.
 .TP
 .B BASH_LINENO
 An array variable whose members are the line numbers in source files
-corresponding to each member of @var{FUNCNAME}.
+corresponding to each member of \fBFUNCNAME\fP.
 \fB${BASH_LINENO[\fP\fI$i\fP\fB]}\fP is the line number in the source
-file where \fB${FUNCNAME[\fP\fI$i + 1\fP\fB]}\fP was called.
-The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i + 1\fP\fB]}\fB.
+file where \fB${FUNCNAME[\fP\fI$ifP\fB]}\fP was called.
+The corresponding source file name is \fB${BASH_SOURCE[\fP\fI$i\fP\fB]}\fB.
 Use \fBLINENO\fP to obtain the current line number.
 .TP
 .B BASH_REMATCH
@@ -1934,6 +1988,10 @@ number of seconds to wait for input after issuing the primary prompt.
 terminates after waiting for that number of seconds if input does
 not arrive.
 .TP
+.B TMPDIR
+If set, \fBBash\fP uses its value as the name of a directory in which
+\fBBash\fP creates temporary files for the shell's use.
+.TP
 .B auto_resume
 This variable controls how the shell interacts with the user and
 job control.  If this variable is set, single word simple
@@ -1959,9 +2017,7 @@ job identifier (see
 .B JOB CONTROL
 below).  If set to any other value, the supplied string must
 be a prefix of a stopped job's name; this provides functionality
-analogous to the
-.B %
-job identifier.
+analogous to the \fB%\fP\fIstring\fP job identifier.
 .TP
 .B histchars
 The two or three characters which control history expansion
@@ -2035,7 +2091,12 @@ character of the
 .B IFS
 special variable, and ${\fIname\fP[@]} expands each element of
 \fIname\fP to a separate word.  When there are no array members,
-${\fIname\fP[@]} expands to nothing.  This is analogous to the expansion
+${\fIname\fP[@]} expands to nothing.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
+This is analogous to the expansion
 of the special parameters \fB*\fP and \fB@\fP (see
 .B Special Parameters
 above).  ${#\fIname\fP[\fIsubscript\fP]} expands to the length of
@@ -2048,6 +2109,8 @@ The
 .B unset
 builtin is used to destroy arrays.  \fBunset\fP \fIname\fP[\fIsubscript\fP]
 destroys the array element at index \fIsubscript\fP.
+Care must be taken to avoid unwanted side effects caused by filename
+generation.
 \fBunset\fP \fIname\fP, where \fIname\fP is an array, or
 \fBunset\fP \fIname\fP[\fIsubscript\fP], where
 \fIsubscript\fP is \fB*\fP or \fB@\fP, removes the entire array.
@@ -2229,7 +2292,7 @@ is unchanged.
 Each variable assignment is checked for unquoted tilde-prefixes immediately
 following a
 .B :
-or
+or the first
 .BR = .
 In these cases, tilde expansion is also performed.
 Consequently, one may use file names with tildes in assignments to
@@ -2252,7 +2315,7 @@ interpreted as part of the name.
 .PP
 When braces are used, the matching ending brace is the first `\fB}\fP'
 not escaped by a backslash or within a quoted string, and not within an
-embedded arithmetic expansion, command substitution, or paramter
+embedded arithmetic expansion, command substitution, or parameter
 expansion.
 .PP
 .PD 0
@@ -2352,6 +2415,10 @@ parameters beginning at \fIoffset\fP.
 If \fIparameter\fP is an array name indexed by @ or *,
 the result is the \fIlength\fP
 members of the array beginning with ${\fIparameter\fP[\fIoffset\fP]}.
+A negative \fIoffset\fP is taken relative to one greater than the maximum
+index of the specified array.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the :- expansion.
 Substring indexing is zero-based unless the positional parameters 
 are used, in which case the indexing starts at 1.
 .TP
@@ -2846,7 +2913,7 @@ Matches zero or more occurrences of the given patterns
 Matches one or more occurrences of the given patterns
 .TP
 \fB@(\fP\^\fIpattern-list\^\fP\fB)\fP
-Matches exactly one of the given patterns
+Matches one of the given patterns
 .TP
 \fB!(\fP\^\fIpattern-list\^\fP\fB)\fP
 Matches anything except one of the given patterns
@@ -2943,6 +3010,10 @@ a UDP connection to the corresponding socket.
 .RE
 .PP
 A failure to open or create a file causes the redirection to fail.
+.PP
+Redirections using file descriptors greater than 9 should be used with
+care, as they may conflict with file descriptors the shell uses
+internally.
 .SS Redirecting Input
 .PP
 Redirection of input causes the file whose name results from
@@ -3291,19 +3362,21 @@ environment are identical between a function and its caller
 with the exception that the
 .SM
 .B DEBUG
-trap (see the description of the
+and
+.B RETURN
+traps (see the description of the
 .B trap
 builtin under
 .SM
 .B SHELL BUILTIN COMMANDS
-below) is not inherited unless the function has been given the
+below) are not inherited unless the function has been given the
 \fBtrace\fP attribute (see the description of the
 .SM
 .B declare
 builtin below) or the
 \fB\-o functrace\fP shell option has been enabled with
 the \fBset\fP builtin
-(in which case all functions inherit the \fBDEBUG\fP trap).
+(in which case all functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps).
 .PP
 Variables local to the function may be declared with the
 .B local
@@ -3442,7 +3515,7 @@ If \fIbase#\fP is omitted, then base 10 is used.
 The digits greater than 9 are represented by the lowercase letters,
 the uppercase letters, @, and _, in that order.
 If \fIbase\fP is less than or equal to 36, lowercase and uppercase
-letters may be used interchangably to represent numbers between 10
+letters may be used interchangeably to represent numbers between 10
 and 35.
 .PP
 Operators are evaluated in order of precedence.  Sub-expressions in
@@ -3458,6 +3531,9 @@ If any \fIfile\fP argument to one of the primaries is of the form
 If the \fIfile\fP argument to one of the primaries is one of
 \fI/dev/stdin\fP, \fI/dev/stdout\fP, or \fI/dev/stderr\fP, file
 descriptor 0, 1, or 2, respectively, is checked.
+.PP
+Unless otherwise specified, primaries that operate on files follow symbolic
+links and operate on the target of the link, rather than the link itself.
 .sp 1
 .PD 0
 .TP
@@ -3923,7 +3999,7 @@ sends a
 .B SIGHUP
 to all jobs when an interactive login shell exits.
 .PP
-If \Bbash\fP is waiting for a command to complete and receives a signal
+If \fBbash\fP is waiting for a command to complete and receives a signal
 for which a trap has been set, the trap will not be executed until
 the command completes. 
 When \fBbash\fP is waiting for an asynchronous command via the \fBwait\fP
@@ -4053,6 +4129,8 @@ command), the current job is always flagged with a
 .BR + ,
 and the previous job with a
 .BR \- .
+A single % (with no accompanying job specification) also refers to the
+current job.
 .PP
 Simply naming a job can be used to bring it into the
 foreground:
@@ -4489,7 +4567,12 @@ file with a statement of the form
 Except where noted, readline variables can take the values
 .B On
 or
-.BR Off .
+.B Off
+(without regard to case).
+Unrecognized variable names are ignored.
+When a variable value is read, empty or null values, "on" (case-insensitive),
+and "1" are equivalent to \fBOn\fP.  All other values are equivalent to
+\fBOff\fP.
 The variables and their default values are:
 .PP
 .PD 0
@@ -4500,6 +4583,11 @@ If set to \fBnone\fP, readline never rings the bell.  If set to
 \fBvisible\fP, readline uses a visible bell if one is available.
 If set to \fBaudible\fP, readline attempts to ring the terminal's bell.
 .TP
+.B bind\-tty\-special\-chars (On)
+If set to \fBOn\fP, readline attempts to bind the control characters
+treated specially by the kernel's terminal driver to their readline
+equivalents.
+.TP
 .B comment\-begin (``#'')
 The string that is inserted when the readline
 .B insert\-comment
@@ -4553,9 +4641,9 @@ arrow keys.
 If set to \fBon\fP, tilde expansion is performed when readline
 attempts word completion.
 .TP
-.B history-preserve-point
+.B history\-preserve\-point (Off)
 If set to \fBon\fP, the history code attempts to place point at the
-same location on each history line retrived with \fBprevious-history\fP
+same location on each history line retrieved with \fBprevious-history\fP
 or \fBnext-history\fP.
 .TP
 .B horizontal\-scroll\-mode (Off)
@@ -4855,6 +4943,8 @@ With an argument
 insert the \fIn\fPth word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
 inserts the \fIn\fPth word from the end of the previous command.
+Once the argument \fIn\fP is computed, the argument is extracted
+as if the "!\fIn\fP" history expansion had been specified.
 .TP
 .B
 yank\-last\-arg (M\-.\^, M\-_\^)
@@ -4863,6 +4953,8 @@ the previous history entry).  With an argument,
 behave exactly like \fByank\-nth\-arg\fP.
 Successive calls to \fByank\-last\-arg\fP move back through the history
 list, inserting the last argument of each line in turn.
+The history expansion facilities are used to extract the last argument,
+as if the "!$" history expansion had been specified.
 .TP
 .B shell\-expand\-line (M\-C\-e)
 Expand the line as the shell does.  This
@@ -5275,7 +5367,7 @@ of an \fIinputrc\fP file.
 .TP
 .B dump\-macros
 Print all of the readline key sequences bound to macros and the
-strings they ouput.  If a numeric argument is supplied,
+strings they output.  If a numeric argument is supplied,
 the output is formatted in such a way that it can be made part
 of an \fIinputrc\fP file.
 .TP
@@ -5339,7 +5431,7 @@ special variable as delimiters.
 Shell quoting is honored.
 Each word is then expanded using
 brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and pathname expansion,
+command substitution, and arithmetic expansion,
 as described above under 
 .SM
 .BR EXPANSION .
@@ -5806,6 +5898,8 @@ section as accepting options preceded by
 accepts
 .B \-\-
 to signify the end of the options.
+For example, the \fB:\fP, \fBtrue\fP, \fBfalse\fP, and \fBtest\fP builtins
+do not accept options.
 .sp .5
 .PD 0
 .TP
@@ -5872,8 +5966,8 @@ is supplied, the name and value of the alias is printed.
 \fBAlias\fP returns true unless a \fIname\fP is given for which
 no alias has been defined.
 .TP
-\fBbg\fP [\fIjobspec\fP]
-Resume the suspended job \fIjobspec\fP in the background, as if it
+\fBbg\fP [\fIjobspec\fP ...]
+Resume each suspended job \fIjobspec\fP in the background, as if it
 had been started with
 .BR & .
 If \fIjobspec\fP is not present, the shell's notion of the
@@ -5881,8 +5975,8 @@ If \fIjobspec\fP is not present, the shell's notion of the
 .B bg
 .I jobspec
 returns 0 unless run when job control is disabled or, when run with
-job control enabled, if \fIjobspec\fP was not found or started without
-job control.
+job control enabled, any specified \fIjobspec\fP was not found
+or was started without job control.
 .TP
 \fBbind\fP [\fB\-m\fP \fIkeymap\fP] [\fB\-lpsvPSV\fP]
 .PD 0
@@ -6174,6 +6268,11 @@ suppressing trailing spaces).  Intended to be used with shell functions.
 .B nospace
 Tell readline not to append a space (the default) to words completed at
 the end of the line.
+.TP 8
+.B plusdirs
+After any matches defined by the compspec are generated, 
+directory name completion is attempted and any
+matches are added to the results of the other actions.
 .RE
 .TP 8
 \fB\-A\fP \fIaction\fP
@@ -6376,7 +6475,8 @@ by subsequent assignment statements or unset.
 .TP
 .B \-t
 Give each \fIname\fP the \fItrace\fP attribute.
-Traced functions inherit the \fBDEBUG\fP trap from the calling shell.
+Traced functions inherit the \fBDEBUG\fP and \fBRETURN\fP traps from
+the calling shell.
 The trace attribute has no special meaning for variables.
 .TP
 .B \-x
@@ -6495,9 +6595,7 @@ The \fBxpg_echo\fP shell option may be used to
 dynamically determine whether or not \fBecho\fP expands these
 escape characters by default.
 .B echo
-does not interpret
-.B \-\-
-to mean the end of options.
+does not interpret \fB\-\-\fP to mean the end of options.
 .B echo
 interprets the following escape sequences:
 .RS
@@ -7205,7 +7303,7 @@ is empty, a non-existent directory stack entry is specified, or the
 directory change fails.
 .RE
 .TP
-\fBprintf\fP \fIformat\fP [\fIarguments\fP]
+\fBprintf\fP [\fB\-v\fP \fIvar\fP] \fIformat\fP [\fIarguments\fP]
 Write the formatted \fIarguments\fP to the standard output under the
 control of the \fIformat\fP.
 The \fIformat\fP is a character string which contains three types of objects:
@@ -7221,6 +7319,9 @@ beginning with \fB\e0\fP may contain up to four digits),
 and \fB%q\fP causes \fBprintf\fP to output the corresponding
 \fIargument\fP in a format that can be reused as shell input.
 .sp 1
+The \fB\-v\fP option causes the output to be assigned to the variable
+\fIvar\fP rather than being printed to the standard output.
+.sp 1
 The \fIformat\fP is reused as necessary to consume all of the \fIarguments\fP.
 If the \fIformat\fP requires more \fIarguments\fP than are supplied, the
 extra format specifications behave as if a zero value or null string, as
@@ -7366,7 +7467,7 @@ input is not read within \fItimeout\fP seconds.
 This option has no effect if \fBread\fP is not reading input from the
 terminal or a pipe.
 .TP
-.B \-u \fIfd\FP
+.B \-u \fIfd\fP
 Read input from file descriptor \fIfd\fP.
 .PD
 .PP
@@ -7435,7 +7536,10 @@ before execution resumes after the function or script.
 .TP
 \fBset\fP [\fB\-\-abefhkmnptuvxBCHP\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
 Without options, the name and value of each shell variable are displayed
-in a format that can be reused as input.
+in a format that can be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In \fIposix mode\fP, only shell variables are listed.
 The output is sorted according to the current locale.
 When options are specified, they set or unset shell attributes.
 Any arguments remaining after the options are processed are treated
@@ -7608,7 +7712,7 @@ This option is disabled by default.
 Change the behavior of
 .B bash
 where the default operation differs
-from the POSIX 1003.2 standard to match the standard (\fI`posix mode\fP).
+from the POSIX 1003.2 standard to match the standard (\fIposix mode\fP).
 .TP 8
 .B privileged
 Same as
@@ -7722,9 +7826,11 @@ follows the logical chain of directories when performing commands
 which change the current directory.
 .TP 8
 .B \-T
-If set, any trap on \fBDEBUG\fP is inherited by shell functions, command
-substitutions, and commands executed in a subshell environment.
-The \fBDEBUG\fP trap is normally not inherited in such cases.
+If set, any traps on \fBDEBUG\fP and \fBRETURN\fP are inherited by shell
+functions, command substitutions, and commands executed in a
+subshell environment.
+The \fBDEBUG\fP and \fBRETURN\fP traps are normally not inherited
+in such cases.
 .TP 8
 .B \-\-
 If no arguments follow this option, then the positional parameters are
@@ -7904,6 +8010,20 @@ If the command run by the \fBDEBUG\fP trap returns a value of 2, and the
 shell is executing in a subroutine (a shell function or a shell script
 executed by the \fB.\fP or \fBsource\fP builtins), a call to
 \fBreturn\fP is simulated.
+.TP
+.B 4.
+\fBBASH_ARGC\fP and \fBBASH_ARGV\fP are updated as described in their
+descriptions above.
+.TP
+.B 5.
+Function tracing is enabled:  command substitution, shell functions, and
+subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
+\fBDEBUG\fP and \fBRETURN\fP traps.
+.TP
+.B 6.
+Error tracing is enabled:  command substitution, shell functions, and
+subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
+\fBERROR\fP trap.
 .RE
 .TP 8
 .B extglob
@@ -8013,6 +8133,12 @@ expansion (see
 .B Pathname Expansion
 above).
 .TP 8
+.B nocasematch
+If set,
+.B bash
+matches patterns in a case\-insensitive fashion when performing matching
+while executing \fBcase\fP or \fB[[\fP conditional commands.
+.TP 8
 .B nullglob
 If set,
 .B bash
@@ -8086,6 +8212,8 @@ Each operator and operand must be a separate argument.
 Expressions are composed of the primaries described above under
 .SM
 .BR "CONDITIONAL EXPRESSIONS" .
+\fBtest\fP does not accept any options, nor does it accept and ignore
+an argument of \fB\-\-\fP as signifying the end of options.
 .if t .sp 0.5
 .if n .sp 1
 Expressions may be combined using the following operators, listed
@@ -8232,7 +8360,7 @@ command, and before the first command executes in a shell function (see
 .SM
 .B SHELL GRAMMAR
 above).
-Refer to the description of the \fBextglob\fP option to the
+Refer to the description of the \fBextdebug\fP option to the
 \fBshopt\fP builtin for details of its effect on the \fBDEBUG\fP trap.
 If a
 .I sigspec
@@ -8487,8 +8615,7 @@ refers to a shell variable.
 Read-only variables may not be unset.
 If
 .B \-f
-is specifed, 
-each
+is specified, each
 .I name
 refers to a shell function, and the function definition
 is removed.
@@ -8515,9 +8642,9 @@ subsequently reset.  The exit status is true unless a
 .I name
 is readonly.
 .TP
-\fBwait\fP [\fIn\fP]
-Wait for the specified process and return its termination
-status.
+\fBwait\fP [\fIn ...\fP]
+Wait for each specified process and return its termination status.
+Each
 .I n
 may be a process
 ID or a job specification; if a job spec is given, all processes
@@ -8661,7 +8788,7 @@ bfox@gnu.org
 .PP
 Chet Ramey, Case Western Reserve University
 .br
-chet@po.CWRU.Edu
+chet@po.cwru.edu
 .SH BUG REPORTS
 If you find a bug in
 .B bash,
@@ -8702,7 +8829,7 @@ it provides for filing a bug report.
 .PP
 Comments and bug reports concerning
 this manual page should be directed to
-.IR chet@po.CWRU.Edu .
+.IR chet@po.cwru.edu .
 .SH BUGS
 .PP
 It's too big and too slow.
index 650361b..ce029be 100644 (file)
@@ -2,12 +2,12 @@ This is bashref.info, produced by makeinfo version 4.7 from
 /Users/chet/src/bash/src/doc/bashref.texi.
 
    This text is a brief description of the features that are present in
-the Bash shell (version 3.0, 27 July 2004).
+the Bash shell (version 3.1-beta1, 5 September 2005).
 
-   This is Edition 3.0, last updated 27 July 2004, of `The GNU Bash
-Reference Manual', for `Bash', Version 3.0.
+   This is Edition 3.1-beta1, last updated 5 September 2005, of `The
+GNU Bash Reference Manual', for `Bash', Version 3.1-beta1.
 
-   Copyright (C) 1988-2004 Free Software Foundation, Inc.
+   Copyright (C) 1988-2005 Free Software Foundation, Inc.
 
    Permission is granted to make and distribute verbatim copies of this
 manual provided the copyright notice and this permission notice are
@@ -37,10 +37,10 @@ Bash Features
 *************
 
 This text is a brief description of the features that are present in
-the Bash shell (version 3.0, 27 July 2004)..
+the Bash shell (version 3.1-beta1, 5 September 2005)..
 
-   This is Edition 3.0, last updated 27 July 2004, of `The GNU Bash
-Reference Manual', for `Bash', Version 3.0.
+   This is Edition 3.1-beta1, last updated 5 September 2005, of `The
+GNU Bash Reference Manual', for `Bash', Version 3.1-beta1.
 
    Bash contains features that appear in other popular shells, and some
 features that only appear in Bash.  Some of the shells that Bash has
@@ -56,46 +56,28 @@ on shell behavior.
 * Menu:
 
 * Introduction::               An introduction to the shell.
-
 * Definitions::                        Some definitions used in the rest of this
                                manual.
-
 * Basic Shell Features::       The shell "building blocks".
-
 * Shell Builtin Commands::     Commands that are a part of the shell.
-
 * Shell Variables::            Variables used or set by Bash.
-
 * Bash Features::              Features found only in Bash.
-
-* Job Control::                        A chapter describing what job control is
-                               and how Bash allows you to use it.
-
-* Using History Interactively::        Chapter dealing with history expansion
-                               rules.
-
+* Job Control::                        What job control is and how Bash allows you
+                               to use it.
+* Using History Interactively::        Command History Expansion
 * Command Line Editing::       Chapter describing the command line
                                editing features.
-
 * Installing Bash::            How to build and install Bash on your system.
-
 * Reporting Bugs::             How to report bugs in Bash.
-
 * Major Differences From The Bourne Shell::    A terse list of the differences
                                                between Bash and historical
                                                versions of /bin/sh.
-
 * Copying This Manual::                Copying this manual.
-
 * Builtin Index::              Index of Bash builtin commands.
-
 * Reserved Word Index::                Index of Bash reserved words.
-
 * Variable Index::             Quick reference helps you find the
                                variable you want.
-
 * Function Index::             Index of bindable Readline functions.
-
 * Concept Index::              General index for concepts described in
                                this manual.
 
@@ -108,7 +90,6 @@ File: bashref.info,  Node: Introduction,  Next: Definitions,  Prev: Top,  Up: To
 * Menu:
 
 * What is Bash?::              A short description of Bash.
-
 * What is a shell?::           A brief introduction to shells.
 
 \1f
@@ -313,9 +294,7 @@ File: bashref.info,  Node: Shell Syntax,  Next: Shell Commands,  Up: Basic Shell
 * Menu:
 
 * Shell Operation::    The basic operation of the shell.
-
 * Quoting::            How to remove the special meaning from characters.
-
 * Comments::           How to specify comments.
 
    When the shell reads input, it proceeds through a sequence of
@@ -382,7 +361,6 @@ File: bashref.info,  Node: Quoting,  Next: Comments,  Prev: Shell Operation,  Up
 * Double Quotes::      How to suppress most of the interpretation of a
                        sequence of characters.
 * ANSI-C Quoting::     How to expand ANSI-C sequences in quoted strings.
-
 * Locale Translation:: How to translate strings into different languages.
 
    Quoting is used to remove the special meaning of certain characters
@@ -392,10 +370,10 @@ recognized as such, and to prevent parameter expansion.
 
    Each of the shell metacharacters (*note Definitions::) has special
 meaning to the shell and must be quoted if it is to represent itself.
-When the command history expansion facilities are being used, the
-HISTORY EXPANSION character, usually `!', must be quoted to prevent
-history expansion.  *Note Bash History Facilities::, for more details
-concerning history expansion.
+When the command history expansion facilities are being used (*note
+History Interaction::), the HISTORY EXPANSION character, usually `!',
+must be quoted to prevent history expansion.  *Note Bash History
+Facilities::, for more details concerning history expansion.
 
    There are three quoting mechanisms: the ESCAPE CHARACTER, single
 quotes, and double quotes.
@@ -431,15 +409,17 @@ File: bashref.info,  Node: Double Quotes,  Next: ANSI-C Quoting,  Prev: Single Q
 
 Enclosing characters in double quotes (`"') preserves the literal value
 of all characters within the quotes, with the exception of `$', ``',
-and `\'.  The characters `$' and ``' retain their special meaning
-within double quotes (*note Shell Expansions::).  The backslash retains
-its special meaning only when followed by one of the following
-characters: `$', ``', `"', `\', or `newline'.  Within double quotes,
-backslashes that are followed by one of these characters are removed.
-Backslashes preceding characters without a special meaning are left
-unmodified.  A double quote may be quoted within double quotes by
-preceding it with a backslash.  When command history is being used, the
-double quote may not be used to quote the history expansion character.
+`\', and, when history expansion is enabled, `!'.  The characters `$'
+and ``' retain their special meaning within double quotes (*note Shell
+Expansions::).  The backslash retains its special meaning only when
+followed by one of the following characters: `$', ``', `"', `\', or
+`newline'.  Within double quotes, backslashes that are followed by one
+of these characters are removed.  Backslashes preceding characters
+without a special meaning are left unmodified.  A double quote may be
+quoted within double quotes by preceding it with a backslash.  If
+enabled, history expansion will be performed unless an `!' appearing in
+double quotes is escaped using a backslash.  The backslash preceding
+the `!' is not removed.
 
    The special parameters `*' and `@' have special meaning when in
 double quotes (*note Shell Parameter Expansion::).
@@ -768,7 +748,10 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
           `case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]... esac'
 
      `case' will selectively execute the COMMAND-LIST corresponding to
-     the first PATTERN that matches WORD.  The `|' is used to separate
+     the first PATTERN that matches WORD.  If the shell option
+     `nocasematch' (see the description of `shopt' in *Note Bash
+     Builtins::) is enabled, the match is performed without regard to
+     the case of alphabetic characters.  The `|' is used to separate
      multiple patterns, and the `)' operator terminates a pattern list.
      A list of patterns and an associated command-list is known as a
      CLAUSE.  Each clause must be terminated with `;;'.  The WORD
@@ -854,8 +837,11 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
 
      When the `==' and `!=' operators are used, the string to the right
      of the operator is considered a pattern and matched according to
-     the rules described below in *Note Pattern Matching::.  The return
-     value is 0 if the string matches or does not match the pattern,
+     the rules described below in *Note Pattern Matching::.  If the
+     shell option `nocasematch' (see the description of `shopt' in
+     *Note Bash Builtins::) is enabled, the match is performed without
+     regard to the case of alphabetic characters.  The return value is
+     0 if the string matches or does not match the pattern,
      respectively, and 1 otherwise.  Any part of the pattern may be
      quoted to force it to be matched as a string.
 
@@ -865,7 +851,7 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
      and matched accordingly (as in regex3)).  The return value is 0 if
      the string matches the pattern, and 1 otherwise.  If the regular
      expression is syntactically incorrect, the conditional
-     expression's return value is 2.  If the shell option `nocaseglob'
+     expression's return value is 2.  If the shell option `nocasematch'
      (see the description of `shopt' in *Note Bash Builtins::) is
      enabled, the match is performed without regard to the case of
      alphabetic characters.  Substrings matched by parenthesized
@@ -978,11 +964,11 @@ parameter `0' is unchanged.  The first element of the `FUNCNAME'
 variable is set to the name of the function while the function is
 executing.  All other aspects of the shell execution environment are
 identical between a function and its caller with the exception that the
-`DEBUG' trap below) is not inherited unless the function has been given
-the `trace' attribute using the `declare' builtin or the `-o functrace'
-option has been enabled with the `set' builtin, (in which case all
-functions inherit the `DEBUG' trap).  *Note Bourne Shell Builtins::,
-for the description of the `trap' builtin.
+`DEBUG' and `RETURN' traps are not inherited unless the function has
+been given the `trace' attribute using the `declare' builtin or the `-o
+functrace' option has been enabled with the `set' builtin, (in which
+case all functions inherit the `DEBUG' and `RETURN' traps).  *Note
+Bourne Shell Builtins::, for the description of the `trap' builtin.
 
    If the builtin command `return' is executed in a function, the
 function completes and execution resumes with the next command after
@@ -1046,6 +1032,18 @@ expansion is not performed.  Assignment statements may also appear as
 arguments to the `alias', `declare', `typeset', `export', `readonly',
 and `local' builtin commands.
 
+   In the context where an assignment statement is assigning a value to
+a shell variable or array index (*note Arrays::), the `+=' operator can
+be used to append to or add to the variable's previous value.  When
+`+=' is applied to a variable for which the integer attribute has been
+set, VALUE is evaluated as an arithmetic expression and added to the
+variable's current value, which is also evaluated.  When `+=' is
+applied to an array variable using compound assignment (*note
+Arrays::), the variable's value is not unset (as it is when using `='),
+and new values are appended to the array beginning at one greater than
+the array's maximum index.  When applied to a string-valued variable,
+VALUE is expanded and appended to the variable's value.
+
 \1f
 File: bashref.info,  Node: Positional Parameters,  Next: Special Parameters,  Up: Shell Parameters
 
@@ -1088,8 +1086,12 @@ only be referenced; assignment to them is not allowed.
      Expands to the positional parameters, starting from one.  When the
      expansion occurs within double quotes, each parameter expands to a
      separate word.  That is, `"$@"' is equivalent to `"$1" "$2" ...'.
-     When there are no positional parameters, `"$@"' and `$@' expand to
-     nothing (i.e., they are removed).
+     If the double-quoted expansion occurs within a word, the expansion
+     of the first parameter is joined with the beginning part of the
+     original word, and the expansion of the last parameter is joined
+     with the last part of the original word.  When there are no
+     positional parameters, `"$@"' and `$@' expand to nothing (i.e.,
+     they are removed).
 
 `#'
      Expands to the number of positional parameters in decimal.
@@ -1121,13 +1123,13 @@ only be referenced; assignment to them is not allowed.
      invoke Bash, as given by argument zero.
 
 `_'
-     (An underscore.)  At shell startup, set to the absolute filename
-     of the shell or shell script being executed as passed in the
-     argument list.  Subsequently, expands to the last argument to the
-     previous command, after expansion.  Also set to the full pathname
-     of each command executed and placed in the environment exported to
-     that command.  When checking mail, this parameter holds the name
-     of the mail file.
+     (An underscore.)  At shell startup, set to the absolute pathname
+     used to invoke the shell or shell script being executed as passed
+     in the environment or argument list.  Subsequently, expands to the
+     last argument to the previous command, after expansion.  Also set
+     to the full pathname used to invoke each command executed and
+     placed in the environment exported to that command.  When checking
+     mail, this parameter holds the name of the mail file.
 
 \1f
 File: bashref.info,  Node: Shell Expansions,  Next: Redirections,  Prev: Shell Parameters,  Up: Basic Shell Features
@@ -1267,10 +1269,10 @@ without a leading `+' or `-', `+' is assumed.
 is left unchanged.
 
    Each variable assignment is checked for unquoted tilde-prefixes
-immediately following a `:' or `='.  In these cases, tilde expansion is
-also performed.  Consequently, one may use file names with tildes in
-assignments to `PATH', `MAILPATH', and `CDPATH', and the shell assigns
-the expanded value.
+immediately following a `:' or the first `='.  In these cases, tilde
+expansion is also performed.  Consequently, one may use file names with
+tildes in assignments to `PATH', `MAILPATH', and `CDPATH', and the
+shell assigns the expanded value.
 
    The following table shows how Bash treats unquoted tilde-prefixes:
 
@@ -1375,9 +1377,12 @@ if the colon is omitted, the operator tests only for existence.
      is `@', the result is LENGTH positional parameters beginning at
      OFFSET.  If PARAMETER is an array name indexed by `@' or `*', the
      result is the LENGTH members of the array beginning with
-     `${PARAMETER[OFFSET]}'.  Substring indexing is zero-based unless
-     the positional parameters are used, in which case the indexing
-     starts at 1.
+     `${PARAMETER[OFFSET]}'.  A negative OFFSET is taken relative to
+     one greater than the maximum index of the specified array.  Note
+     that a negative offset must be separated from the colon by at least
+     one space to avoid being confused with the `:-' expansion.
+     Substring indexing is zero-based unless the positional parameters
+     are used, in which case the indexing starts at 1.
 
 `${!PREFIX*}'
 `${!PREFIX@}'
@@ -1671,7 +1676,7 @@ of the following sub-patterns:
      Matches one or more occurrences of the given patterns.
 
 `@(PATTERN-LIST)'
-     Matches exactly one of the given patterns.
+     Matches one of the given patterns.
 
 `!(PATTERN-LIST)'
      Matches anything except one of the given patterns.
@@ -1749,6 +1754,10 @@ redirections, as described in the following table:
 
    A failure to open or create a file causes the redirection to fail.
 
+   Redirections using file descriptors greater than 9 should be used
+with care, as they may conflict with file descriptors the shell uses
+internally.
+
 3.6.1 Redirecting Input
 -----------------------
 
@@ -1895,18 +1904,13 @@ File: bashref.info,  Node: Executing Commands,  Next: Shell Scripts,  Prev: Redi
 
 * Simple Command Expansion::   How Bash expands simple commands before
                                executing them.
-
 * Command Search and Execution::       How Bash finds commands and runs them.
-
 * Command Execution Environment::      The environment in which Bash
                                        executes commands that are not
                                        shell builtins.
-
 * Environment::                The environment given to a command.
-
 * Exit Status::                The status returned by commands and how Bash
                        interprets it.
-
 * Signals::            What happens when Bash or a command it runs
                        receives a signal.
 
@@ -2264,6 +2268,8 @@ Completion Builtins::).
 
    Unless otherwise noted, each builtin command documented as accepting
 options preceded by `-' accepts `--' to signify the end of the options.
+For example, the `:', `true', `false', and `test' builtins do not
+accept options.
 
 \1f
 File: bashref.info,  Node: Bourne Shell Builtins,  Next: Bash Builtins,  Up: Shell Builtin Commands
@@ -2480,6 +2486,8 @@ standard.
      Evaluate a conditional expression EXPR.  Each operator and operand
      must be a separate argument.  Expressions are composed of the
      primaries described below in *Note Bash Conditional Expressions::.
+     `test' does not accept any options, nor does it accept and ignore
+     an argument of `--' as signifying the end of options.
 
      When the `[' form is used, the last argument to the command must
      be a `]'.
@@ -2780,8 +2788,8 @@ POSIX 1003.2 standard.
 
     `-t'
           Give each NAME the `trace' attribute.  Traced functions
-          inherit the `DEBUG' trap from the calling shell.  The trace
-          attribute has no special meaning for variables.
+          inherit the `DEBUG' and `RETURN' traps from the calling shell.
+          The trace attribute has no special meaning for variables.
 
     `-x'
           Mark each NAME for export to subsequent commands via the
@@ -2812,7 +2820,10 @@ POSIX 1003.2 standard.
      escape characters, even on systems where they are interpreted by
      default.  The `xpg_echo' shell option may be used to dynamically
      determine whether or not `echo' expands these escape characters by
-     default.  `echo' interprets the following escape sequences:
+     default.  `echo' does not interpret `--' to mean the end of
+     options.
+
+     `echo' interprets the following escape sequences:
     `\a'
           alert (bell)
 
@@ -2914,7 +2925,7 @@ POSIX 1003.2 standard.
      Exit a login shell, returning a status of N to the shell's parent.
 
 `printf'
-          `printf' FORMAT [ARGUMENTS]
+          `printf' [-v VAR] FORMAT [ARGUMENTS]
      Write the formatted ARGUMENTS to the standard output under the
      control of the FORMAT.  The FORMAT is a character string which
      contains three types of objects: plain characters, which are
@@ -2929,6 +2940,9 @@ POSIX 1003.2 standard.
      and `%q' causes `printf' to output the corresponding ARGUMENT in a
      format that can be reused as shell input.
 
+     The `-v' option causes the output to be assigned to the variable
+     VAR rather than being printed to the standard output.
+
      The FORMAT is reused as necessary to consume all of the ARGUMENTS.
      If the FORMAT requires more ARGUMENTS than are supplied, the extra
      format specifications behave as if a zero value or null string, as
@@ -3092,6 +3106,17 @@ POSIX 1003.2 standard.
                shell function or a shell script executed by the `.' or
                `source' builtins), a call to `return' is simulated.
 
+            4. `BASH_ARGC' and `BASH_ARGV' are updated as described in
+               their descriptions (*note Bash Variables::).
+
+            5. Function tracing is enabled:  command substitution,
+               shell functions, and subshells invoked with `( COMMAND
+               )' inherit the `DEBUG' and `RETURN' traps.
+
+            6. Error tracing is enabled:  command substitution, shell
+               functions, and subshells invoked with `( COMMAND )'
+               inherit the `ERROR' trap.
+
     `extglob'
           If set, the extended pattern matching features described above
           (*note Pattern Matching::) are enabled.
@@ -3169,6 +3194,11 @@ POSIX 1003.2 standard.
           If set, Bash matches filenames in a case-insensitive fashion
           when performing filename expansion.
 
+    `nocasematch'
+          If set, Bash matches patterns in a case-insensitive fashion
+          when performing matching while executing `case' or `[['
+          conditional commands.
+
     `nullglob'
           If set, Bash allows filename patterns which match no files to
           expand to a null string, rather than themselves.
@@ -3334,7 +3364,10 @@ This builtin is so complicated that it deserves its own section.
 
      If no options or arguments are supplied, `set' displays the names
      and values of all shell variables and functions, sorted according
-     to the current locale, in a format that may be reused as input.
+     to the current locale, in a format that may be reused as input for
+     setting or resetting the currently-set variables.  Read-only
+     variables cannot be reset.  In POSIX mode, only shell variables
+     are listed.
 
      When options are supplied, they set or unset shell attributes.
      Options, if specified, have the following meanings:
@@ -3540,10 +3573,10 @@ This builtin is so complicated that it deserves its own section.
                /usr/local
 
     `-T'
-          If set, any trap on `DEBUG' is inherited by shell functions,
-          command substitutions, and commands executed in a subshell
-          environment.  The `DEBUG' trap is normally not inherited in
-          such cases.
+          If set, any trap on `DEBUG' and `RETURN' are inherited by
+          shell functions, command substitutions, and commands executed
+          in a subshell environment.  The `DEBUG' and `RETURN' traps
+          are normally not inherited in such cases.
 
     `--'
           If no arguments follow this option, then the positional
@@ -3690,14 +3723,19 @@ Variables::).
      parameters to the current subroutine (shell function or script
      executed with `.' or `source') is at the top of the stack.  When a
      subroutine is executed, the number of parameters passed is pushed
-     onto `BASH_ARGC'.
+     onto `BASH_ARGC'.  The shell sets `BASH_ARGC' only when in
+     extended debugging mode (see *Note Bash Builtins:: for a
+     description of the `extdebug' option to the `shopt' builtin).
 
 `BASH_ARGV'
      An array variable containing all of the parameters in the current
      bash execution call stack.  The final parameter of the last
      subroutine call is at the top of the stack; the first parameter of
      the initial call is at the bottom.  When a subroutine is executed,
-     the parameters supplied are pushed onto `BASH_ARGV'.
+     the parameters supplied are pushed onto `BASH_ARGV'.  The shell
+     sets `BASH_ARGV' only when in extended debugging mode (see *Note
+     Bash Builtins:: for a description of the `extdebug' option to the
+     `shopt' builtin).
 
 `BASH_COMMAND'
      The command currently being executed or about to be executed,
@@ -3717,9 +3755,9 @@ Variables::).
      An array variable whose members are the line numbers in source
      files corresponding to each member of FUNCNAME.
      `${BASH_LINENO[$i]}' is the line number in the source file where
-     `${FUNCNAME[$i + 1]}' was called.  The corresponding source file
-     name is `${BASH_SOURCE[$i + 1]}'.  Use `LINENO' to obtain the
-     current line number.
+     `${FUNCNAME[$i]}' was called.  The corresponding source file name
+     is `${BASH_SOURCE[$i]}'.  Use `LINENO' to obtain the current line
+     number.
 
 `BASH_REMATCH'
      An array variable whose members are assigned by the `=~' binary
@@ -4141,6 +4179,10 @@ Variables::).
      the shell is interactive.  Bash terminates after that number of
      seconds if input does not arrive.
 
+`TMPDIR'
+     If set, Bash uses its value as the name of a directory in which
+     Bash creates temporary files for the shell's use.
+
 `UID'
      The numeric real user id of the current user.  This variable is
      readonly.
@@ -4195,7 +4237,7 @@ the single-character options to be recognized.
 
 `--dump-po-strings'
      A list of all double-quoted strings preceded by `$' is printed on
-     the standard ouput in the GNU `gettext' PO (portable object) file
+     the standard output in the GNU `gettext' PO (portable object) file
      format.  Equivalent to `-D' except for the output format.
 
 `--dump-strings'
@@ -4276,7 +4318,7 @@ invocation which are not available with the `set' builtin.
 
 `-D'
      A list of all double-quoted strings preceded by `$' is printed on
-     the standard ouput.  These are the strings that are subject to
+     the standard output.  These are the strings that are subject to
      language translation when the current locale is not `C' or `POSIX'
      (*note Locale Translation::).  This implies the `-n' option; no
      commands will be executed.
@@ -4577,6 +4619,10 @@ checked.  If the FILE argument to one of the primaries is one of
 `/dev/stdin', `/dev/stdout', or `/dev/stderr', file descriptor 0, 1, or
 2, respectively, is checked.
 
+   Unless otherwise specified, primaries that operate on files follow
+symbolic links and operate on the target of the link, rather than the
+link itself.
+
 `-a FILE'
      True if FILE exists.
 
@@ -4775,7 +4821,7 @@ representing the arithmetic base, and N is a number in that base.  If
 BASE`#' is omitted, then base 10 is used.  The digits greater than 9
 are represented by the lowercase letters, the uppercase letters, `@',
 and `_', in that order.  If BASE is less than or equal to 36, lowercase
-and uppercase letters may be used interchangably to represent numbers
+and uppercase letters may be used interchangeably to represent numbers
 between 10 and 35.
 
    Operators are evaluated in order of precedence.  Sub-expressions in
@@ -4878,16 +4924,21 @@ the word is double-quoted, `${name[*]}' expands to a single word with
 the value of each array member separated by the first character of the
 `IFS' variable, and `${name[@]}' expands each element of NAME to a
 separate word.  When there are no array members, `${name[@]}' expands
-to nothing.  This is analogous to the expansion of the special
-parameters `@' and `*'.  `${#name['SUBSCRIPT`]}' expands to the length
-of `${name['SUBSCRIPT`]}'.  If SUBSCRIPT is `@' or `*', the expansion
-is the number of elements in the array.  Referencing an array variable
-without a subscript is equivalent to referencing element zero.
+to nothing.  If the double-quoted expansion occurs within a word, the
+expansion of the first parameter is joined with the beginning part of
+the original word, and the expansion of the last parameter is joined
+with the last part of the original word.  This is analogous to the
+expansion of the special parameters `@' and `*'.
+`${#name['SUBSCRIPT`]}' expands to the length of `${name['SUBSCRIPT`]}'.
+If SUBSCRIPT is `@' or `*', the expansion is the number of elements in
+the array.  Referencing an array variable without a subscript is
+equivalent to referencing element zero.
 
    The `unset' builtin is used to destroy arrays.  `unset'
-NAME[SUBSCRIPT] destroys the array element at index SUBSCRIPT.  `unset'
-NAME, where NAME is an array, removes the entire array. A subscript of
-`*' or `@' also removes the entire array.
+NAME[SUBSCRIPT] destroys the array element at index SUBSCRIPT.  Care
+must be taken to avoid unwanted side effects caused by filename
+generation.  `unset' NAME, where NAME is an array, removes the entire
+array. A subscript of `*' or `@' also removes the entire array.
 
    The `declare', `local', and `readonly' builtins each accept a `-a'
 option to specify an array.  The `read' builtin accepts a `-a' option
@@ -5190,58 +5241,59 @@ startup files.
      is stopped is `Stopped(SIGNAME)', where SIGNAME is, for example,
      `SIGTSTP'.
 
-  4. Reserved words may not be aliased.
+  4. The `bg' builtin uses the required format to describe each job
+     placed in the background, which does not include an indication of
+     whether the job is the current or previous job.
+
+  5. Reserved words appearing in a context where reserved words are
+     recognized do not undergo alias expansion.
 
-  5. The POSIX 1003.2 `PS1' and `PS2' expansions of `!' to the history
+  6. The POSIX 1003.2 `PS1' and `PS2' expansions of `!' to the history
      number and `!!' to `!' are enabled, and parameter expansion is
      performed on the values of `PS1' and `PS2' regardless of the
      setting of the `promptvars' option.
 
-  6. The POSIX 1003.2 startup files are executed (`$ENV') rather than
+  7. The POSIX 1003.2 startup files are executed (`$ENV') rather than
      the normal Bash files.
 
-  7. Tilde expansion is only performed on assignments preceding a
+  8. Tilde expansion is only performed on assignments preceding a
      command name, rather than on all assignment statements on the line.
 
-  8. The default history file is `~/.sh_history' (this is the default
+  9. The default history file is `~/.sh_history' (this is the default
      value of `$HISTFILE').
 
 9. The output of `kill -l' prints all the signal names on a single
10. The output of `kill -l' prints all the signal names on a single
      line, separated by spaces, without the `SIG' prefix.
 
- 10. The `kill' builtin does not accept signal names with a `SIG'
+ 11. The `kill' builtin does not accept signal names with a `SIG'
      prefix.
 
- 11. Non-interactive shells exit if FILENAME in `.' FILENAME is not
+ 12. Non-interactive shells exit if FILENAME in `.' FILENAME is not
      found.
 
- 12. Non-interactive shells exit if a syntax error in an arithmetic
+ 13. Non-interactive shells exit if a syntax error in an arithmetic
      expansion results in an invalid expression.
 
- 13. Redirection operators do not perform filename expansion on the word
+ 14. Redirection operators do not perform filename expansion on the word
      in the redirection unless the shell is interactive.
 
- 14. Redirection operators do not perform word splitting on the word in
+ 15. Redirection operators do not perform word splitting on the word in
      the redirection.
 
- 15. Function names must be valid shell `name's.  That is, they may not
+ 16. Function names must be valid shell `name's.  That is, they may not
      contain characters other than letters, digits, and underscores, and
      may not start with a digit.  Declaring a function with an invalid
      name causes a fatal syntax error in non-interactive shells.
 
- 16. POSIX 1003.2 `special' builtins are found before shell functions
+ 17. POSIX 1003.2 special builtins are found before shell functions
      during command lookup.
 
- 17. If a POSIX 1003.2 special builtin returns an error status, a
+ 18. If a POSIX 1003.2 special builtin returns an error status, a
      non-interactive shell exits.  The fatal errors are those listed in
      the POSIX.2 standard, and include things like passing incorrect
      options, redirection errors, variable assignment errors for
      assignments preceding the command name, and so on.
 
- 18. If the `cd' builtin finds a directory to change to using
-     `$CDPATH', the value it assigns to the `PWD' variable does not
-     contain any symbolic links, as if `cd -P' had been executed.
-
  19. If `CDPATH' is set, the `cd' builtin will not implicitly append
      the current directory to it.  This means that `cd' will fail if no
      valid directory name can be constructed from any of the entries in
@@ -5273,9 +5325,10 @@ startup files.
 
  27. The `trap' builtin doesn't check the first argument for a possible
      signal specification and revert the signal handling to the original
-     disposition if it is.  If users want to reset the handler for a
-     given signal to the original disposition, they should use `-' as
-     the first argument.
+     disposition if it is, unless that argument consists solely of
+     digits and is a valid signal number.  If users want to reset the
+     handler for a given signal to the original disposition, they
+     should use `-' as the first argument.
 
  28. The `.' and `source' builtins do not search the current directory
      for the filename argument if it is not found by searching `PATH'.
@@ -5302,21 +5355,46 @@ startup files.
      argument does not refer to an existing directory, `cd' will fail
      instead of falling back to PHYSICAL mode.
 
-   There is other POSIX 1003.2 behavior that Bash does not implement.
-Specifically:
+ 35. When the `pwd' builtin is supplied the `-P' option, it resets
+     `$PWD' to a pathname containing no symlinks.
+
+ 36. The `pwd' builtin verifies that the value it prints is the same as
+     the current directory, even if it is not asked to check the file
+     system with the `-P' option.
+
+ 37. When listing the history, the `fc' builtin does not include an
+     indication of whether or not a history entry has been modified.
+
+ 38. The default editor used by `fc' is `ed'.
+
+ 39. The `type' and `command' builtins will not report a non-executable
+     file as having been found, though the shell will attempt to
+     execute such a file if it is the only so-named file found in
+     `$PATH'.
 
-  1. Assignment statements affect the execution environment of all
-     builtins, not just special ones.
+ 40. The `vi' editing mode will invoke the `vi' editor directly when
+     the `v' command is run, instead of checking `$FCEDIT' and
+     `$EDITOR'.
 
-  2. When a subshell is created to execute a shell script with execute
-     permission, but without a leading `#!', Bash sets `$0' to the full
-     pathname of the script as found by searching `$PATH', rather than
-     the command as typed by the user.
+ 41. When the `xpg_echo' option is enabled, Bash does not attempt to
+     interpret any arguments to `echo' as options.  Each argument is
+     displayed, after escape characters are converted.
 
-  3. When using `.' to source a shell script found in `$PATH', bash
-     checks execute permission bits rather than read permission bits,
-     just as if it were searching for a command.
 
+   There is other POSIX 1003.2 behavior that Bash does not implement by
+default even when in POSIX mode.  Specifically:
+
+  1. The `fc' builtin checks `$EDITOR' as a program to edit history
+     entries if `FCEDIT' is unset, rather than defaulting directly to
+     `ed'.  `fc' uses `ed' if `EDITOR' is unset.
+
+  2. As noted above, Bash requires the `xpg_echo' option to be enabled
+     for the `echo' builtin to be fully conformant.
+
+
+   Bash can be configured to be POSIX-conformant by default, by
+specifying the `--enable-strict-posix-default' to `configure' when
+building (*note Optional Features::).
 
 \1f
 File: bashref.info,  Node: Job Control,  Next: Using History Interactively,  Prev: Bash Features,  Up: Top
@@ -5386,9 +5464,10 @@ character `%' introduces a job name.
 
    Job number `n' may be referred to as `%n'.  The symbols `%%' and
 `%+' refer to the shell's notion of the current job, which is the last
-job stopped while it was in the foreground or started in the
-background.  The previous job may be referenced using `%-'.  In output
-pertaining to jobs (e.g., the output of the `jobs' command), the
+job stopped while it was in the foreground or started in the background.
+A single `%' (with no accompanying job specification) also refers to
+the current job.  The previous job may be referenced using `%-'.  In
+output pertaining to jobs (e.g., the output of the `jobs' command), the
 current job is always flagged with a `+', and the previous job with a
 `-'.
 
@@ -5424,13 +5503,13 @@ File: bashref.info,  Node: Job Control Builtins,  Next: Job Control Variables,
 ========================
 
 `bg'
-          bg [JOBSPEC]
-     Resume the suspended job JOBSPEC in the background, as if it had
+          bg [JOBSPEC ...]
+     Resume each suspended job JOBSPEC in the background, as if it had
      been started with `&'.  If JOBSPEC is not supplied, the current
      job is used.  The return status is zero unless it is run when job
-     control is not enabled, or, when run with job control enabled, if
-     JOBSPEC was not found or JOBSPEC specifies a job that was started
-     without job control.
+     control is not enabled, or, when run with job control enabled, any
+     JOBSPEC was not found or specifies a job that was started without
+     job control.
 
 `fg'
           fg [JOBSPEC]
@@ -5490,11 +5569,11 @@ File: bashref.info,  Node: Job Control Builtins,  Next: Job Control Variables,
      occurs or an invalid option is encountered.
 
 `wait'
-          wait [JOBSPEC or PID]
-     Wait until the child process specified by process ID PID or job
-     specification JOBSPEC exits and return the exit status of the last
-     command waited for.  If a job spec is given, all processes in the
-     job are waited for.  If no arguments are given, all currently
+          wait [JOBSPEC or PID ...]
+     Wait until the child process specified by each process ID PID or
+     job specification JOBSPEC exits and return the exit status of the
+     last command waited for.  If a job spec is given, all processes in
+     the job are waited for.  If no arguments are given, all currently
      active child processes are waited for, and the return status is
      zero.  If neither JOBSPEC nor PID specifies an active child process
      of the shell, the return status is 127.
@@ -5878,7 +5957,11 @@ Variable Settings
           set editing-mode vi
 
      Variable names and values, where appropriate, are recognized
-     without regard to case.
+     without regard to case.  Unrecognized variable names are ignored.
+
+     Boolean variables (those that can be set to on or off) are set to
+     on if the value is null or empty, ON (case-insensitive), or 1.
+     Any other value results in the variable being set to off.
 
      The `bind -V' command lists the current Readline variable names
      and values.  *Note Bash Builtins::.
@@ -5893,6 +5976,11 @@ Variable Settings
           one is available.  If set to `audible' (the default),
           Readline attempts to ring the terminal's bell.
 
+    `bind-tty-special-chars'
+          If set to `on', Readline attempts to bind the control
+          characters treated specially by the kernel's terminal driver
+          to their Readline equivalents.
+
     `comment-begin'
           The string to insert at the beginning of the line when the
           `insert-comment' command is executed.  The default value is
@@ -5910,7 +5998,8 @@ Variable Settings
           than this value, Readline will ask the user whether or not he
           wishes to view them; otherwise, they are simply listed.  This
           variable must be set to an integer value greater than or
-          equal to 0.  The default limit is `100'.
+          equal to 0.  A negative value means Readline should never ask.
+          The default limit is `100'.
 
     `convert-meta'
           If set to `on', Readline will convert characters with the
@@ -5938,9 +6027,10 @@ Variable Settings
           If set to `on', tilde expansion is performed when Readline
           attempts word completion.  The default is `off'.
 
+    `history-preserve-point'
           If set to `on', the history code attempts to place point at
           the same location on each history line retrieved with
-          `previous-history' or `next-history'.
+          `previous-history' or `next-history'.  The default is `off'.
 
     `horizontal-scroll-mode'
           This variable can be set to either `on' or `off'.  Setting it
@@ -6443,14 +6533,17 @@ File: bashref.info,  Node: Commands For History,  Next: Commands For Text,  Prev
      second word on the previous line) at point.  With an argument N,
      insert the Nth word from the previous command (the words in the
      previous command begin with word 0).  A negative argument inserts
-     the Nth word from the end of the previous command.
+     the Nth word from the end of the previous command.  Once the
+     argument N is computed, the argument is extracted as if the `!N'
+     history expansion had been specified.
 
 `yank-last-arg (M-. or M-_)'
      Insert last argument to the previous command (the last word of the
      previous history entry).  With an argument, behave exactly like
      `yank-nth-arg'.  Successive calls to `yank-last-arg' move back
      through the history list, inserting the last argument of each line
-     in turn.
+     in turn.  The history expansion facilities are used to extract the
+     last argument, as if the `!$' history expansion had been specified.
 
 
 \1f
@@ -6911,12 +7004,11 @@ variable is used.
 considered.  The string is first split using the characters in the `IFS'
 special variable as delimiters.  Shell quoting is honored.  Each word
 is then expanded using brace expansion, tilde expansion, parameter and
-variable expansion, command substitution, arithmetic expansion, and
-pathname expansion, as described above (*note Shell Expansions::).  The
-results are split using the rules described above (*note Word
-Splitting::).  The results of the expansion are prefix-matched against
-the word being completed, and the matching words become the possible
-completions.
+variable expansion, command substitution, and arithmetic expansion, as
+described above (*note Shell Expansions::).  The results are split
+using the rules described above (*note Word Splitting::).  The results
+of the expansion are prefix-matched against the word being completed,
+and the matching words become the possible completions.
 
    After these matches have been generated, any shell function or
 command specified with the `-F' and `-C' options is invoked.  When the
@@ -7058,6 +7150,12 @@ completion facilities.
                Tell Readline not to append a space (the default) to
                words completed at the end of the line.
 
+         `plusdirs'
+               After any matches defined by the compspec are generated,
+               directory name completion is attempted and any matches
+               are added to the results of the other actions.
+
+
     `-A ACTION'
           The ACTION may be one of the following to generate a list of
           possible completions:
@@ -7567,23 +7665,16 @@ MS-DOS, OS/2, and Windows platforms.
 * Menu:
 
 * Basic Installation:: Installation instructions.
-
 * Compilers and Options::      How to set special options for various
                                systems.
-
 * Compiling For Multiple Architectures::       How to compile Bash for more
                                                than one kind of system from
                                                the same source tree.
-
 * Installation Names:: How to set the various paths used by the installation.
-
 * Specifying the System Type:: How to configure Bash for a particular system.
-
 * Sharing Defaults::   How to share default configuration values among GNU
                        programs.
-
 * Operation Controls:: Options recognized by the configuration program.
-
 * Optional Features::  How to enable and disable optional features when
                        building Bash.
 
@@ -7806,13 +7897,14 @@ that the Bash `configure' recognizes.
      Define if you are using the Andrew File System from Transarc.
 
 `--with-bash-malloc'
-     Use the Bash version of `malloc' in `lib/malloc/malloc.c'.  This
-     is not the same `malloc' that appears in GNU libc, but an older
-     version derived from the 4.2 BSD `malloc'.  This `malloc' is very
-     fast, but wastes some space on each allocation.  This option is
-     enabled by default.  The `NOTES' file contains a list of systems
-     for which this should be turned off, and `configure' disables this
-     option automatically for a number of systems.
+     Use the Bash version of `malloc' in the directory `lib/malloc'.
+     This is not the same `malloc' that appears in GNU libc, but an
+     older version originally derived from the 4.2 BSD `malloc'.  This
+     `malloc' is very fast, but wastes some space on each allocation.
+     This option is enabled by default.  The `NOTES' file contains a
+     list of systems for which this should be turned off, and
+     `configure' disables this option automatically for a number of
+     systems.
 
 `--with-curses'
      Use the curses library instead of the termcap library.  This should
@@ -7825,7 +7917,7 @@ that the Bash `configure' recognizes.
 `--with-installed-readline[=PREFIX]'
      Define this to make Bash link with a locally-installed version of
      Readline rather than the version in `lib/readline'.  This works
-     only with Readline 4.3 and later versions.  If PREFIX is `yes' or
+     only with Readline 5.0 and later versions.  If PREFIX is `yes' or
      not supplied, `configure' uses the values of the make variables
      `includedir' and `libdir', which are subdirectories of `prefix' by
      default, to find the installed version of Readline if it is not in
@@ -7906,6 +7998,9 @@ does not provide the necessary support.
      `=~' binary operator in the `[[' conditional command.  (*note
      Conditional Constructs::).
 
+`--enable-debugger'
+     Include support for the bash debugger (distributed separately).
+
 `--enable-directory-stack'
      Include support for a `csh'-like directory stack and the `pushd',
      `popd', and `dirs' builtins (*note The Directory Stack::).
@@ -7949,17 +8044,17 @@ does not provide the necessary support.
      This enables process substitution (*note Process Substitution::) if
      the operating system provides the necessary support.
 
+`--enable-progcomp'
+     Enable the programmable completion facilities (*note Programmable
+     Completion::).  If Readline is not enabled, this option has no
+     effect.
+
 `--enable-prompt-string-decoding'
      Turn on the interpretation of a number of backslash-escaped
      characters in the `$PS1', `$PS2', `$PS3', and `$PS4' prompt
      strings.  See *Note Printing a Prompt::, for a complete list of
      prompt string escape sequences.
 
-`--enable-progcomp'
-     Enable the programmable completion facilities (*note Programmable
-     Completion::).  If Readline is not enabled, this option has no
-     effect.
-
 `--enable-readline'
      Include support for command-line editing and history with the Bash
      version of the Readline library (*note Command Line Editing::).
@@ -7973,6 +8068,19 @@ does not provide the necessary support.
      Include the `select' builtin, which allows the generation of simple
      menus (*note Conditional Constructs::).
 
+`--enable-separate-helpfiles'
+     Use external files for the documentation displayed by the `help'
+     builtin instead of storing the text internally.
+
+`--enable-single-help-strings'
+     Store the text displayed by the `help' builtin as a single string
+     for each help topic.  This aids in translating the text to
+     different languages.  You may need to disable this if your
+     compiler cannot handle very long string literals.
+
+`--enable-strict-posix-default'
+     Make Bash POSIX-conformant by default (*note Bash POSIX Mode::).
+
 `--enable-usg-echo-default'
      A synonym for `--enable-xpg-echo-default'.
 
@@ -7981,7 +8089,7 @@ does not provide the necessary support.
      default, without requiring the `-e' option.  This sets the default
      value of the `xpg_echo' shell option to `on', which makes the Bash
      `echo' behave more like the version specified in the Single Unix
-     Specification, version 2.  *Note Bash Builtins::, for a
+     Specification, version 3.  *Note Bash Builtins::, for a
      description of the escape sequences that `echo' recognizes.
 
 
@@ -8038,7 +8146,8 @@ be implemented.  There are some differences between the traditional
 Bourne shell and Bash; this section quickly details the differences of
 significance.  A number of these differences are explained in greater
 depth in previous sections.  This section uses the version of `sh'
-included in SVR4.2 as the baseline reference.
+included in SVR4.2 (the last version of the historical Bourne shell) as
+the baseline reference.
 
    * Bash is POSIX-conformant, even where the POSIX specification
      differs from traditional `sh' behavior (*note Bash POSIX Mode::).
@@ -8078,7 +8187,9 @@ included in SVR4.2 as the baseline reference.
 
    * Bash implements the `!' keyword to negate the return value of a
      pipeline (*note Pipelines::).  Very useful when an `if' statement
-     needs to act only if a test fails.
+     needs to act only if a test fails.  The Bash `-o pipefail' option
+     to `set' will cause a pipeline to return a failure status if any
+     command fails.
 
    * Bash has the `time' reserved word and command timing (*note
      Pipelines::).  The display of the timing statistics may be
@@ -8092,7 +8203,11 @@ included in SVR4.2 as the baseline reference.
      generation of simple menus (*note Conditional Constructs::).
 
    * Bash includes the `[[' compound command, which makes conditional
-     testing part of the shell grammar (*note Conditional Constructs::).
+     testing part of the shell grammar (*note Conditional
+     Constructs::), including optional regular expression matching.
+
+   * Bash provides optional case-insensitive matching for the `case' and
+     `[[' constructs.
 
    * Bash includes brace expansion (*note Brace Expansion::) and tilde
      expansion (*note Tilde Expansion::).
@@ -8109,6 +8224,9 @@ included in SVR4.2 as the baseline reference.
      not normally do this unless the variables are explicitly marked
      using the `export' command.
 
+   * Bash supports the `+=' assignment operator, which appends to the
+     value of the variable named on the left hand side.
+
    * Bash includes the POSIX pattern removal `%', `#', `%%' and `##'
      expansions to remove leading or trailing substrings from variable
      values (*note Shell Parameter Expansion::).
@@ -8176,6 +8294,12 @@ included in SVR4.2 as the baseline reference.
      operator, for directing standard output and standard error to the
      same file (*note Redirections::).
 
+   * Bash includes the `<<<' redirection operator, allowing a string to
+     be used as the standard input to a command.
+
+   * Bash implements the `[n]<&WORD' and `[n]>&WORD' redirection
+     operators, which move one file descriptor to another.
+
    * Bash treats a number of filenames specially when they are used in
      redirection operators (*note Redirections::).
 
@@ -8288,7 +8412,9 @@ included in SVR4.2 as the baseline reference.
      `DEBUG'.  Commands specified with an `RETURN' trap are executed
      before execution resumes after a shell function or a shell script
      executed with `.' or `source' returns.  The `RETURN' trap is not
-     inherited by shell functions.
+     inherited by shell functions unless the function has been given
+     the `trace' attribute or the `functrace' option has been enabled
+     using the `shopt' builtin.
 
    * The Bash `type' builtin is more extensive and gives more
      information about the names it finds (*note Bash Builtins::).
@@ -8312,6 +8438,9 @@ included in SVR4.2 as the baseline reference.
      table (*note Job Control Builtins::) or suppress the sending of
      `SIGHUP' to a job when the shell exits as the result of a `SIGHUP'.
 
+   * Bash includes a number of features to support a separate debugger
+     for shell scripts.
+
    * The SVR4.2 shell has two privilege-related builtins (`mldmode' and
      `priv') not present in Bash.
 
@@ -8849,7 +8978,7 @@ Index of Shell Builtin Commands
 * disown:                                Job Control Builtins.
                                                               (line  83)
 * echo:                                  Bash Builtins.       (line 191)
-* enable:                                Bash Builtins.       (line 244)
+* enable:                                Bash Builtins.       (line 247)
 * eval:                                  Bourne Shell Builtins.
                                                               (line  63)
 * exec:                                  Bourne Shell Builtins.
@@ -8866,24 +8995,24 @@ Index of Shell Builtin Commands
                                                               (line 103)
 * hash:                                  Bourne Shell Builtins.
                                                               (line 145)
-* help:                                  Bash Builtins.       (line 272)
+* help:                                  Bash Builtins.       (line 275)
 * history:                               Bash History Builtins.
                                                               (line  39)
 * jobs:                                  Job Control Builtins.
                                                               (line  25)
 * kill:                                  Job Control Builtins.
                                                               (line  57)
-* let:                                   Bash Builtins.       (line 281)
-* local:                                 Bash Builtins.       (line 288)
-* logout:                                Bash Builtins.       (line 298)
+* let:                                   Bash Builtins.       (line 284)
+* local:                                 Bash Builtins.       (line 291)
+* logout:                                Bash Builtins.       (line 301)
 * popd:                                  Directory Stack Builtins.
                                                               (line  37)
-* printf:                                Bash Builtins.       (line 302)
+* printf:                                Bash Builtins.       (line 305)
 * pushd:                                 Directory Stack Builtins.
                                                               (line  58)
 * pwd:                                   Bourne Shell Builtins.
                                                               (line 163)
-* read:                                  Bash Builtins.       (line 324)
+* read:                                  Bash Builtins.       (line 330)
 * readonly:                              Bourne Shell Builtins.
                                                               (line 172)
 * return:                                Bourne Shell Builtins.
@@ -8891,24 +9020,24 @@ Index of Shell Builtin Commands
 * set:                                   The Set Builtin.     (line   9)
 * shift:                                 Bourne Shell Builtins.
                                                               (line 200)
-* shopt:                                 Bash Builtins.       (line 385)
-* source:                                Bash Builtins.       (line 600)
+* shopt:                                 Bash Builtins.       (line 391)
+* source:                                Bash Builtins.       (line 622)
 * suspend:                               Job Control Builtins.
                                                               (line  94)
 * test:                                  Bourne Shell Builtins.
                                                               (line 212)
 * times:                                 Bourne Shell Builtins.
-                                                              (line 276)
+                                                              (line 278)
 * trap:                                  Bourne Shell Builtins.
-                                                              (line 281)
-* type:                                  Bash Builtins.       (line 604)
-* typeset:                               Bash Builtins.       (line 635)
-* ulimit:                                Bash Builtins.       (line 641)
+                                                              (line 283)
+* type:                                  Bash Builtins.       (line 626)
+* typeset:                               Bash Builtins.       (line 657)
+* ulimit:                                Bash Builtins.       (line 663)
 * umask:                                 Bourne Shell Builtins.
-                                                              (line 322)
-* unalias:                               Bash Builtins.       (line 703)
+                                                              (line 324)
+* unalias:                               Bash Builtins.       (line 725)
 * unset:                                 Bourne Shell Builtins.
-                                                              (line 339)
+                                                              (line 341)
 * wait:                                  Job Control Builtins.
                                                               (line  73)
 
@@ -8923,9 +9052,9 @@ Index of Shell Reserved Words
 
 * !:                                     Pipelines.           (line   8)
 * [[:                                    Conditional Constructs.
-                                                              (line 105)
+                                                              (line 108)
 * ]]:                                    Conditional Constructs.
-                                                              (line 105)
+                                                              (line 108)
 * case:                                  Conditional Constructs.
                                                               (line  28)
 * do:                                    Looping Constructs.  (line  12)
@@ -8945,7 +9074,7 @@ Index of Shell Reserved Words
 * in:                                    Conditional Constructs.
                                                               (line  28)
 * select:                                Conditional Constructs.
-                                                              (line  64)
+                                                              (line  67)
 * then:                                  Conditional Constructs.
                                                               (line   7)
 * time:                                  Pipelines.           (line   8)
@@ -8963,153 +9092,156 @@ Parameter and Variable Index
 \0\b[index\0\b]
 * Menu:
 
-* !:                                     Special Parameters.  (line  42)
-* #:                                     Special Parameters.  (line  26)
-* $:                                     Special Parameters.  (line  38)
+* !:                                     Special Parameters.  (line  46)
+* #:                                     Special Parameters.  (line  30)
+* $:                                     Special Parameters.  (line  42)
 * *:                                     Special Parameters.  (line   9)
-* -:                                     Special Parameters.  (line  33)
-* 0:                                     Special Parameters.  (line  46)
-* ?:                                     Special Parameters.  (line  29)
+* -:                                     Special Parameters.  (line  37)
+* 0:                                     Special Parameters.  (line  50)
+* ?:                                     Special Parameters.  (line  33)
 * @:                                     Special Parameters.  (line  19)
-* _:                                     Special Parameters.  (line  55)
+* _:                                     Special Parameters.  (line  59)
 * auto_resume:                           Job Control Variables.
                                                               (line   6)
 * BASH:                                  Bash Variables.      (line  13)
 * BASH_ARGC:                             Bash Variables.      (line  16)
-* BASH_ARGV:                             Bash Variables.      (line  24)
-* BASH_COMMAND:                          Bash Variables.      (line  31)
-* BASH_ENV:                              Bash Variables.      (line  36)
-* BASH_EXECUTION_STRING:                 Bash Variables.      (line  42)
-* BASH_LINENO:                           Bash Variables.      (line  45)
-* BASH_REMATCH:                          Bash Variables.      (line  53)
-* BASH_SOURCE:                           Bash Variables.      (line  61)
-* BASH_SUBSHELL:                         Bash Variables.      (line  65)
-* BASH_VERSINFO:                         Bash Variables.      (line  69)
-* BASH_VERSION:                          Bash Variables.      (line  93)
+* BASH_ARGV:                             Bash Variables.      (line  26)
+* BASH_COMMAND:                          Bash Variables.      (line  36)
+* BASH_ENV:                              Bash Variables.      (line  41)
+* BASH_EXECUTION_STRING:                 Bash Variables.      (line  47)
+* BASH_LINENO:                           Bash Variables.      (line  50)
+* BASH_REMATCH:                          Bash Variables.      (line  58)
+* BASH_SOURCE:                           Bash Variables.      (line  66)
+* BASH_SUBSHELL:                         Bash Variables.      (line  70)
+* BASH_VERSINFO:                         Bash Variables.      (line  74)
+* BASH_VERSION:                          Bash Variables.      (line  98)
 * bell-style:                            Readline Init File Syntax.
-                                                              (line  34)
+                                                              (line  38)
+* bind-tty-special-chars:                Readline Init File Syntax.
+                                                              (line  45)
 * CDPATH:                                Bourne Shell Variables.
                                                               (line   9)
-* COLUMNS:                               Bash Variables.      (line  96)
+* COLUMNS:                               Bash Variables.      (line 101)
 * comment-begin:                         Readline Init File Syntax.
-                                                              (line  41)
-* COMP_CWORD:                            Bash Variables.      (line 101)
-* COMP_LINE:                             Bash Variables.      (line 107)
-* COMP_POINT:                            Bash Variables.      (line 112)
-* COMP_WORDBREAKS:                       Bash Variables.      (line 120)
-* COMP_WORDS:                            Bash Variables.      (line 126)
+                                                              (line  50)
+* COMP_CWORD:                            Bash Variables.      (line 106)
+* COMP_LINE:                             Bash Variables.      (line 112)
+* COMP_POINT:                            Bash Variables.      (line 117)
+* COMP_WORDBREAKS:                       Bash Variables.      (line 125)
+* COMP_WORDS:                            Bash Variables.      (line 131)
 * completion-query-items:                Readline Init File Syntax.
-                                                              (line  51)
-* COMPREPLY:                             Bash Variables.      (line 132)
-* convert-meta:                          Readline Init File Syntax.
                                                               (line  60)
-* DIRSTACK:                              Bash Variables.      (line 137)
+* COMPREPLY:                             Bash Variables.      (line 137)
+* convert-meta:                          Readline Init File Syntax.
+                                                              (line  70)
+* DIRSTACK:                              Bash Variables.      (line 142)
 * disable-completion:                    Readline Init File Syntax.
-                                                              (line  66)
+                                                              (line  76)
 * editing-mode:                          Readline Init File Syntax.
-                                                              (line  71)
-* EMACS:                                 Bash Variables.      (line 147)
+                                                              (line  81)
+* EMACS:                                 Bash Variables.      (line 152)
 * enable-keypad:                         Readline Init File Syntax.
-                                                              (line  77)
-* EUID:                                  Bash Variables.      (line 152)
+                                                              (line  87)
+* EUID:                                  Bash Variables.      (line 157)
 * expand-tilde:                          Readline Init File Syntax.
-                                                              (line  82)
-* FCEDIT:                                Bash Variables.      (line 156)
-* FIGNORE:                               Bash Variables.      (line 160)
-* FUNCNAME:                              Bash Variables.      (line 166)
-* GLOBIGNORE:                            Bash Variables.      (line 175)
-* GROUPS:                                Bash Variables.      (line 181)
-* histchars:                             Bash Variables.      (line 187)
-* HISTCMD:                               Bash Variables.      (line 202)
-* HISTCONTROL:                           Bash Variables.      (line 207)
-* HISTFILE:                              Bash Variables.      (line 223)
-* HISTFILESIZE:                          Bash Variables.      (line 227)
-* HISTIGNORE:                            Bash Variables.      (line 234)
+                                                              (line  92)
+* FCEDIT:                                Bash Variables.      (line 161)
+* FIGNORE:                               Bash Variables.      (line 165)
+* FUNCNAME:                              Bash Variables.      (line 171)
+* GLOBIGNORE:                            Bash Variables.      (line 180)
+* GROUPS:                                Bash Variables.      (line 186)
+* histchars:                             Bash Variables.      (line 192)
+* HISTCMD:                               Bash Variables.      (line 207)
+* HISTCONTROL:                           Bash Variables.      (line 212)
+* HISTFILE:                              Bash Variables.      (line 228)
+* HISTFILESIZE:                          Bash Variables.      (line 232)
+* HISTIGNORE:                            Bash Variables.      (line 239)
 * history-preserve-point:                Readline Init File Syntax.
-                                                              (line  85)
-* HISTSIZE:                              Bash Variables.      (line 253)
-* HISTTIMEFORMAT:                        Bash Variables.      (line 257)
+                                                              (line  96)
+* HISTSIZE:                              Bash Variables.      (line 258)
+* HISTTIMEFORMAT:                        Bash Variables.      (line 262)
 * HOME:                                  Bourne Shell Variables.
                                                               (line  13)
 * horizontal-scroll-mode:                Readline Init File Syntax.
-                                                              (line  90)
-* HOSTFILE:                              Bash Variables.      (line 264)
-* HOSTNAME:                              Bash Variables.      (line 275)
-* HOSTTYPE:                              Bash Variables.      (line 278)
+                                                              (line 101)
+* HOSTFILE:                              Bash Variables.      (line 269)
+* HOSTNAME:                              Bash Variables.      (line 280)
+* HOSTTYPE:                              Bash Variables.      (line 283)
 * IFS:                                   Bourne Shell Variables.
                                                               (line  18)
-* IGNOREEOF:                             Bash Variables.      (line 281)
+* IGNOREEOF:                             Bash Variables.      (line 286)
 * input-meta:                            Readline Init File Syntax.
-                                                              (line  97)
-* INPUTRC:                               Bash Variables.      (line 291)
+                                                              (line 108)
+* INPUTRC:                               Bash Variables.      (line 296)
 * isearch-terminators:                   Readline Init File Syntax.
-                                                              (line 104)
+                                                              (line 115)
 * keymap:                                Readline Init File Syntax.
-                                                              (line 111)
-* LANG:                                  Bash Variables.      (line 295)
-* LC_ALL:                                Bash Variables.      (line 299)
-* LC_COLLATE:                            Bash Variables.      (line 303)
-* LC_CTYPE:                              Bash Variables.      (line 310)
+                                                              (line 122)
+* LANG:                                  Bash Variables.      (line 300)
+* LC_ALL:                                Bash Variables.      (line 304)
+* LC_COLLATE:                            Bash Variables.      (line 308)
+* LC_CTYPE:                              Bash Variables.      (line 315)
 * LC_MESSAGES <1>:                       Locale Translation.  (line  11)
-* LC_MESSAGES:                           Bash Variables.      (line 315)
-* LC_NUMERIC:                            Bash Variables.      (line 319)
-* LINENO:                                Bash Variables.      (line 323)
-* LINES:                                 Bash Variables.      (line 327)
-* MACHTYPE:                              Bash Variables.      (line 332)
+* LC_MESSAGES:                           Bash Variables.      (line 320)
+* LC_NUMERIC:                            Bash Variables.      (line 324)
+* LINENO:                                Bash Variables.      (line 328)
+* LINES:                                 Bash Variables.      (line 332)
+* MACHTYPE:                              Bash Variables.      (line 337)
 * MAIL:                                  Bourne Shell Variables.
                                                               (line  22)
-* MAILCHECK:                             Bash Variables.      (line 336)
+* MAILCHECK:                             Bash Variables.      (line 341)
 * MAILPATH:                              Bourne Shell Variables.
                                                               (line  27)
 * mark-modified-lines:                   Readline Init File Syntax.
-                                                              (line 124)
+                                                              (line 135)
 * mark-symlinked-directories:            Readline Init File Syntax.
-                                                              (line 129)
+                                                              (line 140)
 * match-hidden-files:                    Readline Init File Syntax.
-                                                              (line 134)
+                                                              (line 145)
 * meta-flag:                             Readline Init File Syntax.
-                                                              (line  97)
-* OLDPWD:                                Bash Variables.      (line 344)
+                                                              (line 108)
+* OLDPWD:                                Bash Variables.      (line 349)
 * OPTARG:                                Bourne Shell Variables.
                                                               (line  34)
-* OPTERR:                                Bash Variables.      (line 347)
+* OPTERR:                                Bash Variables.      (line 352)
 * OPTIND:                                Bourne Shell Variables.
                                                               (line  38)
-* OSTYPE:                                Bash Variables.      (line 351)
+* OSTYPE:                                Bash Variables.      (line 356)
 * output-meta:                           Readline Init File Syntax.
-                                                              (line 141)
+                                                              (line 152)
 * page-completions:                      Readline Init File Syntax.
-                                                              (line 146)
+                                                              (line 157)
 * PATH:                                  Bourne Shell Variables.
                                                               (line  42)
-* PIPESTATUS:                            Bash Variables.      (line 354)
-* POSIXLY_CORRECT:                       Bash Variables.      (line 359)
-* PPID:                                  Bash Variables.      (line 368)
-* PROMPT_COMMAND:                        Bash Variables.      (line 372)
+* PIPESTATUS:                            Bash Variables.      (line 359)
+* POSIXLY_CORRECT:                       Bash Variables.      (line 364)
+* PPID:                                  Bash Variables.      (line 373)
+* PROMPT_COMMAND:                        Bash Variables.      (line 377)
 * PS1:                                   Bourne Shell Variables.
                                                               (line  48)
 * PS2:                                   Bourne Shell Variables.
                                                               (line  53)
-* PS3:                                   Bash Variables.      (line 376)
-* PS4:                                   Bash Variables.      (line 381)
-* PWD:                                   Bash Variables.      (line 387)
-* RANDOM:                                Bash Variables.      (line 390)
-* REPLY:                                 Bash Variables.      (line 395)
-* SECONDS:                               Bash Variables.      (line 398)
-* SHELL:                                 Bash Variables.      (line 404)
-* SHELLOPTS:                             Bash Variables.      (line 409)
-* SHLVL:                                 Bash Variables.      (line 418)
+* PS3:                                   Bash Variables.      (line 381)
+* PS4:                                   Bash Variables.      (line 386)
+* PWD:                                   Bash Variables.      (line 392)
+* RANDOM:                                Bash Variables.      (line 395)
+* REPLY:                                 Bash Variables.      (line 400)
+* SECONDS:                               Bash Variables.      (line 403)
+* SHELL:                                 Bash Variables.      (line 409)
+* SHELLOPTS:                             Bash Variables.      (line 414)
+* SHLVL:                                 Bash Variables.      (line 423)
 * show-all-if-ambiguous:                 Readline Init File Syntax.
-                                                              (line 156)
+                                                              (line 167)
 * show-all-if-unmodified:                Readline Init File Syntax.
-                                                              (line 162)
+                                                              (line 173)
 * TEXTDOMAIN:                            Locale Translation.  (line  11)
 * TEXTDOMAINDIR:                         Locale Translation.  (line  11)
-* TIMEFORMAT:                            Bash Variables.      (line 423)
-* TMOUT:                                 Bash Variables.      (line 461)
-* UID:                                   Bash Variables.      (line 473)
+* TIMEFORMAT:                            Bash Variables.      (line 428)
+* TMOUT:                                 Bash Variables.      (line 466)
+* TMPDIR:                                Bash Variables.      (line 478)
+* UID:                                   Bash Variables.      (line 482)
 * visible-stats:                         Readline Init File Syntax.
-                                                              (line 171)
+                                                              (line 182)
 
 \1f
 File: bashref.info,  Node: Function Index,  Next: Concept Index,  Prev: Variable Index,  Up: Top
@@ -9209,7 +9341,7 @@ Function Index
 * unix-word-rubout (C-w):                Commands For Killing. (line 28)
 * upcase-word (M-u):                     Commands For Text.    (line 38)
 * yank (C-y):                            Commands For Killing. (line 59)
-* yank-last-arg (M-. or M-_):            Commands For History. (line 63)
+* yank-last-arg (M-. or M-_):            Commands For History. (line 65)
 * yank-nth-arg (M-C-y):                  Commands For History. (line 56)
 * yank-pop (M-y):                        Commands For Killing. (line 62)
 
@@ -9298,7 +9430,7 @@ Concept Index
 * history list:                          Bash History Facilities.
                                                               (line   6)
 * History, how to use:                   Programmable Completion Builtins.
-                                                              (line 203)
+                                                              (line 209)
 * identifier:                            Definitions.         (line  49)
 * initialization file, readline:         Readline Init File.  (line   6)
 * installation:                          Basic Installation.  (line   6)
@@ -9366,7 +9498,7 @@ Concept Index
 * translation, native languages:         Locale Translation.  (line   6)
 * variable, shell:                       Shell Parameters.    (line   6)
 * variables, readline:                   Readline Init File Syntax.
-                                                              (line  33)
+                                                              (line  37)
 * word:                                  Definitions.         (line  87)
 * word splitting:                        Word Splitting.      (line   6)
 * yanking text:                          Readline Killing Commands.
@@ -9375,129 +9507,129 @@ Concept Index
 
 \1f
 Tag Table:
-Node: Top\7f1349
-Node: Introduction\7f3485
-Node: What is Bash?\7f3714
-Node: What is a shell?\7f4807
-Node: Definitions\7f7348
-Node: Basic Shell Features\7f10089
-Node: Shell Syntax\7f11308
-Node: Shell Operation\7f12340
-Node: Quoting\7f13634
-Node: Escape Character\7f14908
-Node: Single Quotes\7f15393
-Node: Double Quotes\7f15741
-Node: ANSI-C Quoting\7f16767
-Node: Locale Translation\7f17723
-Node: Comments\7f18619
-Node: Shell Commands\7f19233
-Node: Simple Commands\7f19999
-Node: Pipelines\7f20630
-Node: Lists\7f22505
-Node: Compound Commands\7f24136
-Node: Looping Constructs\7f24920
-Node: Conditional Constructs\7f27367
-Node: Command Grouping\7f34434
-Node: Shell Functions\7f35883
-Node: Shell Parameters\7f40151
-Node: Positional Parameters\7f41732
-Node: Special Parameters\7f42632
-Node: Shell Expansions\7f45299
-Node: Brace Expansion\7f47224
-Node: Tilde Expansion\7f49549
-Node: Shell Parameter Expansion\7f51890
-Node: Command Substitution\7f59153
-Node: Arithmetic Expansion\7f60486
-Node: Process Substitution\7f61336
-Node: Word Splitting\7f62386
-Node: Filename Expansion\7f63847
-Node: Pattern Matching\7f65983
-Node: Quote Removal\7f69316
-Node: Redirections\7f69611
-Node: Executing Commands\7f77190
-Node: Simple Command Expansion\7f77865
-Node: Command Search and Execution\7f79795
-Node: Command Execution Environment\7f81801
-Node: Environment\7f84572
-Node: Exit Status\7f86232
-Node: Signals\7f87436
-Node: Shell Scripts\7f89400
-Node: Shell Builtin Commands\7f91918
-Node: Bourne Shell Builtins\7f93497
-Node: Bash Builtins\7f110450
-Node: The Set Builtin\7f138577
-Node: Special Builtins\7f146800
-Node: Shell Variables\7f147777
-Node: Bourne Shell Variables\7f148217
-Node: Bash Variables\7f150198
-Node: Bash Features\7f169913
-Node: Invoking Bash\7f170796
-Node: Bash Startup Files\7f176615
-Node: Interactive Shells\7f181473
-Node: What is an Interactive Shell?\7f181883
-Node: Is this Shell Interactive?\7f182533
-Node: Interactive Shell Behavior\7f183348
-Node: Bash Conditional Expressions\7f186624
-Node: Shell Arithmetic\7f190049
-Node: Aliases\7f192794
-Node: Arrays\7f195362
-Node: The Directory Stack\7f198393
-Node: Directory Stack Builtins\7f199107
-Node: Printing a Prompt\7f201998
-Node: The Restricted Shell\7f204712
-Node: Bash POSIX Mode\7f206544
-Node: Job Control\7f213197
-Node: Job Control Basics\7f213664
-Node: Job Control Builtins\7f217954
-Node: Job Control Variables\7f222274
-Node: Command Line Editing\7f223432
-Node: Introduction and Notation\7f224431
-Node: Readline Interaction\7f226053
-Node: Readline Bare Essentials\7f227244
-Node: Readline Movement Commands\7f229033
-Node: Readline Killing Commands\7f229998
-Node: Readline Arguments\7f231918
-Node: Searching\7f232962
-Node: Readline Init File\7f235148
-Node: Readline Init File Syntax\7f236207
-Node: Conditional Init Constructs\7f247860
-Node: Sample Init File\7f250393
-Node: Bindable Readline Commands\7f253510
-Node: Commands For Moving\7f254717
-Node: Commands For History\7f255578
-Node: Commands For Text\7f258479
-Node: Commands For Killing\7f261152
-Node: Numeric Arguments\7f263294
-Node: Commands For Completion\7f264433
-Node: Keyboard Macros\7f268026
-Node: Miscellaneous Commands\7f268597
-Node: Readline vi Mode\7f273908
-Node: Programmable Completion\7f274822
-Node: Programmable Completion Builtins\7f280634
-Node: Using History Interactively\7f288004
-Node: Bash History Facilities\7f288684
-Node: Bash History Builtins\7f291379
-Node: History Interaction\7f295236
-Node: Event Designators\7f297792
-Node: Word Designators\7f298807
-Node: Modifiers\7f300446
-Node: Installing Bash\7f301852
-Node: Basic Installation\7f302989
-Node: Compilers and Options\7f305681
-Node: Compiling For Multiple Architectures\7f306422
-Node: Installation Names\7f308086
-Node: Specifying the System Type\7f308904
-Node: Sharing Defaults\7f309620
-Node: Operation Controls\7f310293
-Node: Optional Features\7f311251
-Node: Reporting Bugs\7f319530
-Node: Major Differences From The Bourne Shell\7f320724
-Node: Copying This Manual\7f336496
-Node: GNU Free Documentation License\7f336772
-Node: Builtin Index\7f359178
-Node: Reserved Word Index\7f365727
-Node: Variable Index\7f368163
-Node: Function Index\7f378882
-Node: Concept Index\7f385602
+Node: Top\7f1375
+Node: Introduction\7f3475
+Node: What is Bash?\7f3703
+Node: What is a shell?\7f4796
+Node: Definitions\7f7337
+Node: Basic Shell Features\7f10078
+Node: Shell Syntax\7f11297
+Node: Shell Operation\7f12327
+Node: Quoting\7f13621
+Node: Escape Character\7f14924
+Node: Single Quotes\7f15409
+Node: Double Quotes\7f15757
+Node: ANSI-C Quoting\7f16882
+Node: Locale Translation\7f17838
+Node: Comments\7f18734
+Node: Shell Commands\7f19348
+Node: Simple Commands\7f20114
+Node: Pipelines\7f20745
+Node: Lists\7f22620
+Node: Compound Commands\7f24251
+Node: Looping Constructs\7f25035
+Node: Conditional Constructs\7f27482
+Node: Command Grouping\7f34942
+Node: Shell Functions\7f36391
+Node: Shell Parameters\7f40681
+Node: Positional Parameters\7f43011
+Node: Special Parameters\7f43911
+Node: Shell Expansions\7f46875
+Node: Brace Expansion\7f48800
+Node: Tilde Expansion\7f51125
+Node: Shell Parameter Expansion\7f53476
+Node: Command Substitution\7f60985
+Node: Arithmetic Expansion\7f62318
+Node: Process Substitution\7f63168
+Node: Word Splitting\7f64218
+Node: Filename Expansion\7f65679
+Node: Pattern Matching\7f67815
+Node: Quote Removal\7f71140
+Node: Redirections\7f71435
+Node: Executing Commands\7f79165
+Node: Simple Command Expansion\7f79835
+Node: Command Search and Execution\7f81765
+Node: Command Execution Environment\7f83771
+Node: Environment\7f86542
+Node: Exit Status\7f88202
+Node: Signals\7f89406
+Node: Shell Scripts\7f91370
+Node: Shell Builtin Commands\7f93888
+Node: Bourne Shell Builtins\7f95549
+Node: Bash Builtins\7f112632
+Node: The Set Builtin\7f141675
+Node: Special Builtins\7f150082
+Node: Shell Variables\7f151059
+Node: Bourne Shell Variables\7f151499
+Node: Bash Variables\7f153480
+Node: Bash Features\7f173666
+Node: Invoking Bash\7f174549
+Node: Bash Startup Files\7f180370
+Node: Interactive Shells\7f185228
+Node: What is an Interactive Shell?\7f185638
+Node: Is this Shell Interactive?\7f186288
+Node: Interactive Shell Behavior\7f187103
+Node: Bash Conditional Expressions\7f190379
+Node: Shell Arithmetic\7f193958
+Node: Aliases\7f196704
+Node: Arrays\7f199272
+Node: The Directory Stack\7f202621
+Node: Directory Stack Builtins\7f203335
+Node: Printing a Prompt\7f206226
+Node: The Restricted Shell\7f208940
+Node: Bash POSIX Mode\7f210772
+Node: Job Control\7f218589
+Node: Job Control Basics\7f219056
+Node: Job Control Builtins\7f223432
+Node: Job Control Variables\7f227759
+Node: Command Line Editing\7f228917
+Node: Introduction and Notation\7f229916
+Node: Readline Interaction\7f231538
+Node: Readline Bare Essentials\7f232729
+Node: Readline Movement Commands\7f234518
+Node: Readline Killing Commands\7f235483
+Node: Readline Arguments\7f237403
+Node: Searching\7f238447
+Node: Readline Init File\7f240633
+Node: Readline Init File Syntax\7f241692
+Node: Conditional Init Constructs\7f253908
+Node: Sample Init File\7f256441
+Node: Bindable Readline Commands\7f259558
+Node: Commands For Moving\7f260765
+Node: Commands For History\7f261626
+Node: Commands For Text\7f264781
+Node: Commands For Killing\7f267454
+Node: Numeric Arguments\7f269596
+Node: Commands For Completion\7f270735
+Node: Keyboard Macros\7f274328
+Node: Miscellaneous Commands\7f274899
+Node: Readline vi Mode\7f280210
+Node: Programmable Completion\7f281124
+Node: Programmable Completion Builtins\7f286916
+Node: Using History Interactively\7f294512
+Node: Bash History Facilities\7f295192
+Node: Bash History Builtins\7f297887
+Node: History Interaction\7f301744
+Node: Event Designators\7f304300
+Node: Word Designators\7f305315
+Node: Modifiers\7f306954
+Node: Installing Bash\7f308360
+Node: Basic Installation\7f309490
+Node: Compilers and Options\7f312182
+Node: Compiling For Multiple Architectures\7f312923
+Node: Installation Names\7f314587
+Node: Specifying the System Type\7f315405
+Node: Sharing Defaults\7f316121
+Node: Operation Controls\7f316794
+Node: Optional Features\7f317752
+Node: Reporting Bugs\7f326683
+Node: Major Differences From The Bourne Shell\7f327877
+Node: Copying This Manual\7f344575
+Node: GNU Free Documentation License\7f344851
+Node: Builtin Index\7f367257
+Node: Reserved Word Index\7f373806
+Node: Variable Index\7f376242
+Node: Function Index\7f387175
+Node: Concept Index\7f393895
 \1f
 End Tag Table
index 96b9c01..b25dad9 100644 (file)
@@ -16,7 +16,7 @@ This is Edition @value{EDITION}, last updated @value{UPDATED},
 of @cite{The GNU Bash Reference Manual},
 for @code{Bash}, Version @value{VERSION}.
 
-Copyright @copyright{} 1988-2004 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2005 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -94,46 +94,28 @@ reference on shell behavior.
 
 @menu
 * Introduction::               An introduction to the shell.
-
 * Definitions::                        Some definitions used in the rest of this
                                manual.
-
 * Basic Shell Features::       The shell "building blocks".
-
 * Shell Builtin Commands::     Commands that are a part of the shell.
-
 * Shell Variables::            Variables used or set by Bash.
-
 * Bash Features::              Features found only in Bash.
-
-* Job Control::                        A chapter describing what job control is
-                               and how Bash allows you to use it.
-
-* Using History Interactively::        Chapter dealing with history expansion
-                               rules.
-
+* Job Control::                        What job control is and how Bash allows you
+                               to use it.
+* Using History Interactively::        Command History Expansion
 * Command Line Editing::       Chapter describing the command line
                                editing features.
-
 * Installing Bash::            How to build and install Bash on your system.
-
 * Reporting Bugs::             How to report bugs in Bash.
-
 * Major Differences From The Bourne Shell::    A terse list of the differences
                                                between Bash and historical
                                                versions of /bin/sh.
-
 * Copying This Manual::                Copying this manual.
-
 * Builtin Index::              Index of Bash builtin commands.
-
 * Reserved Word Index::                Index of Bash reserved words.
-
 * Variable Index::             Quick reference helps you find the
                                variable you want.
-
 * Function Index::             Index of bindable Readline functions.
-
 * Concept Index::              General index for concepts described in
                                this manual.
 @end menu
@@ -143,7 +125,6 @@ reference on shell behavior.
 @chapter Introduction
 @menu
 * What is Bash?::              A short description of Bash.
-
 * What is a shell?::           A brief introduction to shells.
 @end menu
 
@@ -371,9 +352,7 @@ and to named files, and how the shell executes commands.
 @section Shell Syntax
 @menu
 * Shell Operation::    The basic operation of the shell.
-
 * Quoting::            How to remove the special meaning from characters.
-
 * Comments::           How to specify comments.
 @end menu
 
@@ -444,7 +423,6 @@ status (@pxref{Exit Status}).
 * Double Quotes::      How to suppress most of the interpretation of a
                        sequence of characters.
 * ANSI-C Quoting::     How to expand ANSI-C sequences in quoted strings.
-
 * Locale Translation:: How to translate strings into different languages.
 @end menu
 
@@ -457,7 +435,8 @@ parameter expansion.
 Each of the shell metacharacters (@pxref{Definitions})
 has special meaning to the shell and must be quoted if it is to
 represent itself.
-When the command history expansion facilities are being used, the
+When the command history expansion facilities are being used
+(@pxref{History Interaction}), the
 @var{history expansion} character, usually @samp{!}, must be quoted
 to prevent history expansion.  @xref{Bash History Facilities}, for
 more details concerning history expansion.
@@ -486,7 +465,8 @@ between single quotes, even when preceded by a backslash.
 
 Enclosing characters in double quotes (@samp{"}) preserves the literal value
 of all characters within the quotes, with the exception of
-@samp{$}, @samp{`}, and @samp{\}.
+@samp{$}, @samp{`}, @samp{\},
+and, when history expansion is enabled, @samp{!}.
 The characters @samp{$} and @samp{`}
 retain their special meaning within double quotes (@pxref{Shell Expansions}).
 The backslash retains its special meaning only when followed by one of
@@ -497,8 +477,9 @@ characters are removed.  Backslashes preceding characters without a
 special meaning are left unmodified.
 A double quote may be quoted within double quotes by preceding it with
 a backslash.
-When command history is being used, the double quote may not be used to
-quote the history expansion character.
+If enabled, history expansion will be performed unless an @samp{!}
+appearing in double quotes is escaped using a backslash.
+The backslash preceding the @samp{!} is not removed.
 
 The special parameters @samp{*} and @samp{@@} have special meaning
 when in double quotes (@pxref{Shell Parameter Expansion}).
@@ -864,6 +845,10 @@ The syntax of the @code{case} command is:
 
 @code{case} will selectively execute the @var{command-list} corresponding to
 the first @var{pattern} that matches @var{word}.
+If the shell option @code{nocasematch}
+(see the description of @code{shopt} in @ref{Bash Builtins})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
 The @samp{|} is used to separate multiple patterns, and the @samp{)}
 operator terminates a pattern list.
 A list of patterns and an associated command-list is known
@@ -972,6 +957,10 @@ as primaries.
 When the @samp{==} and @samp{!=} operators are used, the string to the
 right of the operator is considered a pattern and matched according
 to the rules described below in @ref{Pattern Matching}.
+If the shell option @code{nocasematch}
+(see the description of @code{shopt} in @ref{Bash Builtins})
+is enabled, the match is performed without regard to the case
+of alphabetic characters.
 The return value is 0 if the string matches or does not match
 the pattern, respectively, and 1 otherwise.
 Any part of the pattern may be quoted to force it to be matched as a
@@ -985,7 +974,7 @@ The return value is 0 if the string matches
 the pattern, and 1 otherwise.
 If the regular expression is syntactically incorrect, the conditional
 expression's return value is 2.
-If the shell option @code{nocaseglob}
+If the shell option @code{nocasematch}
 (see the description of @code{shopt} in @ref{Bash Builtins})
 is enabled, the match is performed without regard to the case
 of alphabetic characters.
@@ -1118,12 +1107,12 @@ The first element of the @env{FUNCNAME} variable is set to the
 name of the function while the function is executing.
 All other aspects of the shell execution
 environment are identical between a function and its caller
-with the exception that the @env{DEBUG} trap
-below) is not inherited unless the function has been given the
+with the exception that the @env{DEBUG} and @env{RETURN} traps
+are not inherited unless the function has been given the
 @code{trace} attribute using the @code{declare} builtin or
 the @code{-o functrace} option has been enabled with
 the @code{set} builtin,
-(in which case all functions inherit the @code{DEBUG} trap).
+(in which case all functions inherit the @env{DEBUG} and @env{RETURN} traps).
 @xref{Bourne Shell Builtins}, for the description of the
 @code{trap} builtin.
 
@@ -1208,6 +1197,21 @@ Assignment statements may also appear as arguments to the
 @code{declare}, @code{typeset}, @code{export}, @code{readonly},
 and @code{local} builtin commands.
 
+In the context where an assignment statement is assigning a value  
+to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
+operator can be used to   
+append to or add to the variable's previous value.
+When @samp{+=} is applied to a variable for which the integer attribute
+has been set, @var{value} is evaluated as an arithmetic expression and
+added to the variable's current value, which is also evaluated.
+When @samp{+=} is applied to an array variable using compound assignment
+(@pxref{Arrays}), the
+variable's value is not unset (as it is when using @samp{=}), and new
+values are appended to the array beginning at one greater than the array's
+maximum index.
+When applied to a string-valued variable, @var{value} is expanded and
+appended to the variable's value.
+
 @node Positional Parameters
 @subsection Positional Parameters
 @cindex parameters, positional
@@ -1256,6 +1260,10 @@ Expands to the positional parameters, starting from one.  When the
 expansion occurs within double quotes, each parameter expands to a
 separate word.  That is, @code{"$@@"} is equivalent to
 @code{"$1" "$2" @dots{}}.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
 When there are no positional parameters, @code{"$@@"} and
 @code{$@@}
 expand to nothing (i.e., they are removed).
@@ -1292,12 +1300,13 @@ to the filename used to invoke Bash, as given by argument zero.
 
 @item _
 (An underscore.)
-At shell startup, set to the absolute filename of the shell or shell
-script being executed as passed in the argument list.
+At shell startup, set to the absolute pathname used to invoke the
+shell or shell script being executed as passed in the environment
+or argument list.
 Subsequently, expands to the last argument to the previous command,
 after expansion.   
-Also set to the full pathname of each command executed and placed in
-the environment exported to that command.
+Also set to the full pathname used to invoke each command executed
+and placed in the environment exported to that command.
 When checking mail, this parameter holds the name of the mail file.
 @end vtable
 
@@ -1452,7 +1461,7 @@ If the login name is invalid, or the tilde expansion fails, the word is
 left unchanged.
 
 Each variable assignment is checked for unquoted tilde-prefixes immediately
-following a @samp{:} or @samp{=}.
+following a @samp{:} or the first @samp{=}.
 In these cases, tilde expansion is also performed.
 Consequently, one may use file names with tildes in assignments to
 @env{PATH}, @env{MAILPATH}, and @env{CDPATH},
@@ -1580,6 +1589,10 @@ parameters beginning at @var{offset}.
 If @var{parameter} is an array name indexed by @samp{@@} or @samp{*},
 the result is the @var{length}
 members of the array beginning with @code{$@{@var{parameter}[@var{offset}]@}}.
+A negative @var{offset} is taken relative to one greater than the maximum
+index of the specified array.
+Note that a negative offset must be separated from the colon by at least
+one space to avoid being confused with the @samp{:-} expansion.
 Substring indexing is zero-based unless the positional parameters
 are used, in which case the indexing starts at 1.
 
@@ -1927,7 +1940,7 @@ Matches zero or more occurrences of the given patterns.
 Matches one or more occurrences of the given patterns.
 
 @item @@(@var{pattern-list})
-Matches exactly one of the given patterns.
+Matches one of the given patterns.
 
 @item !(@var{pattern-list})
 Matches anything except one of the given patterns.
@@ -2013,6 +2026,10 @@ connection to the corresponding socket.
 
 A failure to open or create a file causes the redirection to fail.
 
+Redirections using file descriptors greater than 9 should be used with
+care, as they may conflict with file descriptors the shell uses
+internally.
+
 @subsection Redirecting Input
 Redirection of input causes the file whose name results from
 the expansion of @var{word}
@@ -2188,21 +2205,15 @@ is not specified.  If the file does not exist, it is created.
 @menu
 * Simple Command Expansion::   How Bash expands simple commands before
                                executing them.
-
 * Command Search and Execution::       How Bash finds commands and runs them.
-
 * Command Execution Environment::      The environment in which Bash
                                        executes commands that are not
                                        shell builtins.
-
 * Environment::                The environment given to a command.
-
 * Exit Status::                The status returned by commands and how Bash
                        interprets it.
-
 * Signals::            What happens when Bash or a command it runs
                        receives a signal.
-
 @end menu
 
 @node Simple Command Expansion
@@ -2603,6 +2614,8 @@ Many of the builtins have been extended by @sc{posix} or Bash.
 Unless otherwise noted, each builtin command documented as accepting
 options preceded by @samp{-} accepts @samp{--}
 to signify the end of the options.
+For example, the @code{:}, @code{true}, @code{false}, and @code{test}
+builtins do not accept options.
 
 @node Bourne Shell Builtins
 @section Bourne Shell Builtins
@@ -2893,6 +2906,8 @@ Evaluate a conditional expression @var{expr}.
 Each operator and operand must be a separate argument.
 Expressions are composed of the primaries described below in
 @ref{Bash Conditional Expressions}.
+@code{test} does not accept any options, nor does it accept and ignore
+an argument of @option{--} as signifying the end of options.
 
 When the @code{[} form is used, the last argument to the command must
 be a @code{]}.
@@ -3256,7 +3271,8 @@ by subsequent assignment statements or unset.
 
 @item -t
 Give each @var{name} the @code{trace} attribute.
-Traced functions inherit the @code{DEBUG} trap from the calling shell.
+Traced functions inherit the @code{DEBUG} and @code{RETURN} traps from
+the calling shell.
 The trace attribute has no special meaning for variables.
 
 @item -x
@@ -3295,6 +3311,8 @@ even on systems where they are interpreted by default.
 The @code{xpg_echo} shell option may be used to
 dynamically determine whether or not @code{echo} expands these
 escape characters by default.
+@code{echo} does not interpret @option{--} to mean the end of options.
+
 @code{echo} interprets the following escape sequences:
 @table @code
 @item \a
@@ -3409,7 +3427,7 @@ parent.
 @item printf
 @btindex printf
 @example
-@code{printf} @var{format} [@var{arguments}]
+@code{printf} [-v @var{var}] @var{format} [@var{arguments}]
 @end example
 Write the formatted @var{arguments} to the standard output under the
 control of the @var{format}.
@@ -3427,6 +3445,9 @@ beginning with @samp{\0} may contain up to four digits),
 and @samp{%q} causes @code{printf} to output the
 corresponding @var{argument} in a format that can be reused as shell input.
 
+The @option{-v} option causes the output to be assigned to the variable
+@var{var} rather than being printed to the standard output.
+
 The @var{format} is reused as necessary to consume all of the @var{arguments}.
 If the @var{format} requires more @var{arguments} than are supplied, the
 extra format specifications behave as if a zero value or null string, as
@@ -3610,6 +3631,20 @@ If the command run by the @code{DEBUG} trap returns a value of 2, and the
 shell is executing in a subroutine (a shell function or a shell script
 executed by the @code{.} or @code{source} builtins), a call to
 @code{return} is simulated.
+
+@item
+@code{BASH_ARGC} and @code{BASH_ARGV} are updated as described in their
+descriptions (@pxref{Bash Variables}).
+
+@item
+Function tracing is enabled:  command substitution, shell functions, and
+subshells invoked with @code{( @var{command} )} inherit the
+@code{DEBUG} and @code{RETURN} traps.
+
+@item
+Error tracing is enabled:  command substitution, shell functions, and
+subshells invoked with @code{( @var{command} )} inherit the
+@code{ERROR} trap.
 @end enumerate
 
 @item extglob
@@ -3692,6 +3727,11 @@ on an empty line.
 If set, Bash matches filenames in a case-insensitive fashion when
 performing filename expansion.
 
+@item nocasematch
+If set, Bash matches patterns in a case-insensitive fashion when
+performing matching while executing @code{case} or @code{[[}
+conditional commands.
+
 @item nullglob
 If set, Bash allows filename patterns which match no
 files to expand to a null string, rather than themselves.
@@ -3885,7 +3925,10 @@ set [--abefhkmnptuvxBCHP] [-o @var{option}] [@var{argument} @dots{}]
 
 If no options or arguments are supplied, @code{set} displays the names
 and values of all shell variables and functions, sorted according to the
-current locale, in a format that may be reused as input.
+current locale, in a format that may be reused as input
+for setting or resetting the currently-set variables.
+Read-only variables cannot be reset.
+In @sc{posix} mode, only shell variables are listed.
 
 When options are supplied, they set or unset shell attributes.
 Options, if specified, have the following meanings:
@@ -4096,9 +4139,11 @@ $ cd ..; pwd
 @end example
 
 @item -T
-If set, any trap on @code{DEBUG} is inherited by shell functions, command
-substitutions, and commands executed in a subshell environment.
-The @code{DEBUG} trap is normally not inherited in such cases.
+If set, any trap on @code{DEBUG} and @code{RETURN} are inherited by
+shell functions, command substitutions, and commands executed
+in a subshell environment.
+The @code{DEBUG} and @code{RETURN} traps are normally not inherited
+in such cases.
 
 @item --
 If no arguments follow this option, then the positional parameters are
@@ -4249,6 +4294,10 @@ parameters to the current subroutine (shell function or script executed
 with @code{.} or @code{source}) is at the top of the stack.  When a
 subroutine is executed, the number of parameters passed is pushed onto
 @code{BASH_ARGC}.
+The shell sets @code{BASH_ARGC} only when in extended debugging mode
+(see @ref{Bash Builtins}  
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin).
 
 @item BASH_ARGV
 An array variable containing all of the parameters in the current bash
@@ -4256,6 +4305,10 @@ execution call stack.  The final parameter of the last subroutine call
 is at the top of the stack; the first parameter of the initial call is
 at the bottom.  When a subroutine is executed, the parameters supplied
 are pushed onto @code{BASH_ARGV}.
+The shell sets @code{BASH_ARGV} only when in extended debugging mode
+(see @ref{Bash Builtins}  
+for a description of the @code{extdebug} option to the @code{shopt}
+builtin).
 
 @item BASH_COMMAND
 The command currently being executed or about to be executed, unless the
@@ -4274,8 +4327,8 @@ The command argument to the @option{-c} invocation option.
 An array variable whose members are the line numbers in source files
 corresponding to each member of @var{FUNCNAME}.
 @code{$@{BASH_LINENO[$i]@}} is the line number in the source file where
-@code{$@{FUNCNAME[$i + 1]@}} was called.
-The corresponding source file name is @code{$@{BASH_SOURCE[$i + 1]@}}.
+@code{$@{FUNCNAME[$i]@}} was called.
+The corresponding source file name is @code{$@{BASH_SOURCE[$i]@}}.
 Use @code{LINENO} to obtain the current line number.
 
 @item BASH_REMATCH
@@ -4731,6 +4784,10 @@ prompt when the shell is interactive.
 Bash terminates after that number of seconds if input does
 not arrive.
 
+@item TMPDIR
+If set, Bash uses its value as the name of a directory in which
+Bash creates temporary files for the shell's use.
+
 @item UID
 The numeric real user id of the current user.  This variable is readonly.
 
@@ -4783,7 +4840,7 @@ option).
 
 @item --dump-po-strings
 A list of all double-quoted strings preceded by @samp{$}
-is printed on the standard ouput
+is printed on the standard output
 in the @sc{gnu} @code{gettext} PO (portable object) file format.
 Equivalent to @option{-D} except for the output format.
 
@@ -4870,7 +4927,7 @@ when invoking an interactive shell.
 
 @item -D
 A list of all double-quoted strings preceded by @samp{$}
-is printed on the standard ouput.
+is printed on the standard output.
 These are the strings that
 are subject to language translation when the current locale
 is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
@@ -5166,6 +5223,7 @@ shell to exit.
 @item
 When running in @sc{posix} mode, a special builtin returning an error
 status will not cause the shell to exit (@pxref{Bash POSIX Mode}).
+
 @item
 A failed @code{exec} will not cause the shell to exit
 (@pxref{Bourne Shell Builtins}).
@@ -5201,6 +5259,9 @@ If the @var{file} argument to one of the primaries is one of
 @file{/dev/stdin}, @file{/dev/stdout}, or @file{/dev/stderr}, file
 descriptor 0, 1, or 2, respectively, is checked.
 
+Unless otherwise specified, primaries that operate on files follow symbolic
+links and operate on the target of the link, rather than the link itself.
+
 @table @code
 @item -a @var{file}
 True if @var{file} exists.
@@ -5414,7 +5475,7 @@ omitted, then base 10 is used.
 The digits greater than 9 are represented by the lowercase letters,
 the uppercase letters, @samp{@@}, and @samp{_}, in that order.
 If @var{base} is less than or equal to 36, lowercase and uppercase
-letters may be used interchangably to represent numbers between 10
+letters may be used interchangeably to represent numbers between 10
 and 35.
 
 Operators are evaluated in order of precedence.  Sub-expressions in
@@ -5534,12 +5595,18 @@ The braces are required to avoid
 conflicts with the shell's filename expansion operators.  If the
 @var{subscript} is @samp{@@} or @samp{*}, the word expands to all members
 of the array @var{name}.  These subscripts differ only when the word
-appears within double quotes.  If the word is double-quoted,
+appears within double quotes.
+If the word is double-quoted,
 @code{$@{name[*]@}} expands to a single word with
 the value of each array member separated by the first character of the
 @env{IFS} variable, and @code{$@{name[@@]@}} expands each element of
 @var{name} to a separate word.  When there are no array members,
-@code{$@{name[@@]@}} expands to nothing.  This is analogous to the
+@code{$@{name[@@]@}} expands to nothing.
+If the double-quoted expansion occurs within a word, the expansion of
+the first parameter is joined with the beginning part of the original
+word, and the expansion of the last parameter is joined with the last
+part of the original word.
+This is analogous to the
 expansion of the special parameters @samp{@@} and @samp{*}. 
 @code{$@{#name[}@var{subscript}@code{]@}} expands to the length of
 @code{$@{name[}@var{subscript}@code{]@}}.
@@ -5551,6 +5618,8 @@ referencing element zero.
 The @code{unset} builtin is used to destroy arrays.
 @code{unset} @var{name}[@var{subscript}]
 destroys the array element at index @var{subscript}.
+Care must be taken to avoid unwanted side effects caused by filename
+generation.
 @code{unset} @var{name}, where @var{name} is an array, removes the
 entire array. A subscript of @samp{*} or @samp{@@} also removes the
 entire array.
@@ -5843,7 +5912,13 @@ is stopped is `Stopped(@var{signame})', where @var{signame} is, for
 example, @code{SIGTSTP}.
 
 @item
-Reserved words may not be aliased.
+The @code{bg} builtin uses the required format to describe each job placed
+in the background, which does not include an indication of whether the job
+is the current or previous job.
+
+@item
+Reserved words appearing in a context where reserved words are recognized
+do not undergo alias expansion.
 
 @item
 The @sc{posix} 1003.2 @env{PS1} and @env{PS2} expansions of @samp{!} to
@@ -5894,7 +5969,7 @@ may not start with a digit.  Declaring a function with an invalid name
 causes a fatal syntax error in non-interactive shells.
 
 @item
-@sc{posix} 1003.2 `special' builtins are found before shell functions
+@sc{posix} 1003.2 special builtins are found before shell functions
 during command lookup.
 
 @item
@@ -5905,12 +5980,6 @@ redirection errors, variable assignment errors for assignments preceding
 the command name, and so on.
 
 @item
-If the @code{cd} builtin finds a directory to change to
-using @env{$CDPATH}, the
-value it assigns to the @env{PWD} variable does not contain any
-symbolic links, as if @samp{cd -P} had been executed.
-
-@item
 If @env{CDPATH} is set, the @code{cd} builtin will not implicitly
 append the current directory to it.  This means that @code{cd} will
 fail if no valid directory name can be constructed from
@@ -5989,29 +6058,61 @@ When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
 constructed from @code{$PWD} and the directory name supplied as an argument
 does not refer to an existing directory, @code{cd} will fail instead of
 falling back to @var{physical} mode.
+
+@item
+When the @code{pwd} builtin is supplied the @option{-P} option, it resets
+@code{$PWD} to a pathname containing no symlinks.
+
+@item
+The @code{pwd} builtin verifies that the value it prints is the same as the
+current directory, even if it is not asked to check the file system with the
+@option{-P} option.
+
+@item
+When listing the history, the @code{fc} builtin does not include an
+indication of whether or not a history entry has been modified.
+
+@item
+The default editor used by @code{fc} is @code{ed}.
+
+@item
+The @code{type} and @code{command} builtins will not report a non-executable
+file as having been found, though the shell will attempt to execute such a
+file if it is the only so-named file found in @code{$PATH}.
+
+@item
+The @code{vi} editing mode will invoke the @code{vi} editor directly when
+the @samp{v} command is run, instead of checking @code{$FCEDIT} and
+@code{$EDITOR}.
+
+@item
+When the @code{xpg_echo} option is enabled, Bash does not attempt to interpret
+any arguments to @code{echo} as options.  Each argument is displayed, after
+escape characters are converted.
+
 @end enumerate
 
-There is other @sc{posix} 1003.2 behavior that Bash does not implement.
+There is other @sc{posix} 1003.2 behavior that Bash does not implement by
+default even when in @sc{posix} mode.
 Specifically:
 
 @enumerate
-@item
-Assignment statements affect the execution environment of all
-builtins, not just special ones.
 
 @item
-When a subshell is created to execute a shell script with execute permission,
-but without a leading @samp{#!}, Bash sets @code{$0} to the full pathname of
-the script as found by searching @code{$PATH}, rather than the command as
-typed by the user.
+The @code{fc} builtin checks @code{$EDITOR} as a program to edit history
+entries if @code{FCEDIT} is unset, rather than defaulting directly to
+@code{ed}.  @code{fc} uses @code{ed} if @code{EDITOR} is unset.
 
 @item
-When using @samp{.} to source a shell script found in @code{$PATH}, bash
-checks execute permission bits rather than read permission bits, just as
-if it were searching for a command.
+As noted above, Bash requires the @code{xpg_echo} option to be enabled for
+the @code{echo} builtin to be fully conformant.
 
 @end enumerate
 
+Bash can be configured to be @sc{posix}-conformant by default, by specifying
+the @option{--enable-strict-posix-default} to @code{configure} when building
+(@pxref{Optional Features}).
+
 @node Job Control
 @chapter Job Control
 
@@ -6087,11 +6188,12 @@ There are a number of ways to refer to a job in the shell.  The
 character @samp{%} introduces a job name.
 
 Job number @code{n} may be referred to as @samp{%n}.
-The symbols @samp{%%} and
-@samp{%+} refer to the shell's notion of the current job, which
-is the last job stopped while it was in the foreground or started
-in the background.  The
-previous job may be referenced using @samp{%-}.  In output
+The symbols @samp{%%} and  @samp{%+} refer to the shell's notion of the
+current job, which is the last job stopped while it was in the foreground
+or started in the background.
+A single @samp{%} (with no accompanying job specification) also refers
+to the current job.
+The previous job may be referenced using @samp{%-}.  In output
 pertaining to jobs (e.g., the output of the @code{jobs} command),
 the current job is always flagged with a @samp{+}, and the
 previous job with a @samp{-}. 
@@ -6132,15 +6234,15 @@ Bash does not print another warning, and the stopped jobs are terminated.
 @item bg
 @btindex bg
 @example
-bg [@var{jobspec}]
+bg [@var{jobspec} @dots{}]
 @end example
-Resume the suspended job @var{jobspec} in the background, as if it
+Resume each suspended job @var{jobspec} in the background, as if it
 had been started with @samp{&}.
 If @var{jobspec} is not supplied, the current job is used.
 The return status is zero unless it is run when job control is not
-enabled, or, when run with job control enabled, if @var{jobspec} was
-not found or @var{jobspec} specifies a job that was started without
-job control.
+enabled, or, when run with job control enabled, any
+@var{jobspec} was not found or specifies a job
+that was started without job control.
 
 @item fg
 @btindex fg
@@ -6216,11 +6318,11 @@ or non-zero if an error occurs or an invalid option is encountered.
 @item wait
 @btindex wait
 @example
-wait [@var{jobspec} or @var{pid}]
+wait [@var{jobspec} or @var{pid} ...]
 @end example
-Wait until the child process specified by process @sc{id} @var{pid} or job
-specification @var{jobspec} exits and return the exit status of the last
-command waited for.
+Wait until the child process specified by each process @sc{id} @var{pid}
+or job specification @var{jobspec} exits and return the exit status of the
+last command waited for.
 If a job spec is given, all processes in the job are waited for.
 If no arguments are given, all currently active child processes are
 waited for, and the return status is zero.
@@ -6304,23 +6406,16 @@ Other independent ports exist for
 
 @menu
 * Basic Installation:: Installation instructions.
-
 * Compilers and Options::      How to set special options for various
                                systems.
-
 * Compiling For Multiple Architectures::       How to compile Bash for more
                                                than one kind of system from
                                                the same source tree.
-
 * Installation Names:: How to set the various paths used by the installation.
-
 * Specifying the System Type:: How to configure Bash for a particular system.
-
 * Sharing Defaults::   How to share default configuration values among GNU
                        programs.
-
 * Operation Controls:: Options recognized by the configuration program.
-
 * Optional Features::  How to enable and disable optional features when
                        building Bash.
 @end menu
@@ -6561,10 +6656,10 @@ Define if you are using the Andrew File System from Transarc.
 
 @item --with-bash-malloc
 Use the Bash version of
-@code{malloc} in @file{lib/malloc/malloc.c}.  This is not the same
+@code{malloc} in the directory @file{lib/malloc}.  This is not the same
 @code{malloc} that appears in @sc{gnu} libc, but an older version
-derived from the 4.2 @sc{bsd} @code{malloc}.  This @code{malloc} is
-very fast, but wastes some space on each allocation.
+originally derived from the 4.2 @sc{bsd} @code{malloc}.  This @code{malloc}
+is very fast, but wastes some space on each allocation.
 This option is enabled by default.
 The @file{NOTES} file contains a list of systems for
 which this should be turned off, and @code{configure} disables this
@@ -6581,7 +6676,7 @@ A synonym for @code{--with-bash-malloc}.
 @item --with-installed-readline[=@var{PREFIX}]
 Define this to make Bash link with a locally-installed version of Readline
 rather than the version in @file{lib/readline}.  This works only with
-Readline 4.3 and later versions.  If @var{PREFIX} is @code{yes} or not
+Readline 5.0 and later versions.  If @var{PREFIX} is @code{yes} or not
 supplied, @code{configure} uses the values of the make variables
 @code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
 by default, to find the installed version of Readline if it is not in
@@ -6669,6 +6764,9 @@ Include support for matching POSIX regular expressions using the
 @samp{=~} binary operator in the @code{[[} conditional command.
 (@pxref{Conditional Constructs}).
 
+@item --enable-debugger
+Include support for the bash debugger (distributed separately).
+
 @item --enable-directory-stack
 Include support for a @code{csh}-like directory stack and the
 @code{pushd}, @code{popd}, and @code{dirs} builtins
@@ -6714,17 +6812,17 @@ when used in redirections (@pxref{Redirections}).
 This enables process substitution (@pxref{Process Substitution}) if
 the operating system provides the necessary support.
 
+@item --enable-progcomp
+Enable the programmable completion facilities
+(@pxref{Programmable Completion}).
+If Readline is not enabled, this option has no effect.
+
 @item --enable-prompt-string-decoding
 Turn on the interpretation of a number of backslash-escaped characters
 in the @env{$PS1}, @env{$PS2}, @env{$PS3}, and @env{$PS4} prompt
 strings.  See @ref{Printing a Prompt}, for a complete list of prompt
 string escape sequences.
 
-@item --enable-progcomp
-Enable the programmable completion facilities
-(@pxref{Programmable Completion}).
-If Readline is not enabled, this option has no effect.
-
 @item --enable-readline
 Include support for command-line editing and history with the Bash
 version of the Readline library (@pxref{Command Line Editing}).
@@ -6738,6 +6836,19 @@ when called as @code{rbash}, enters a restricted mode.  See
 Include the @code{select} builtin, which allows the generation of simple
 menus (@pxref{Conditional Constructs}).
 
+@item --enable-separate-helpfiles
+Use external files for the documentation displayed by the @code{help} builtin
+instead of storing the text internally.
+
+@item --enable-single-help-strings
+Store the text displayed by the @code{help} builtin as a single string for
+each help topic.  This aids in translating the text to different languages.
+You may need to disable this if your compiler cannot handle very long string
+literals.
+
+@item --enable-strict-posix-default
+Make Bash @sc{posix}-conformant by default (@pxref{Bash POSIX Mode}).
+
 @item --enable-usg-echo-default
 A synonym for @code{--enable-xpg-echo-default}.
 
@@ -6746,7 +6857,7 @@ Make the @code{echo} builtin expand backslash-escaped characters by default,
 without requiring the @option{-e} option.
 This sets the default value of the @code{xpg_echo} shell option to @code{on},
 which makes the Bash @code{echo} behave more like the version specified in
-the Single Unix Specification, version 2.
+the Single Unix Specification, version 3.
 @xref{Bash Builtins}, for a description of the escape sequences that
 @code{echo} recognizes.
 
@@ -6810,8 +6921,8 @@ differences between the traditional Bourne shell and Bash; this
 section quickly details the differences of significance.  A
 number of these differences are explained in greater depth in
 previous sections.
-This section uses the version of @code{sh} included in SVR4.2 as
-the baseline reference.
+This section uses the version of @code{sh} included in SVR4.2 (the
+last version of the historical Bourne shell) as the baseline reference.
 
 @itemize @bullet
 
@@ -6863,6 +6974,8 @@ invocation options list the translatable strings found in a script
 Bash implements the @code{!} keyword to negate the return value of
 a pipeline (@pxref{Pipelines}).
 Very useful when an @code{if} statement needs to act only if a test fails.
+The Bash @samp{-o pipefail} option to @code{set} will cause a pipeline to
+return a failure status if any command fails.
 
 @item
 Bash has the @code{time} reserved word and command timing (@pxref{Pipelines}).
@@ -6879,7 +6992,12 @@ generation of simple menus (@pxref{Conditional Constructs}).
 
 @item
 Bash includes the @code{[[} compound command, which makes conditional
-testing part of the shell grammar (@pxref{Conditional Constructs}).
+testing part of the shell grammar (@pxref{Conditional Constructs}), including
+optional regular expression matching.
+
+@item
+Bash provides optional case-insensitive matching for the @code{case} and
+@code{[[} constructs.
 
 @item
 Bash includes brace expansion (@pxref{Brace Expansion}) and tilde
@@ -6901,6 +7019,10 @@ this unless the variables are explicitly marked using the @code{export}
 command.
 
 @item
+Bash supports the @samp{+=} assignment operator, which appends to the value
+of the variable named on the left hand side.
+
+@item
 Bash includes the @sc{posix} pattern removal @samp{%}, @samp{#}, @samp{%%}
 and @samp{##} expansions to remove leading or trailing substrings from
 variable values (@pxref{Shell Parameter Expansion}).
@@ -6992,6 +7114,14 @@ operator, for directing standard output and standard error to the same
 file (@pxref{Redirections}).
 
 @item
+Bash includes the @samp{<<<} redirection operator, allowing a string to
+be used as the standard input to a command.
+
+@item
+Bash implements the @samp{[n]<&@var{word}} and @samp{[n]>&@var{word}}
+redirection operators, which move one file descriptor to another.
+
+@item
 Bash treats a number of filenames specially when they are
 used in redirection operators (@pxref{Redirections}).
 
@@ -7126,7 +7256,9 @@ The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
 Commands specified with an @code{RETURN} trap are executed before
 execution resumes after a shell function or a shell script executed with
 @code{.} or @code{source} returns.
-The @code{RETURN} trap is not inherited by shell functions.
+The @code{RETURN} trap is not inherited by shell functions unless the
+function has been given the @code{trace} attribute or the
+@code{functrace} option has been enabled using the @code{shopt} builtin.
 
 @item
 The Bash @code{type} builtin is more extensive and gives more information
@@ -7159,6 +7291,10 @@ of @code{SIGHUP} to a job when the shell exits as the result of a
 @code{SIGHUP}.
 
 @item
+Bash includes a number of features to support a separate debugger for
+shell scripts.
+
+@item
 The SVR4.2 shell has two privilege-related builtins
 (@code{mldmode} and @code{priv}) not present in Bash.
 
diff --git a/doc/rose94.ps b/doc/rose94.ps
new file mode 100644 (file)
index 0000000..1fff283
--- /dev/null
@@ -0,0 +1,1581 @@
+%!PS-Adobe-3.0
+%%Creator: groff version 1.08
+%%DocumentNeededResources: font Times-Bold
+%%+ font Times-Italic
+%%+ font Times-Roman
+%%+ font Courier
+%%+ font Symbol
+%%DocumentSuppliedResources: procset grops 1.08 0
+%%Pages: 13
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset grops 1.08 0
+/setpacking where{
+pop
+currentpacking
+true setpacking
+}if
+/grops 120 dict dup begin
+/SC 32 def
+/A/show load def
+/B{0 SC 3 -1 roll widthshow}bind def
+/C{0 exch ashow}bind def
+/D{0 exch 0 SC 5 2 roll awidthshow}bind def
+/E{0 rmoveto show}bind def
+/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
+/G{0 rmoveto 0 exch ashow}bind def
+/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/I{0 exch rmoveto show}bind def
+/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
+/K{0 exch rmoveto 0 exch ashow}bind def
+/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/M{rmoveto show}bind def
+/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
+/O{rmoveto 0 exch ashow}bind def
+/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/Q{moveto show}bind def
+/R{moveto 0 SC 3 -1 roll widthshow}bind def
+/S{moveto 0 exch ashow}bind def
+/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
+/SF{
+findfont exch
+[exch dup 0 exch 0 exch neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/MF{
+findfont
+[5 2 roll
+0 3 1 roll 
+neg 0 0]makefont
+dup setfont
+[exch/setfont cvx]cvx bind def
+}bind def
+/level0 0 def
+/RES 0 def
+/PL 0 def
+/LS 0 def
+/PLG{
+gsave newpath clippath pathbbox grestore
+exch pop add exch pop
+}bind def
+/BP{
+/level0 save def
+1 setlinecap
+1 setlinejoin
+72 RES div dup scale
+LS{
+90 rotate
+}{
+0 PL translate
+}ifelse
+1 -1 scale
+}bind def
+/EP{
+level0 restore
+showpage
+}bind def
+/DA{
+newpath arcn stroke
+}bind def
+/SN{
+transform
+.25 sub exch .25 sub exch
+round .25 add exch round .25 add exch
+itransform
+}bind def
+/DL{
+SN
+moveto
+SN
+lineto stroke
+}bind def
+/DC{
+newpath 0 360 arc closepath
+}bind def
+/TM matrix def
+/DE{
+TM currentmatrix pop
+translate scale newpath 0 0 .5 0 360 arc closepath
+TM setmatrix
+}bind def
+/RC/rcurveto load def
+/RL/rlineto load def
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
+/FL{
+currentgray exch setgray fill setgray
+}bind def
+/BL/fill load def
+/LW/setlinewidth load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
+{
+1 index/FID ne{def}{pop pop}ifelse
+}forall
+/Encoding exch def
+dup/FontName exch def
+currentdict end definefont pop
+}bind def
+/DEFS 0 def
+/EBEGIN{
+moveto
+DEFS begin
+}bind def
+/EEND/end load def
+/CNT 0 def
+/level1 0 def
+/PBEGIN{
+/level1 save def
+translate
+div 3 1 roll div exch scale
+neg exch neg exch translate
+0 setgray
+0 setlinecap
+1 setlinewidth
+0 setlinejoin
+10 setmiterlimit
+[]0 setdash
+/setstrokeadjust where{
+pop
+false setstrokeadjust
+}if
+/setoverprint where{
+pop
+false setoverprint
+}if
+newpath
+/CNT countdictstack def
+userdict begin
+/showpage{}def
+}bind def
+/PEND{
+clear
+countdictstack CNT sub{end}repeat
+level1 restore
+}bind def
+end def
+/setpacking where{
+pop
+setpacking
+}if
+%%EndResource
+%%IncludeResource: font Times-Bold
+%%IncludeResource: font Times-Italic
+%%IncludeResource: font Times-Roman
+%%IncludeResource: font Courier
+%%IncludeResource: font Symbol
+grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL
+792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron/scaron/zcaron
+/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space
+/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft
+/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four
+/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C
+/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash
+/bracketright/circumflex/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q
+/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase
+/guillemotleft/guillemotright/bullet/florin/fraction/perthousand/dagger
+/daggerdbl/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
+/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
+/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen/brokenbar
+/section/dieresis/copyright/ordfeminine/guilsinglleft/logicalnot/minus
+/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu
+/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guilsinglright
+/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde
+/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
+/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
+/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve
+/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex
+/udieresis/yacute/thorn/ydieresis]def/Courier@0 ENC0/Courier RE/Times-Roman@0
+ENC0/Times-Roman RE/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0
+/Times-Bold RE
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 12/Times-Bold@0 SF(Bash, the Bour)210.99 123 Q(ne\255Again Shell)-.18 E/F1
+10/Times-Italic@0 SF(Chet Rame)263.85 147 Q(y)-.3 E(Case W)221.72 159 Q
+(estern Reserve Univer)-.92 E(sity)-.1 E -.15(ch)250.425 171 S(et@po.cwru.edu)
+.15 E(ABSTRA)264.535 213 Q(CT)-.3 E/F2 10/Times-Roman@0 SF .019(An o)133 237 R
+-.15(ve)-.15 G(rvie).15 E 2.519(wo)-.25 G 2.519(f/)191.918 237 S .018
+(bin/sh\255compatible shells is presented, as well as an introduction to)
+200.547 237 R .128(the POSIX.2 shell and tools standard.)108 249 R .128
+(These serv)5.128 F 2.628(ea)-.15 G 2.628(sa)318.562 249 S 2.628(ni)329.52 249
+S .128(ntroduction to bash.)339.928 249 R 2.628(Ac)5.128 G(ompar)439.32 249 Q
+(-)-.2 E .188(ison of bash to sh and ksh is presented, as well as a discussion\
+ of features unique to bash.)108 261 R(Finally)108 273 Q 3.178(,s)-.65 G .678
+(ome of the changes and ne)145.258 273 R 3.178(wf)-.25 G .678
+(eatures to appear in the ne)268.486 273 R .678(xt bash release will be)-.15 F
+(discussed.)108 285 Q/F3 10/Times-Bold@0 SF 2.5(1. Intr)72 321 R(oduction)-.18
+E(Bash)97 336.6 Q F2 .904(is the shell, or command language interpreter)3.404 F
+3.404(,t)-.4 G .904(hat will appear in the GNU operating system.)316.032 336.6
+R .782(The name is an acron)72 348.6 R .782(ym for the `)-.15 F(`Bourne\255Ag)
+-.74 E .782(ain SHell')-.05 F .782(', a pun on Ste)-.74 F 1.082 -.15(ve B)-.25
+H .783(ourne, the author of the direct).15 F .212(ancestor of the current)72
+360.6 R/F4 9/Times-Roman@0 SF(UNIX)2.712 E F2 2.712<8773>C(hell)199.131 360.6 Q
+F1(/bin/sh)2.712 E F2 2.712(,w)C .212(hich appeared in the Se)256.505 360.6 R
+-.15(ve)-.25 G .211(nth Edition Bell Labs Research v).15 F(er)-.15 E(-)-.2 E
+(sion of)72 372.6 Q F4(UNIX)2.5 E F2([1].).833 E .191(Bash is an)97 388.2 R F3
+(sh)2.691 E F2 .192
+(\255compatible shell that incorporates useful features from the K)B .192
+(orn shell \()-.35 F F3(ksh)A F2 .833(\)[)C .192(2] and the)-.833 F 2.767(Cs)72
+400.2 S .267(hell \()85.327 400.2 R F3(csh)A F2 .833(\)[)C .267
+(3], described later in this article.)-.833 F .266
+(It is ultimately intended to be a conformant implementation)5.267 F 1.965
+(of the IEEE POSIX Shell and T)72 412.2 R 1.966(ools speci\214cation \(IEEE W)
+-.8 F 1.966(orking Group 1003.2\).)-.8 F 1.966(It of)6.966 F 1.966
+(fers functional)-.25 F(impro)72 424.2 Q -.15(ve)-.15 G(ments o).15 E -.15(ve)
+-.15 G 2.5(rs).15 G 2.5(hf)155.28 424.2 S(or both interacti)166.11 424.2 Q .3
+-.15(ve a)-.25 H(nd programming use.).15 E .802
+(While the GNU operating system will most lik)97 439.8 R .801(ely include a v)
+-.1 F .801(ersion of the Berk)-.15 F(ele)-.1 E 3.301(ys)-.15 G .801
+(hell csh, bash)448.238 439.8 R .108(will be the def)72 451.8 R .108
+(ault shell.)-.1 F(Lik)5.108 E 2.608(eo)-.1 G .108(ther GNU softw)199.658 451.8
+R .108(are, bash is quite portable.)-.1 F .109(It currently runs on nearly e)
+5.109 F -.15(ve)-.25 G(ry).15 E -.15(ve)72 463.8 S .367(rsion of).15 F F4(UNIX)
+2.867 E F2 .367(and a fe)2.867 F 2.867(wo)-.25 G .367
+(ther operating systems \255 an independently-supported port e)187.933 463.8 R
+.366(xists for OS/2, and)-.15 F .706(there are rumors of ports to DOS and W)72
+475.8 R(indo)-.4 E .706(ws NT)-.25 F 5.706(.P)-.74 G .706(orts to)295.97 475.8
+R F4(UNIX)3.206 E F2(-lik)A 3.206(es)-.1 G .706(ystems such as QNX and Minix)
+372.979 475.8 R(are part of the distrib)72 487.8 Q(ution.)-.2 E .51
+(The original author of bash w)97 503.4 R .51(as Brian F)-.1 F .509
+(ox, an emplo)-.15 F .509(yee of the Free Softw)-.1 F .509(are F)-.1 F 3.009
+(oundation. The)-.15 F(cur)3.009 E(-)-.2 E(rent de)72 515.4 Q -.15(ve)-.25 G
+(loper and maintainer is Chet Rame).15 E 1.3 -.65(y, a v)-.15 H(olunteer who w)
+.45 E(orks at Case W)-.1 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)458.91 515.4 Q
+-.15(ve)-.25 G(rsity).15 E(.)-.65 E F3 2.5(2. What)72 539.4 R(is a shell?)2.5 E
+F2 1.241(At its base, a shell is simply a macro processor that e)97 555 R -.15
+(xe)-.15 G 1.242(cutes commands.).15 F(A)6.242 E F4(UNIX)3.742 E F2 1.242
+(shell is both a)3.742 F .189(command interpreter)72 567 R 2.688(,w)-.4 G .188
+(hich pro)167.787 567 R .188(vides the user interf)-.15 F .188
+(ace to the rich set of)-.1 F F4(UNIX)2.688 E F2 .188
+(utilities, and a programming)2.688 F .751(language, allo)72 579 R .752
+(wing these utilitites to be combined.)-.25 F .752
+(The shell reads commands either from a terminal or a)5.752 F 2.52
+(\214le. Files)72 591 R .019
+(containing commands can be created, and become commands themselv)2.52 F 2.519
+(es. These)-.15 F(ne)2.519 E 2.519(wc)-.25 G(ommands)465.11 591 Q(ha)72 603 Q
+.395 -.15(ve t)-.2 H .095(he same status as system commands in directories lik)
+.15 F(e)-.1 E F3(/bin)2.595 E F2 2.595(,a)C(llo)342.575 603 Q .096
+(wing users or groups to establish cus-)-.25 F(tom en)72 615 Q(vironments.)-.4
+E F3 2.5(2.1. Command)72 639 R(Inter)2.5 E(pr)-.1 E(eter)-.18 E F2 2.926(As)97
+654.6 S .426(hell allo)111.036 654.6 R .426(ws e)-.25 F -.15(xe)-.15 G .426
+(cution of).15 F F4(UNIX)2.926 E F2 .426
+(commands, both synchronously and asynchronously)2.926 F 5.425(.T)-.65 G(he)
+460.165 654.6 Q F1 -.37(re)2.925 G(dir).37 E(ec-)-.37 E(tion)72 666.6 Q F2 .334
+(constructs permit \214ne-grained control of the input and output of those com\
+mands, and the shell allo)2.833 F(ws)-.25 E .559(control o)72 678.6 R -.15(ve)
+-.15 G 3.058(rt).15 G .558(he contents of their en)126.697 678.6 R(vironment.)
+-.4 E F4(UNIX)5.558 E F2 .558(shells also pro)3.058 F .558
+(vide a small set of b)-.15 F .558(uilt-in commands)-.2 F(\()72 690.6 Q F1 -.2
+(bu)C(iltins).2 E F2 4.611(\)i)C 2.112
+(mplementing functionality impossible \(e.g.,)115.861 690.6 R F3(cd)4.612 E F2
+(,)A F3(br)4.612 E(eak)-.18 E F2(,)A F3(continue)4.612 E F2 4.612(,a)C(nd)
+399.074 690.6 Q F3(exec)4.612 E F2 4.612(\)o)C 4.612(ri)444.948 690.6 S(ncon)
+455.67 690.6 Q -.15(ve)-.4 G(nient).15 E .32 LW 76 700.6 72 700.6 DL 80 700.6
+76 700.6 DL 84 700.6 80 700.6 DL 88 700.6 84 700.6 DL 92 700.6 88 700.6 DL 96
+700.6 92 700.6 DL 100 700.6 96 700.6 DL 104 700.6 100 700.6 DL 108 700.6 104
+700.6 DL 112 700.6 108 700.6 DL 116 700.6 112 700.6 DL 120 700.6 116 700.6 DL
+124 700.6 120 700.6 DL 128 700.6 124 700.6 DL 132 700.6 128 700.6 DL 136 700.6
+132 700.6 DL 140 700.6 136 700.6 DL 144 700.6 140 700.6 DL/F5 8/Times-Roman@0
+SF 2<8755>72 710.6 S(NIX is a trademark of X/OPEN)83.776 710.6 Q EP
+%%Page: 2 2
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-2-)279.67 48 S(\()72 84 Q/F1 10/Times-Bold@0 SF
+(history)A F0(,)A F1(getopts)3.505 E F0(,)A F1(kill)3.505 E F0 3.505(,o)C(r)
+172.795 84 Q F1(pwd)3.505 E F0 3.505(,f)C 1.005(or e)207.305 84 R 1.005
+(xample\) to obtain via separate utilities.)-.15 F 1.005
+(Shells may be used interac-)6.005 F(ti)72 96 Q -.15(ve)-.25 G
+(ly or non-interacti).15 E -.15(ve)-.25 G 2.5(ly: the).15 F 2.5(ya)-.15 G
+(ccept input typed from the k)207.42 96 Q -.15(ey)-.1 G
+(board or from a \214le.).15 E F1 2.5(2.2. Pr)72 120 R(ogramming Language)-.18
+E F0 .501(While e)97 135.6 R -.15(xe)-.15 G .501
+(cuting commands is essential, most of the po).15 F .501(wer \(and comple)-.25
+F .502(xity\) of shells is due to their)-.15 F .05
+(embedded programming languages.)72 147.6 R(Lik)5.049 E 2.549(ea)-.1 G .349
+-.15(ny h)245.398 147.6 T(igh-le).15 E -.15(ve)-.25 G 2.549(ll).15 G .049
+(anguage, the shell pro)303.276 147.6 R .049(vides v)-.15 F .049
+(ariables, \215o)-.25 F 2.549(wc)-.25 G(ontrol)480.11 147.6 Q
+(constructs, quoting, and functions.)72 159.6 Q .475
+(The basic syntactic element is a)97 175.2 R/F2 10/Times-Italic@0 SF .475
+(simple command)2.975 F F0 5.475(.A)C .475
+(simple command consists of an optional set of)315.405 175.2 R -.25(va)72 187.2
+S .525(riable assignments, a command w).25 F .525
+(ord, and an optional list of ar)-.1 F 3.024(guments. Operators)-.18 F .524
+(to redirect input and)3.024 F(output may appear an)72 199.2 Q
+(ywhere in a simple command.)-.15 E(Some e)5 E(xamples are:)-.15 E/F3 10
+/Courier@0 SF(who)97 211.2 Q(trn -e -S1 -N)97 223.2 Q(ls -l /bin > binfiles)97
+235.2 Q(make > make.out 2>make.errs)97 247.2 Q F0 2.518(Ap)97 262.8 S .018
+(ipeline is a sequence of tw)111.738 262.8 R 2.518(oo)-.1 G 2.518(rm)230.056
+262.8 S .018(ore commands separated by the character)243.684 262.8 R/F4 10
+/Symbol SF<ef>2.519 E F0 5.019(.T)C .019(he standard output)430.082 262.8 R
+(of the \214rst command is connected to the standard input of the second.)72
+274.8 Q(Examples of pipelines include:)5 E F3(who | wc -l)97 286.8 Q
+(ls -l | sort +3nr)97 298.8 Q F0 .578
+(Simple commands and pipelines may be combined into)97 314.4 R F2(lists)3.078 E
+F0 5.578(.A)C .578(list is a sequence of pipelines sepa-)360.002 314.4 R .289
+(rated by one of)72 326.4 R F1(;)2.789 E F0(,)A F1(&)2.789 E F0(,)A F1(&&)2.789
+E F0 2.789(,o)C(r)185.103 326.4 Q F4<efef>2.789 E F0 2.789(,a)C .289
+(nd optionally terminated by)210.831 326.4 R F1(;)2.789 E F0(,)A F1(&)2.789 E
+F0 2.789(,o)C 2.789(ran)352.555 326.4 S -.25(ew)370.903 326.4 S 2.789
+(line. Commands).25 F .289(separated by)2.789 F F1(;)72 338.4 Q F0 .336(are e)
+2.836 F -.15(xe)-.15 G .336(cuted sequentially; the shell w).15 F .335
+(aits for each to complete in turn.)-.1 F .335(If a command is terminated by)
+5.335 F F1(&)2.835 E F0(,)A .007(the shell e)72 350.4 R -.15(xe)-.15 G .007
+(cutes it in the).15 F F2(bac)2.507 E(kgr)-.2 E(ound)-.45 E F0 2.508(,a)1.666 G
+.008(nd does not w)236.076 350.4 R .008(ait for it to \214nish.)-.1 F .008
+(If tw)5.008 F 2.508(oc)-.1 G .008(ommands are separated by)397.616 350.4 R F1
+(&&)72 362.4 Q F0 3.008(,t)C .508(he second command e)96.948 362.4 R -.15(xe)
+-.15 G .508(cutes only if the \214rst command succeeds.).15 F 3.007(As)5.508 G
+.507(eparator of)383.575 362.4 R F4<efef>3.007 E F0 .507(causes the sec-)3.007
+F(ond command to e)72 374.4 Q -.15(xe)-.15 G(cute only if the \214rst f).15 E
+2.5(ails. Some)-.1 F -.15(ex)2.5 G(amples are:).15 E F3(who ; date)97 386.4 Q
+(cd /usr/src || exit 1)97 398.4 Q(cd "$@" && xtitle $HOST: $PWD)97 410.4 Q F0
+1.36(The shell programming language pro)97 426 R 1.361(vides a v)-.15 F 1.361
+(ariety of \215o)-.25 F 3.861(wc)-.25 G 1.361(ontrol structures.)353.276 426 R
+(The)6.361 E F1 -.25(fo)3.861 G(r).25 E F0(command)3.861 E(allo)72 438 Q .654
+(ws a list of commands to be e)-.25 F -.15(xe)-.15 G .654
+(cuted once for each w).15 F .654(ord in a w)-.1 F .654(ord list.)-.1 F(The)
+5.654 E F1(case)3.154 E F0 .654(command allo)3.154 F .654(ws a)-.25 F .627
+(list to be e)72 450 R -.15(xe)-.15 G .628(cuted if a w).15 F .628
+(ord matches a speci\214ed pattern.)-.1 F(The)5.628 E F1(while)3.128 E F0(and)
+3.128 E F1(until)3.128 E F0 .628(commands e)3.128 F -.15(xe)-.15 G .628
+(cute a list of).15 F 1.559
+(commands as long as a guard command completes successfully or f)72 462 R 1.559
+(ails, respecti)-.1 F -.15(ve)-.25 G(ly).15 E 6.559(.T)-.65 G(he)440.892 462 Q
+F1(if)4.059 E F0(command)4.059 E(allo)72 474 Q(ws e)-.25 E -.15(xe)-.15 G
+(cution of dif).15 E(ferent command lists depending on the e)-.25 E
+(xit status of a guard command.)-.15 E(A)97 489.6 Q F2 .385(shell function)
+2.885 F F0 .385(associates a list of commands with a name.)2.885 F .386
+(Each time the name is used as a simple)5.385 F .938(command, the list is e)72
+501.6 R -.15(xe)-.15 G 3.438(cuted. This).15 F -.15(exe)3.438 G .938
+(cution tak).15 F .938(es place in the current shell conte)-.1 F .937
+(xt; no ne)-.15 F 3.437(wp)-.25 G .937(rocess is)468.903 501.6 R 2.5
+(created. Functions)72 513.6 R(may ha)2.5 E .3 -.15(ve t)-.2 H(heir o).15 E
+(wn ar)-.25 E(gument lists and local v)-.18 E(ariables, and may be recursi)-.25
+E -.15(ve)-.25 G(.).15 E .722(The shell language pro)97 529.2 R .722(vides v)
+-.15 F .722(ariables, which may be both set and referenced.)-.25 F 3.222(An)
+5.722 G .722(umber of special)435.906 529.2 R 1.02
+(parameters are present, such as)72 541.2 R F1($@)3.519 E F0 3.519(,w)C 1.019
+(hich returns the shell')231.257 541.2 R 3.519(sp)-.55 G 1.019
+(ositional parameters \(command-line ar)333.103 541.2 R(gu-)-.18 E(ments\),)72
+553.2 Q F1($?)2.906 E F0 2.906(,t)C .406(he e)122.812 553.2 R .406
+(xit status of the pre)-.15 F .406(vious command, and)-.25 F F1($$)2.906 E F0
+2.906(,t)C .406(he shell')322.436 553.2 R 2.906(sp)-.55 G .406(rocess I.D.)
+368.248 553.2 R .407(In addition to pro)5.406 F(vid-)-.15 E .129
+(ing special parameters and user)72 565.2 R .129(-de\214ned v)-.2 F .129
+(ariables, the shell permits the v)-.25 F .128(alues of certain v)-.25 F .128
+(ariables to control)-.25 F .16(its beha)72 577.2 R(vior)-.2 E 5.16(.S)-.55 G
+.16(ome of these v)131.57 577.2 R .16(ariables include)-.25 F F1(IFS)2.661 E F0
+2.661(,w)C .161(hich controls ho)284.202 577.2 R 2.661(wt)-.25 G .161
+(he shell splits w)361.375 577.2 R(ords,)-.1 E F1 -.74(PA)2.661 G(TH)-.21 E F0
+2.661(,w)C(hich)486.78 577.2 Q .392
+(tells the shell where to look for commands, and)72 589.2 R F1(PS1)2.892 E F0
+2.892(,w)C .392(hose v)297.01 589.2 R .392
+(alue is the string the shell uses to prompt for)-.25 F 3.371(commands. There)
+72 601.2 R .871(are a fe)3.371 F 3.371(wv)-.25 G .871(ariables whose v)196.645
+601.2 R .871(alues are set by the shell and normally only referenced by)-.25 F
+(users;)72 613.2 Q F1(PWD)3.663 E F0 3.663(,w)C 1.163(hose v)135.706 613.2 R
+1.163(alue is the pathname of the shell')-.25 F 3.662(sc)-.55 G 1.162(urrent w)
+313.068 613.2 R 1.162(orking directory)-.1 F 3.662(,i)-.65 G 3.662(so)421.894
+613.2 S 1.162(ne such v)434.446 613.2 R(ariable.)-.25 E -1.11(Va)72 625.2 S
+.008(riables can be used in nearly an)1.11 F 2.509(ys)-.15 G .009(hell conte)
+219.37 625.2 R .009(xt and are particularly v)-.15 F .009
+(aluable when used with control struc-)-.25 F(tures.)72 637.2 Q .583
+(There are se)97 652.8 R -.15(ve)-.25 G .583(ral shell).15 F F2 -.2(ex)3.083 G
+(pansions).2 E F0 5.583(.A)C -.25(va)254.298 652.8 S(riable).25 E F2(name)3.083
+E F0 .583(is e)3.083 F .582(xpanded to its v)-.15 F .582(alue using ${)-.25 F
+F2(name)A F0 .582(}, where)B 1.387(the braces are optional.)72 664.8 R 1.387
+(There are a number of parameter e)6.387 F 1.388(xpansions a)-.15 F -.25(va)-.2
+G 3.888(ilable. F).25 F 1.388(or e)-.15 F 1.388(xample, there are)-.15 F(${)72
+676.8 Q F2(name)A F0<3aad>A F2(wor)A(d)-.37 E F0 .891(}, which e)B .891
+(xpands to)-.15 F F2(wor)3.391 E(d)-.37 E F0(if)3.391 E F2(name)3.391 E F0 .891
+(is unset or null, and the in)3.391 F -.15(ve)-.4 G .89(rse ${).15 F F2(name)A
+F0(:+)A F2(wor)A(d)-.37 E F0 .89(}, which)B -.15(ex)72 688.8 S 1.203(pands to)
+.15 F F2(wor)3.703 E(d)-.37 E F0(if)3.703 E F2(name)3.703 E F0 1.203
+(is set and not null.)3.703 F F2 1.203(Command substitution)6.203 F F0(allo)
+3.703 E 1.204(ws the output of a command to)-.25 F .918
+(replace the command name.)72 700.8 R .918(The syntax is `)5.918 F F2(command)A
+F0(`.)A F2(Command)5.918 E F0 .918(is e)3.418 F -.15(xe)-.15 G .918
+(cuted and it and the backquotes).15 F .299
+(are replaced by its output, with trailing ne)72 712.8 R .299(wlines remo)-.25
+F -.15(ve)-.15 G(d.).15 E F2 -.8(Pa)5.299 G .299(thname e).8 F(xpansion)-.2 E
+F0 .299(is a w)2.799 F .299(ay to e)-.1 F .299(xpand a w)-.15 F(ord)-.1 E 1.586
+(to a set of \214lenames.)72 724.8 R -.8(Wo)6.586 G 1.586(rds are re).8 F -.05
+(ga)-.15 G 1.586(rded as patterns, in which the characters).05 F F1(*)4.086 E
+F0(,)A F1(?)4.086 E F0 4.085(,a)C(nd)432.115 724.8 Q F1([)4.085 E F0(ha)4.085 E
+1.885 -.15(ve s)-.2 H(pecial).15 E EP
+%%Page: 3 3
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-3-)279.67 48 S 2.845(meaning. W)72 84 R .346(ords\
+ containing these special characters are replaced with a sorted list of matchi\
+ng pathnames.)-.8 F(If a w)72 96 Q
+(ord generates no matches, it is left unchanged.)-.1 E/F1 10/Times-Italic@0 SF
+(Quoting)97 111.6 Q F0 .85(is used to remo)3.35 F 1.15 -.15(ve t)-.15 H .85
+(he special meaning of characters or w).15 F 3.35(ords. It)-.1 F .85
+(can disable special treat-)3.35 F .314
+(ment for shell operators or other special characters, pre)72 123.6 R -.15(ve)
+-.25 G .315(nt reserv).15 F .315(ed w)-.15 F .315
+(ords from being recognized as such,)-.1 F .683(and inhibit v)72 135.6 R .683
+(ariable e)-.25 F 3.183(xpansion. The)-.15 F .683
+(shell has three quoting mechanisms:)3.183 F 3.183(ab)5.683 G .683
+(ackslash preserv)387.413 135.6 R .682(es the literal)-.15 F -.25(va)72 147.6 S
+.417(lue of the ne).25 F .417(xt character)-.15 F 2.917(,ap)-.4 G .417
+(air of single quotes preserv)196.712 147.6 R .417(es the literal v)-.15 F .418
+(alue of each character between the)-.25 F 1.426
+(quotes, and a pair of double quotes preserv)72 159.6 R 1.425
+(es the literal meaning of enclosed characters while allo)-.15 F(wing)-.25 E
+(some e)72 171.6 Q(xpansions.)-.15 E 1.054(Some of the commands b)97 187.2 R
+1.054(uilt into the shell are part of the programming language.)-.2 F(The)6.055
+E/F2 10/Times-Bold@0 SF(br)3.555 E(eak)-.18 E F0(and)3.555 E F2(continue)72
+199.2 Q F0 1.175(commands control loop e)3.675 F -.15(xe)-.15 G 1.175
+(cution as in the C language.).15 F(The)6.175 E F2 -2.3 -.15(ev a)3.675 H(l).15
+E F0 -.2(bu)3.675 G 1.174(iltin allo).2 F 1.174(ws a string to be)-.25 F .204
+(parsed and e)72 211.2 R -.15(xe)-.15 G .204(cuted as a command.).15 F F2 -.65
+(Wa)5.205 G(it).65 E F0 .205
+(tells the shell to pause until the processes speci\214ed as ar)2.705 F
+(guments)-.18 E(ha)72 223.2 Q .3 -.15(ve ex)-.2 H(ited.).15 E F2 2.5
+(2.3. Interacti)72 247.2 R .2 -.1(ve F)-.1 H(eatur)-.15 E(es)-.18 E F0 .51
+(Shells ha)97 262.8 R .81 -.15(ve b)-.2 H -.15(eg).15 G .51(un of).15 F .51
+(fering features geared speci\214cally for interacti)-.25 F .81 -.15(ve u)-.25
+H .51(se rather than to augment the).15 F .76(programming language.)72 274.8 R
+.761(These interacti)5.76 F 1.061 -.15(ve f)-.25 H .761
+(eatures include job control, command line editing, history and).15 F(aliases.)
+72 286.8 Q .626(Job control is a f)97 302.4 R .626(acility pro)-.1 F .626
+(vided jointly by the shell and the)-.15 F/F3 9/Times-Roman@0 SF(UNIX)3.125 E
+F0 -.1(ke)3.125 G .625(rnel that allo).1 F .625(ws users to selec-)-.25 F(ti)72
+314.4 Q -.15(ve)-.25 G .344
+(ly stop \(suspend\) and restart \(resume\) processes.).15 F .345
+(Each pipeline e)5.345 F -.15(xe)-.15 G .345
+(cuted by the shell is referred to as a).15 F F1(job)72 326.4 Q F0 2.989(.J)C
+.488(obs may be suspended and restarted in either the fore)94.159 326.4 R .488
+(ground, where the)-.15 F 2.988(yh)-.15 G -2.25 -.2(av e)397.148 326.4 T .488
+(access to the terminal,)3.188 F .833(or background, where the)72 338.4 R 3.333
+(ya)-.15 G .834(re isolated and cannot read from the terminal.)189.312 338.4 R
+-.8(Ty)5.834 G .834(ping the).8 F F1(suspend)3.334 E F0(character)5 E .459(whi\
+le a process is running stops that process and returns control to the shell.)72
+350.4 R .459(Once a job is suspended, the)5.459 F .392
+(user manipulates the job')72 362.4 R 2.892(ss)-.55 G .392(tate, using)184.118
+362.4 R F2(bg)2.892 E F0 .393(to continue it in the background,)2.892 F F2(fg)
+2.893 E F0 .393(to return it to the fore)2.893 F(ground)-.15 E .891(and a)72
+374.4 R -.1(wa)-.15 G .891(it its completion, or).1 F F2(kill)3.391 E F0 .891
+(to send it a signal.)3.391 F(The)5.89 E F2(jobs)3.39 E F0 .89
+(command lists the status of jobs, and)3.39 F F2(wait)3.39 E F0 .407
+(will pause the shell until a speci\214ed job terminates.)72 386.4 R .407
+(The shell pro)5.407 F .407(vides a number of w)-.15 F .407
+(ays to refer to a job,)-.1 F(and will notify the user whene)72 398.4 Q -.15
+(ve)-.25 G 2.5(rab).15 G(ackground job terminates.)220.18 398.4 Q -.4(Wi)97 414
+S .956(th the adv).4 F .956(ent of more po)-.15 F .956
+(werful terminals and terminal emulators, more sophisticated interaction)-.25 F
+.253(than that pro)72 426 R .253(vided by the)-.15 F F3(UNIX)2.753 E F0 -.1(ke)
+2.754 G .254(rnel terminal dri).1 F -.15(ve)-.25 G 2.754(ri).15 G 2.754(sp)
+293.592 426 S 2.754(ossible. Some)305.236 426 R .254(shells of)2.754 F .254
+(fer command line editing,)-.25 F 1.141
+(which permits a user to edit lines of input using f)72 438 R(amiliar)-.1 E F1
+(emacs)3.64 E F0(or)3.64 E F1(vi)3.64 E F0 1.14
+(-style commands before submitting)B .02(them to the shell.)72 450 R .02
+(Editors allo)5.02 F 2.52(wc)-.25 G .02(orrections to be made without ha)206.31
+450 R .021(ving to erase back to the point of error)-.2 F 2.521(,o)-.4 G(r)
+500.67 450 Q .135(start the line ane)72 462 R 3.935 -.65(w. C)-.25 H .135
+(ommand line editors run the g).65 F .135(amut from a small \214x)-.05 F .134
+(ed set of commands and k)-.15 F .434 -.15(ey b)-.1 H(ind-).15 E
+(ings to input f)72 474 Q(acilities which allo)-.1 E 2.5(wa)-.25 G
+(rbitrary actions to be bound to a k)217.2 474 Q .3 -.15(ey o)-.1 H 2.5(rk).15
+G .3 -.15(ey s)379.88 474 T(equence.).15 E .145(Modern shells also k)97 489.6 R
+.145(eep a history)-.1 F 2.645(,w)-.65 G .146
+(hich is the list of commands a user has typed.)243.49 489.6 R .146(Shell f)
+5.146 F .146(acilities are)-.1 F -.2(av)72 501.6 S .368(ailable to recall pre)
+-.05 F .367(vious commands and use portions of old commands when composing ne)
+-.25 F 2.867(wo)-.25 G 2.867(nes. The)467.253 501.6 R 1.456
+(command history can be sa)72 513.6 R -.15(ve)-.2 G 3.957(dt).15 G 3.957
+(oa\214)207.522 513.6 S 1.457
+(le and read back in at shell startup, so it persists across sessions.)230.436
+513.6 R .675(Shells which pro)72 525.6 R .675
+(vide both command editing and history generally ha)-.15 F .974 -.15(ve e)-.2 H
+.674(diting commands to interacti).15 F -.15(ve)-.25 G(ly).15 E(step forw)72
+537.6 Q(ard and backw)-.1 E(ard through the history list.)-.1 E .013
+(Aliases allo)97 553.2 R -5.012 2.513(wa s)-.25 H .014
+(tring to be substituted for a command name.)164.28 553.2 R(The)5.014 E 2.514
+(yc)-.15 G .014(an be used to create a mnemonic)373.396 553.2 R .568(for a)72
+565.2 R F3(UNIX)3.068 E F0 .568(command name \()3.068 F/F4 10/Courier@0 SF .568
+(alias del=rm)B F0 .568(\), to e)B .567(xpand a single w)-.15 F .567
+(ord to a comple)-.1 F 3.067(xc)-.15 G .567(ommand \()432.603 565.2 R F4(alias)
+A .255(news='xterm -g 80x45 -title trn -e trn -e -S1 -N &')72 577.2 R F0 .255
+(\), or to ensure that a command)B(is in)72 589.2 Q -.2(vo)-.4 G -.1(ke).2 G
+2.5(dw).1 G(ith a basic set of options \()122.41 589.2 Q F4
+(alias ls="/bin/ls -F")A F0(\).)A F2 2.5(3. The)72 613.2 R
+(POSIX Shell Standard)2.5 E F1(POSIX)97 628.8 Q F0 .239
+(is a name originally coined by Richard Stallman for a f)4.405 F .239
+(amily of open system standards based)-.1 F(on)72 640.8 Q F3(UNIX)3.239 E F0
+5.739(.T)C .74(here are a number of aspects of)122.079 640.8 R F3(UNIX)3.24 E
+F0 .74(under consideration for standardization, from the basic)3.24 F .192
+(system services at the system call and C library le)72 652.8 R -.15(ve)-.25 G
+2.692(lt).15 G 2.692(oa)290.16 652.8 S .191
+(pplications and tools to system administration and)302.292 652.8 R 2.5
+(management. Each)72 664.8 R(area of standardization is assigned to a w)2.5 E
+(orking group in the 1003 series.)-.1 E 3.602(The POSIX Shell and T)97 680.4 R
+3.602(ools standard has been de)-.8 F -.15(ve)-.25 G 3.603(loped by IEEE W).15
+F 3.603(orking Group 1003.2)-.8 F -1.667(\(POSIX.2\) [4].)72 692.4 R 2.799
+(It concentrates on the command interpreter interf)7.799 F 2.799
+(ace and utility programs commonly)-.1 F -.15(exe)72 704.4 S 2.345
+(cuted from the command line or by other programs.).15 F 2.345(An initial v)
+7.345 F 2.345(ersion of the standard has been)-.15 F(appro)72 716.4 Q -.15(ve)
+-.15 G 2.915(da).15 G .414(nd published by the IEEE, and w)116.265 716.4 R .414
+(ork is currently underw)-.1 F .414(ay to update it.)-.1 F .414
+(There are four primary)5.414 F(areas of w)72 728.4 Q
+(ork in the 1003.2 standard:)-.1 E EP
+%%Page: 4 4
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-4-)279.67 48 S 21.5<8341>72 84 S .835
+(spects of the shell')104.22 84 R 3.335(ss)-.55 G .835
+(yntax and command language.)192 84 R 3.335(An)5.835 G .835(umber of special b)
+338.095 84 R .835(uiltins such as)-.2 F/F1 10/Times-Bold@0 SF(cd)3.335 E F0
+(and)3.335 E F1(exec)97 96 Q F0 .545(are being speci\214ed as part of the shel\
+l, since their functionality usually cannot be implemented)3.046 F
+(by a separate e)97 108 Q -.15(xe)-.15 G(cutable;).15 E 21.5<8341>72 123.6 S
+.73(set of utilities to be called by shell scripts and applications.)107.45
+123.6 R .731(Examples are programs lik)5.731 F(e)-.1 E/F2 10/Times-Italic@0 SF
+2.397(sed, tr)3.231 F(,)-1.11 E F0(and)97 135.6 Q F2(awk.)2.853 E F0 .352
+(Utilities commonly implemented as shell b)4.519 F .352
+(uiltins are described in this section, such as)-.2 F F1(test)2.852 E F0(and)97
+147.6 Q F1(kill)3.422 E F0 5.922(.A)C 3.422(ne)144.404 147.6 S .922
+(xpansion of this section')157.116 147.6 R 3.423(ss)-.55 G .923
+(cope, termed the User Portability Extension, or UPE, has)268.586 147.6 R
+(standardized interacti)97 159.6 Q .3 -.15(ve p)-.25 H(rograms such as).15 E F2
+(vi)2.5 E F0(and)4.166 E F2(mailx;)2.5 E F0 21.5<8341>72 175.2 S .926
+(group of functional interf)107.646 175.2 R .926(aces to services pro)-.1 F
+.926(vided by the shell, such as the traditional)-.15 F F2(system)3.425 E F0(C)
+5.091 E .507(library function.)97 187.2 R .507
+(There are functions to perform shell w)5.507 F .508(ord e)-.1 F .508
+(xpansions, perform \214lename e)-.15 F(xpansion)-.15 E(\()97 199.2 Q F2
+(globbing)A F0 .58(\), obtain v)B .58
+(alues of POSIX.2 system con\214guration v)-.25 F .58(ariables, retrie)-.25 F
+.88 -.15(ve v)-.25 H .58(alues of en)-.1 F(vironment)-.4 E -.25(va)97 211.2 S
+(riables \().25 E F2 -.1(ge)C(ten).1 E(v\(\))-.4 E F0(\), and other services;)
+.833 E 21.5<8341>72 226.8 S(suite of `)106.72 226.8 Q(`de)-.74 E -.15(ve)-.25 G
+(lopment').15 E 2.5('u)-.74 G(tilities such as)209.54 226.8 Q F2(c89)2.5 E F0
+(\(the POSIX.2 v)4.166 E(ersion of)-.15 E F2(cc)2.5 E F0(\), and)A F2(yacc.)2.5
+E F0 .483(Bash is concerned with the aspects of the shell')97 242.4 R 2.983(sb)
+-.55 G(eha)301.597 242.4 Q .484(vior de\214ned by POSIX.2.)-.2 F .484
+(The shell command)5.484 F 1.439
+(language has of course been standardized, including the basic \215o)72 254.4 R
+3.938(wc)-.25 G 1.438(ontrol and program e)359.688 254.4 R -.15(xe)-.15 G 1.438
+(cution con-).15 F 1.145(structs, I/O redirection and pipelining, ar)72 266.4 R
+1.145(gument handling, v)-.18 F 1.145(ariable e)-.25 F 1.146
+(xpansion, and quoting.)-.15 F(The)6.146 E F2(special)3.646 E F0 -.2(bu)72
+278.4 S .676(iltins, which must be implemented as part of the shell to pro).2 F
+.676(vide the desired functionality)-.15 F 3.176(,a)-.65 G .676(re speci\214ed)
+457.504 278.4 R .7(as being part of the shell; e)72 290.4 R .7
+(xamples of these are)-.15 F F1 -2.3 -.15(ev a)3.201 H(l).15 E F0(and)3.201 E
+F1(export)3.201 E F0 5.701(.O)C .701(ther utilities appear in the sections of)
+352.034 290.4 R .256(POSIX.2 not de)72 302.4 R -.2(vo)-.25 G .256(ted to the s\
+hell which are commonly \(and in some cases must be\) implemented as b).2 F
+(uiltin)-.2 E(commands, such as)72 314.4 Q F1 -.18(re)2.5 G(ad).18 E F0(and)2.5
+E F1(test)2.5 E F0(.)A .972(POSIX.2 also speci\214es aspects of the shell')97
+330 R 3.473(si)-.55 G(nteracti)286.016 330 Q 1.273 -.15(ve b)-.25 H(eha).15 E
+.973(vior as part of the UPE, including job)-.2 F .233
+(control, command line editing, and history)72 342 R 5.233(.I)-.65 G .233
+(nterestingly enough, only)253.849 342 R F2(vi)2.733 E F0 .233
+(-style line editing commands ha)B -.15(ve)-.2 G(been standardized;)72 354 Q F2
+(emacs)2.5 E F0(editing commands were left out due to objections.)2.5 E .148
+(There were certain areas in which POSIX.2 felt standardization w)97 369.6 R
+.149(as necessary)-.1 F 2.649(,b)-.65 G .149(ut no e)420.643 369.6 R .149
+(xisting imple-)-.15 F 1.598(mentation pro)72 381.6 R 1.598
+(vided the proper beha)-.15 F(vior)-.2 E 6.598(.T)-.55 G 1.598(he w)251.56
+381.6 R 1.597(orking group in)-.1 F -.15(ve)-.4 G 1.597
+(nted and standardized functionality in).15 F .228(these areas.)72 393.6 R(The)
+5.228 E F1(command)2.728 E F0 -.2(bu)2.728 G .228(iltin w).2 F .228(as in)-.1 F
+-.15(ve)-.4 G .228(nted so that shell functions could be written to replace b)
+.15 F(uiltins;)-.2 E 1.663(it mak)72 405.6 R 1.663
+(es the capabilities of the b)-.1 F 1.663(uiltin a)-.2 F -.25(va)-.2 G 1.663
+(ilable to the function.).25 F 1.663(The reserv)6.663 F 1.663(ed w)-.15 F 1.663
+(ord `)-.1 F(`!')-.74 E 4.163('w)-.74 G 1.663(as added to)455.685 405.6 R(ne)72
+417.6 Q -.05(ga)-.15 G .915(te the return v).05 F .915
+(alue of a command or pipeline; it w)-.25 F .916(as nearly impossible to e)-.1
+F .916(xpress `)-.15 F .916(`if not x')-.74 F 3.416('c)-.74 G(leanly)479.56
+417.6 Q .904(using the sh language.)72 429.6 R .904(There e)5.904 F .904
+(xist multiple incompatible implementations of the)-.15 F F1(test)3.403 E F0
+-.2(bu)3.403 G .903(iltin, which tests).2 F .28
+(\214les for type and other attrib)72 441.6 R .281
+(utes and performs arithmetic and string comparisons.)-.2 F .281
+(POSIX considered none)5.281 F .868(of these correct, so the standard beha)72
+453.6 R .868(vior w)-.2 F .868(as speci\214ed in terms of the number of ar)-.1
+F .867(guments to the com-)-.18 F 3.803(mand. POSIX.2)72 465.6 R 1.303
+(dictates e)3.803 F 1.303(xactly what will happen when four or fe)-.15 F 1.303
+(wer ar)-.25 F 1.303(guments are gi)-.18 F -.15(ve)-.25 G 3.803(nt).15 G(o)
+459.462 465.6 Q F1(test)3.804 E F0 3.804(,a)C(nd)494 465.6 Q(lea)72 477.6 Q
+-.15(ve)-.2 G 4.531(st).15 G 2.031(he beha)103.951 477.6 R 2.031
+(vior unde\214ned when more ar)-.2 F 2.031(guments are supplied.)-.18 F 2.03
+(Bash uses the POSIX.2 algorithm,)7.031 F(which w)72 489.6 Q(as concei)-.1 E
+-.15(ve)-.25 G 2.5(db).15 G 2.5(yD)164.53 489.6 S -.2(av)179.25 489.6 S(id K).2
+E(orn.)-.35 E 1.128
+(While POSIX.2 includes much of what the shell has traditionally pro)97 505.2 R
+1.129(vided, some important things)-.15 F(ha)72 517.2 Q .58 -.15(ve b)-.2 H .28
+(een omitted as being `).15 F(`be)-.74 E .28(yond its scope.)-.15 F 4.26 -.74
+('' T)-.7 H .28(here is, for instance, no mention of a dif).74 F .28
+(ference between)-.25 F(a)72 529.2 Q F2(lo)3.354 E(gin)-.1 E F0 .854
+(shell and an)5.02 F 3.354(yo)-.15 G .854(ther interacti)167.956 529.2 R 1.154
+-.15(ve s)-.25 H .854(hell \(since POSIX.2 does not specify a login program\).)
+.15 F .855(No \214x)5.855 F(ed)-.15 E
+(startup \214les are de\214ned, either \255 the standard does not mention)72
+541.2 Q F2(.pr)2.5 E(o\214le)-.45 E F0(.)1.666 E F1 2.5(4. Shell)72 565.2 R
+(Comparison)2.5 E F0 .693(This section compares features of bash, sh, and ksh \
+\(the three shells closest to POSIX compliance\).)97 580.8 R .245(Since ksh an\
+d bash are supersets of sh, the features common to all three are co)72 592.8 R
+-.15(ve)-.15 G .245(red \214rst.).15 F .245(Some of the fea-)5.245 F 1.198
+(tures bash and ksh contain which are not in sh will be discussed.)72 604.8 R
+(Ne)6.198 E 1.198(xt, features unique to bash will be)-.15 F 2.866(listed. The)
+72 616.8 R .366(\214rst three sections pro)2.866 F .366(vide a progressi)-.15 F
+-.15(ve)-.25 G .366(ly more detailed o).15 F -.15(ve)-.15 G(rvie).15 E 2.866
+(wo)-.25 G 2.866(fb)395.706 616.8 S 2.866(ash. Finally)406.902 616.8 R 2.866
+(,f)-.65 G .366(eatures of)464.484 616.8 R(ksh-88 \(the currently-a)72 628.8 Q
+-.25(va)-.2 G(ilable v).25 E(ersion\) not in sh or bash will be presented.)-.15
+E F1 2.5(4.1. Common)72 652.8 R -.25(Fe)2.5 G(atur).25 E(es)-.18 E F0 .021
+(All three shells ha)97 668.4 R .321 -.15(ve t)-.2 H .021
+(he same basic feature set, which is essentially that pro).15 F .02
+(vided by sh and described)-.15 F 1.026(in an)72 680.4 R 3.526(ys)-.15 G 3.526
+(hm)105.012 680.4 S 1.027
+(anual page. Bash and ksh are both sh supersets, and so all three pro)121.318
+680.4 R 1.027(vide the command inter)-.15 F(-)-.2 E .714
+(preter and programming language described earlier)72 692.4 R 3.214(.T)-.55 G
+.714(he shell grammar)291.506 692.4 R 3.214(,s)-.4 G .714(yntax, \215o)371.568
+692.4 R 3.214(wc)-.25 G .714(ontrol, redirections,)424.686 692.4 R(and b)72
+704.4 Q(uiltins implemented by the Bourne shell are the baseline for subsequen\
+t discussion.)-.2 E EP
+%%Page: 5 5
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-5-)279.67 48 S/F1 10/Times-Bold@0 SF 2.5(4.2. F)72
+84 R(eatur)-.25 E(es in bash and ksh)-.18 E F0 .458(Ksh and bash ha)97 99.6 R
+.758 -.15(ve s)-.2 H -2.15 -.25(ev e).15 H .459(ral features in common be).25 F
+.459(yond this base le)-.15 F -.15(ve)-.25 G 2.959(lo).15 G 2.959(ff)387.814
+99.6 S(unctionality)397.433 99.6 Q 5.459(.S)-.65 G .459(ome of this)458.082
+99.6 R(is due to the POSIX.2 standard.)72 111.6 Q(Other functions ha)5 E .3
+-.15(ve b)-.2 H(een implemented in bash using ksh as a guide.).15 E F1 2.5
+(4.2.1. V)72 135.6 R(ariables and V)-.92 E(ariable Expansion)-.92 E F0 .097
+(Bash and ksh ha)97 151.2 R .396 -.15(ve a)-.2 H .096(ugmented v).15 F .096
+(ariable e)-.25 F 2.596(xpansion. Arithmetic)-.15 F .096(substitution allo)
+2.596 F .096(ws an e)-.25 F .096(xpression to be)-.15 F -.25(eva)72 163.2 S .6
+(luated and the result substituted.).25 F .6(Shell v)5.6 F .6
+(ariables may be used as operands, and the result of an e)-.25 F(xpres-)-.15 E
+.41(sion may be assigned to a v)72 175.2 R 2.91(ariable. Nearly)-.25 F .41
+(all of the operators from the C language are a)2.91 F -.25(va)-.2 G .41
+(ilable, with the).25 F(same precedence rules:)72 187.2 Q/F2 10/Courier@0 SF 6
+($e)97 205.2 S(cho $\(\(3 + 5 * 32\)\))115 205.2 Q(163)97 217.2 Q F0 -1.11(Va)
+72 238.8 S 1.445(riables may be declared as)1.11 F/F3 10/Times-Italic@0 SF
+(inte)3.945 E -.1(ge)-.4 G(r).1 E F0 3.945(,w)1.666 G 1.446
+(hich causes arithmetic e)240.956 238.8 R -.25(va)-.25 G 1.446
+(luation to be performed on the v).25 F(alue)-.25 E(whene)72 250.8 Q -.15(ve)
+-.25 G 2.5(rt).15 G(he)115.75 250.8 Q 2.5(ya)-.15 G(re assigned to.)136.98
+250.8 Q .483(There are ne)97 266.4 R 2.983(we)-.25 G .483
+(xpansions to obtain the length of a v)162.179 266.4 R(ariable')-.25 E 2.982
+(sv)-.55 G .482(alue and to remo)352.19 266.4 R .782 -.15(ve s)-.15 H .482
+(ubstrings match-).15 F .063(ing speci\214ed patterns from the be)72 278.4 R
+.063(ginning and end of v)-.15 F .063(ariable v)-.25 F 2.563(alues. A)-.25 F
+(ne)2.563 E 2.563(wf)-.25 G .064(orm of command substitution,)383.249 278.4 R
+F1($\()72 290.4 Q F3(list)A F1(\))A F0 2.5(,i)C 2.5(sm)103.67 290.4 S
+(uch easier to nest than `)117.84 290.4 Q F3(list)A F0 2.5(`a)C
+(nd has simpli\214ed quoting rules.)235.04 290.4 Q .082(There are ne)97 306 R
+2.582(wv)-.25 G .082(ariables to control the shell')161.436 306 R 2.581(sb)-.55
+G(eha)284.333 306 Q(vior)-.2 E 2.581(,a)-.4 G .081(nd additional v)323.244 306
+R .081(ariables set or interpreted spe-)-.25 F 1.038(cially by the shell.)72
+318 R F1(RANDOM)6.038 E F0(and)3.538 E F1(SECONDS)3.538 E F0(are)3.539 E F3
+(dynamic)3.539 E F0 -.25(va)3.539 G 3.539(riables: their).25 F -.25(va)3.539 G
+1.039(lues are generated afresh).25 F 1.022(each time the)72 330 R 3.522(ya)
+-.15 G 1.022(re referenced.)140.176 330 R F1(RANDOM)6.022 E F0 1.021
+(returns a dif)3.521 F 1.021(ferent random number each time it is referenced,)
+-.25 F(and)72 342 Q F1(SECONDS)3.138 E F0 .638
+(returns the number of seconds since the shell w)3.138 F .638
+(as started or the v)-.1 F .639(ariable w)-.25 F .639(as assigned to,)-.1 F
+1.448(plus an)72 354 R 3.948(yv)-.15 G 1.448(alue assigned.)115.606 354 R F1
+(PWD)6.448 E F0(and)3.948 E F1(OLDPWD)3.947 E F0 1.447
+(are set to the current and pre)3.947 F 1.447(vious w)-.25 F 1.447
+(orking directories,)-.1 F(respecti)72 366 Q -.15(ve)-.25 G(ly).15 E(.)-.65 E
+F1(TMOUT)5.604 E F0 .604(controls ho)3.104 F 3.104(wl)-.25 G .604
+(ong the shell will w)226.436 366 R .604(ait at a prompt for input.)-.1 F(If)
+5.604 E F1(TMOUT)3.104 E F0 .605(is set to a)3.105 F -.25(va)72 378 S 1.168
+(lue greater than zero, the shell e).25 F 1.168(xits after w)-.15 F 1.168
+(aiting that man)-.1 F 3.668(ys)-.15 G 1.167(econds for input.)337.478 378 R F1
+(REPL)6.167 E(Y)-.92 E F0 1.167(is the def)3.667 F(ault)-.1 E -.25(va)72 390 S
+.991(riable for the).25 F F1 -.18(re)3.491 G(ad).18 E F0 -.2(bu)3.491 G .991
+(iltin; if no v).2 F .992(ariable names are supplied as ar)-.25 F .992
+(guments, the line read is assigned to)-.18 F F1(REPL)72 402 Q(Y)-.92 E F0(.)A
+F1 2.5(4.2.2. New)72 426 R(and Modi\214ed Builtins)2.5 E F0 .652(Both shells e)
+97 441.6 R .651(xpand the basic sh set of b)-.15 F .651(uiltin commands.)-.2 F
+F1(Let)5.651 E F0(pro)3.151 E .651(vides a w)-.15 F .651
+(ay to perform arithmetic)-.1 F 2.767(on shell v)72 453.6 R 5.268
+(ariables. Shell)-.25 F 2.768(programmers use)5.268 F F1(typeset)5.268 E F0
+2.768(\(bash includes)5.268 F F1(declar)5.268 E(e)-.18 E F0 2.768(as a synon)
+5.268 F 2.768(ym\) to assign)-.15 F(attrib)72 465.6 Q .295(utes such as)-.2 F
+F3 -.2(ex)2.795 G(port).2 E F0(and)4.461 E F3 -.37(re)2.795 G(adonly).37 E F0
+.295(to v)4.461 F(ariables.)-.25 E F1(Getopts)5.295 E F0 .294
+(is used by shell scripts to parse script options)2.795 F .962(and ar)72 477.6
+R 3.462(guments. The)-.18 F F1(set)3.462 E F0 .962(command has a ne)3.462 F
+3.462(wo)-.25 G(ption)266.446 477.6 Q F1<ad6f>3.463 E F0 .963(which tak)3.463 F
+.963(es option names as ar)-.1 F 3.463(guments. Option)-.18 F 1.28
+(names are synon)72 489.6 R 1.28(yms for the other set options \(e.g.,)-.15 F
+F1<ad66>3.78 E F0(and)3.78 E F1 1.28(\255o noglob)3.78 F F0 3.78(\)o)C 3.78(rp)
+375.97 489.6 S(ro)388.08 489.6 Q 1.28(vide ne)-.15 F 3.78(wf)-.25 G 1.28
+(unctionality \()440.78 489.6 R F1(-o)A(notify)72 501.6 Q F0 3.348(,f)C .849
+(or e)106.178 501.6 R 3.349(xample\). The)-.15 F F1 -.18(re)3.349 G(ad).18 E F0
+-.2(bu)3.349 G .849(iltin tak).2 F .849(es a ne)-.1 F(w)-.25 E F1<ad72>3.349 E
+F0 .849(option to specify that a line ending in a backslash)3.349 F
+(should not be continued.)72 513.6 Q F1 2.5(4.2.3. T)72 537.6 R(ilde Expansion)
+-.18 E F0 -.35(Ti)97 553.2 S .252(lde e).35 F .251
+(xpansion is a feature adopted from the C shell.)-.15 F 2.751(At)5.251 G .251
+(ilde character at the be)331.172 553.2 R .251(ginning of a w)-.15 F .251
+(ord is)-.1 F -.15(ex)72 565.2 S(panded to either).15 E F1($HOME)2.5 E F0
+(or the home directory of another user)2.5 E 2.5(,d)-.4 G
+(epending on what follo)345.84 565.2 Q(ws the tilde.)-.25 E F1 2.5
+(4.2.4. Interacti)72 589.2 R .2 -.1(ve I)-.1 H(mpr).1 E -.1(ove)-.18 G(ments).1
+E F0 .789(The most noticable impro)97 604.8 R -.15(ve)-.15 G .789(ments o).15 F
+-.15(ve)-.15 G 3.289(rs).15 G 3.289(ha)263.385 604.8 S .789
+(re geared for interacti)276.114 604.8 R 1.089 -.15(ve u)-.25 H 3.29(se. Ksh)
+.15 F .79(and bash pro)3.29 F .79(vide job)-.15 F .882(control in a v)72 616.8
+R .882(ery similar f)-.15 F .882
+(ashion, with the same options to enable and disable it \()-.1 F F1 .881
+(set -o monitor)B F0 3.381(\)a)C .881(nd the)478.399 616.8 R(same b)72 628.8 Q
+(uiltin commands to manipulate jobs \()-.2 E F1(jobs/fg/bg/kill/wait)A F0(\).)A
+.866(Command line editing, with emacs and vi-style k)97 644.4 R 1.166 -.15
+(ey b)-.1 H .866(indings, is a).15 F -.25(va)-.2 G .866(ilable in both shells.)
+.25 F .866(The Bash)5.866 F F3 -.37(re)72 656.4 S(adline).37 E F0 1.578
+(library is considerably more sophisticated than the ksh editing library:)5.744
+F 1.577(it allo)6.577 F 1.577(ws arbitrary k)-.25 F -.15(ey)-.1 G 1.867
+(bindings, macros, a per)72 668.4 R 1.868(-user customization \214le \()-.2 F
+F3(~/.inputr)A(c)-.37 E F0 1.868(\), a number of v)B 1.868
+(ariables to further customize)-.25 F(beha)72 680.4 Q(vior)-.2 E 3.538(,a)-.4 G
+1.038(nd a much lar)116.868 680.4 R 1.038
+(ger set of bindable editing commands.)-.18 F 1.037
+(The ksh editing library pro)6.037 F 1.037(vides a small)-.15 F<8c78>72 692.4 Q
+(ed command set and only clumsy macros.)-.15 E .706(Both shells of)97 708 R
+.706(fer access to the command history)-.25 F 5.706(.T)-.65 G .706
+(he in-line editing options ha)307.278 708 R 1.006 -.15(ve d)-.2 H(ef).15 E
+.706(ault k)-.1 F 1.006 -.15(ey b)-.1 H(ind-).15 E .624
+(ings to access the history list.)72 720 R(The)5.624 E F1(fc)3.124 E F0 .624
+(command is pro)3.124 F .624(vided to re-e)-.15 F -.15(xe)-.15 G .623(cute pre)
+.15 F .623(vious commands and display)-.25 F EP
+%%Page: 6 6
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-6-)279.67 48 S(the contents of the history list.)
+72 84 Q/F1 10/Times-Bold@0 SF 2.5(4.2.5. Miscellaneous)72 108 R
+(Changes and Impr)2.5 E -.1(ov)-.18 G(ments).1 E F0 .707(Other impro)97 123.6 R
+-.15(ve)-.15 G .707(ments include aliases, the).15 F F1(select)3.207 E F0 .708
+(shell language construct, which supports the genera-)3.207 F 1.298
+(tion and presentation of simple menus, and e)72 135.6 R 1.298
+(xtensions to the)-.15 F F1(export)3.798 E F0(and)3.798 E F1 -.18(re)3.798 G
+(adonly).18 E F0 -.2(bu)3.798 G 1.298(iltins which allo).2 F(w)-.25 E -.25(va)
+72 147.6 S .017(riables to be assigned v).25 F .017
+(alues at the same time the attrib)-.25 F .017(utes are set.)-.2 F -.8(Wo)5.018
+G .018(rd splitting has changed:).8 F .018(if tw)5.018 F 2.518(oo)-.1 G(r)
+500.67 147.6 Q .158(more adjacent w)72 159.6 R .157
+(ord splitting characters occur)-.1 F 2.657(,b)-.4 G .157
+(ash and ksh will generate null \214elds; sh mak)264.893 159.6 R .157
+(es runs of mul-)-.1 F .339
+(tiple \214eld separator charactors the same as a single separator)72 171.6 R
+5.339(.B)-.55 G .34(ash and ksh split only the results of e)330.89 171.6 R
+(xpan-)-.15 E(sion, rather than e)72 183.6 Q -.15(ve)-.25 G(ry w).15 E
+(ord as sh does, closing a long-standing shell security hole.)-.1 E 1.234
+(Shell functions in bash and ksh may ha)97 199.2 R 1.534 -.15(ve l)-.2 H 1.234
+(ocal v).15 F 3.734(ariables. V)-.25 F 1.234(ariables declared with)-1.11 F F1
+(typeset)3.734 E F0 1.234(\(or the)3.734 F .001(bash synon)72 211.2 R(ym,)-.15
+E F1(local)2.501 E F0 .001(\), ha)B .301 -.15(ve a s)-.2 H .001
+(cope restricted to the function and its descendents, and may shado).15 F 2.502
+(wv)-.25 G(ariables)472.9 211.2 Q(de\214ned by the in)72 223.2 Q -.2(vo)-.4 G
+(king shell.).2 E(Local v)5 E(ariables are remo)-.25 E -.15(ve)-.15 G 2.5(dw)
+.15 G(hen a function completes.)317.75 223.2 Q F1 2.5(4.3. F)72 247.2 R(eatur)
+-.25 E(es Unique to bash)-.18 E F0(Naturally)97 262.8 Q 2.895(,b)-.65 G .395
+(ash includes features not in sh or ksh.)144.515 262.8 R .395
+(This section discusses some of the features which)5.395 F(mak)72 274.8 Q 2.986
+(eb)-.1 G .486(ash unique.)101.546 274.8 R .486(Most of them pro)5.486 F .486
+(vide impro)-.15 F -.15(ve)-.15 G 2.986(di).15 G(nteracti)288.098 274.8 Q .787
+-.15(ve u)-.25 H .487(se, b).15 F .487(ut a fe)-.2 F 2.987(wp)-.25 G .487
+(rogramming impro)394.653 274.8 R -.15(ve)-.15 G(ments).15 E
+(are present as well.)72 286.8 Q
+(Full descriptions of these features can be found in the bash documentation.)5
+E F1 2.5(4.3.1. Startup)72 310.8 R(Files)2.5 E F0 .281(Bash e)97 326.4 R -.15
+(xe)-.15 G .281(cutes startup \214les dif).15 F .281
+(ferently than other shells.)-.25 F .281(The bash beha)5.281 F .28
+(vior is a compromise between)-.2 F .116
+(the csh principle of startup \214les with \214x)72 338.4 R .116(ed names e)
+-.15 F -.15(xe)-.15 G .116(cuted for each shell and the sh `).15 F
+(`minimalist')-.74 E 2.616('b)-.74 G(eha)472.26 338.4 Q(vior)-.2 E(.)-.55 E
+2.956(An interacti)72 350.4 R 3.256 -.15(ve i)-.25 H 2.956
+(nstance of bash started as a login shell reads and e).15 F -.15(xe)-.15 G
+(cutes).15 E/F2 10/Times-Italic@0 SF(~/.bash_pr)5.455 E(o\214le)-.45 E F0 2.955
+(\(the \214le)7.121 F F2(.bash_pr)72 362.4 Q(o\214le)-.45 E F0 .835
+(in the user')5 F 3.335(sh)-.55 G .835(ome directory\), if it e)187.385 362.4 R
+3.335(xists. An)-.15 F(interacti)3.335 E 1.135 -.15(ve n)-.25 H .835
+(on-login shell reads and e).15 F -.15(xe)-.15 G(cutes).15 E F2(~/.bashr)72
+374.4 Q(c)-.37 E F0 5.538(.A)1.666 G(non-interacti)127.422 374.4 Q .838 -.15
+(ve s)-.25 H .538(hell \(one be).15 F .538(gun to e)-.15 F -.15(xe)-.15 G .538
+(cute a shell script, for e).15 F .537(xample\) reads no \214x)-.15 F .537
+(ed startup)-.15 F .139(\214le, b)72 386.4 R .139(ut uses the v)-.2 F .139
+(alue of the v)-.25 F(ariable)-.25 E F1(ENV)2.639 E F0 2.639(,i)C 2.639(fs)
+253.361 386.4 S .139(et, as the name of a startup \214le.)263.22 386.4 R .139
+(The ksh practice of reading)5.139 F F1($ENV)72 398.4 Q F0 .69(for e)3.19 F
+-.15(ve)-.25 G .69(ry shell, with the accompan).15 F .689(ying dif)-.15 F .689
+(\214culty of de\214ning the proper v)-.25 F .689(ariables and functions for)
+-.25 F(interacti)72 410.4 Q .946 -.15(ve a)-.25 H .646(nd non-interacti).15 F
+.946 -.15(ve s)-.25 H .646(hells or ha).15 F .646
+(ving the \214le read only for interacti)-.2 F .946 -.15(ve s)-.25 H .646
+(hells, w).15 F .646(as considered too)-.1 F(comple)72 422.4 Q(x.)-.15 E F1 2.5
+(4.3.2. New)72 446.4 R(Builtin Commands)2.5 E F0 1.119(There are a fe)97 462 R
+3.619(wb)-.25 G 1.118(uiltins which are ne)170.986 462 R 3.618(wo)-.25 G 3.618
+(rh)268.528 462 S -2.25 -.2(av e)280.476 462 T 1.118(been e)3.818 F 1.118
+(xtended in bash.)-.15 F(The)6.118 E F1(enable)3.618 E F0 -.2(bu)3.618 G 1.118
+(iltin allo).2 F(ws)-.25 E -.2(bu)72 474 S .736
+(iltin commands to be turned on and of).2 F 3.236(fa)-.25 G(rbitrarily)250.198
+474 Q 5.736(.T)-.65 G 3.237(ou)298.644 474 S .737(se the v)311.881 474 R .737
+(ersion of)-.15 F F2(ec)3.237 E(ho)-.15 E F0 .737(found in a user')4.903 F
+3.237(ss)-.55 G(earch)482.35 474 Q .013(path rather than the bash b)72 486 R
+(uiltin,)-.2 E/F3 10/Courier@0 SF .013(enable -n echo)2.513 F F0(suf)2.513 E
+2.513(\214ces. The)-.25 F F1(help)2.513 E F0 -.2(bu)2.513 G .013(iltin pro).2 F
+.013(vides quick synopses of)-.15 F 1.382(the shell f)72 498 R 1.382
+(acilities without requiring access to a manual page.)-.1 F F1(Builtin)6.382 E
+F0 1.383(is similar to)3.882 F F1(command)3.883 E F0 1.383(in that it)3.883 F
+.342(bypasses shell functions and directly e)72 510 R -.15(xe)-.15 G .342
+(cutes b).15 F .342(uiltin commands.)-.2 F .342
+(Access to a csh-style stack of directories)5.342 F .072(is pro)72 522 R .073
+(vided via the)-.15 F F1(pushd)2.573 E F0(,)A F1(popd)2.573 E F0 2.573(,a)C(nd)
+211.197 522 Q F1(dirs)2.573 E F0 -.2(bu)2.573 G(iltins.).2 E F1(Pushd)5.073 E
+F0(and)2.573 E F1(popd)2.573 E F0 .073(insert and remo)2.573 F .373 -.15(ve d)
+-.15 H .073(irectories from the).15 F .094(stack, respecti)72 534 R -.15(ve)
+-.25 G(ly).15 E 2.594(,a)-.65 G(nd)154.448 534 Q F1(dirs)2.594 E F0 .094
+(lists the stack contents.The)2.594 F F1(suspend)2.594 E F0 .094
+(command will stop the shell process when)2.594 F 1.329(job control is acti)72
+546 R -.15(ve)-.25 G 3.829(;m).15 G 1.329(ost other shells do not allo)169.136
+546 R 3.829(wt)-.25 G(hemselv)294.64 546 Q 1.33(es to be stopped lik)-.15 F
+3.83(et)-.1 G(hat.)421.31 546 Q F1 -.74(Ty)6.33 G(pe,).74 E F0 1.33(the bash)
+3.83 F(answer to)72 558 Q F1(which)2.5 E F0(and)2.5 E F1(whence,)2.5 E F0(sho)
+2.5 E(ws what will happen when a w)-.25 E(ord is typed as a command:)-.1 E F3 6
+($t)97 576 S(ype export)115 576 Q(export is a shell builtin)97 588 Q 6($t)97
+600 S(ype -t export)115 600 Q(builtin)97 612 Q 6($t)97 624 S(ype bash)115 624 Q
+(bash is /bin/bash)97 636 Q 6($t)97 648 S(ype cd)115 648 Q(cd is a function)97
+660 Q(cd \(\))97 672 Q({)97 684 Q(builtin cd "$@" && xtitle $HOST: $PWD)121 696
+Q(})97 708 Q EP
+%%Page: 7 7
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-7-)279.67 48 S -1.11(Va)72 84 S .682
+(rious modes tell what a command w)1.11 F .681(ord is \(reserv)-.1 F .681(ed w)
+-.15 F .681(ord, alias, function, b)-.1 F .681(uiltin, or \214le\) or which v)
+-.2 F(er)-.15 E(-)-.2 E 1.15(sion of a command will be e)72 96 R -.15(xe)-.15 G
+1.15(cuted based on a user').15 F 3.65(ss)-.55 G 1.15(earch path.)305.7 96 R
+1.15(Some of this functionality has been)6.15 F
+(adopted by POSIX.2 and folded into the)72 108 Q/F1 10/Times-Bold@0 SF(command)
+2.5 E F0(utility)2.5 E(.)-.65 E F1 2.5(4.3.3. Editing)72 132 R(and Completion)
+2.5 E F0 .682(One area in which bash shines is command line editing.)97 147.6 R
+.682(Bash uses the)5.682 F/F2 10/Times-Italic@0 SF -.37(re)3.182 G(adline).37 E
+F0 .682(library to read and)4.848 F .102(edit lines when interacti)72 159.6 R
+-.15(ve)-.25 G 5.102(.R).15 G .103(eadline is a po)191.438 159.6 R .103
+(werful and \215e)-.25 F .103(xible input f)-.15 F .103
+(acility that a user can con\214gure to his)-.1 F 2.506(tastes. It)72 171.6 R
+(allo)2.506 E .006(ws lines to be edited using either emacs or vi commands, wh\
+ere those commands are appropri-)-.25 F 2.994(ate. The)72 183.6 R .494
+(full capability of emacs is not present \255 there is no w)2.994 F .495
+(ay to e)-.1 F -.15(xe)-.15 G .495(cute a named command with M-x,).15 F .222
+(for instance \255 b)72 195.6 R .222(ut the e)-.2 F .222
+(xisting commands are more than adequate.)-.15 F .221
+(The vi mode is compliant with the com-)5.222 F
+(mand line editing standardized by POSIX.2.)72 207.6 Q 1.69
+(Readline is fully customizable.)97 223.2 R 1.691
+(In addition to the basic commands and k)6.69 F 1.991 -.15(ey b)-.1 H 1.691
+(indings, the library).15 F(allo)72 235.2 Q .83
+(ws users to de\214ne additional k)-.25 F 1.13 -.15(ey b)-.1 H .83
+(indings using a startup \214le.).15 F(The)5.83 E F2(inputr)3.329 E(c)-.37 E F0
+.829(\214le, which def)4.995 F .829(aults to the)-.1 F(\214le)72 247.2 Q F2
+(~/.inputr)4.287 E(c)-.37 E F0 4.287(,i)1.666 G 4.287(sr)137.43 247.2 S 1.788(\
+ead each time readline initializes, permitting users to maintain a consistent \
+interf)148.937 247.2 R(ace)-.1 E .547(across a set of programs.)72 259.2 R .546
+(Readline includes an e)5.546 F .546(xtensible interf)-.15 F .546
+(ace, so each program using the library can)-.1 F .23(add its o)72 271.2 R .23
+(wn bindable commands and program-speci\214c k)-.25 F .531 -.15(ey b)-.1 H
+2.731(indings. Bash).15 F .231(uses this f)2.731 F .231
+(acility to add bindings)-.1 F(that perform history e)72 283.2 Q
+(xpansion or shell w)-.15 E(ord e)-.1 E(xpansions on the current input line.)
+-.15 E .707(Readline interprets a number of v)97 298.8 R .706
+(ariables which further tune its beha)-.25 F(vior)-.2 E 5.706(.V)-.55 G .706
+(ariables e)408.432 298.8 R .706(xist to control)-.15 F .157
+(whether or not eight-bit characters are directly read as input or con)72 310.8
+R -.15(ve)-.4 G .158(rted to meta-pre\214x).15 F .158(ed k)-.15 F .458 -.15
+(ey s)-.1 H .158(equences \(a).15 F(meta-pre\214x)72 322.8 Q 1.575(ed k)-.15 F
+1.875 -.15(ey s)-.1 H 1.575
+(equence consists of the character with the eighth bit zeroed, preceded by the)
+.15 F F2(meta-)4.074 E(pr)72 334.8 Q(e\214x)-.37 E F0(character)4.45 E 2.784
+(,u)-.4 G .284(sually escape, which selects an alternate k)145.374 334.8 R -.15
+(ey)-.1 G .285(map\), to decide whether to output characters).15 F .485
+(with the eighth bit set directly or as a meta-pre\214x)72 346.8 R .485(ed k)
+-.15 F .784 -.15(ey s)-.1 H .484(equence, whether or not to wrap to a ne).15 F
+2.984(ws)-.25 G(creen)482.35 346.8 Q .157
+(line when a line being edited is longer than the screen width, the k)72 358.8
+R -.15(ey)-.1 G .158(map to which subsequent k).15 F .458 -.15(ey b)-.1 H
+(indings).15 E .531(should apply)72 370.8 R 3.031(,o)-.65 G 3.031(re)133.802
+370.8 S -.15(ve)144.353 370.8 S 3.031(nw).15 G .531
+(hat happens when readline w)168.894 370.8 R .531(ants to ring the terminal')
+-.1 F 3.03(sb)-.55 G 3.03(ell. All)399.37 370.8 R .53(of these v)3.03 F
+(ariables)-.25 E(can be set in the inputrc \214le.)72 382.8 Q .284
+(The startup \214le understands a set of C preprocessor)97 398.4 R(-lik)-.2 E
+2.785(ec)-.1 G .285(onditional constructs which allo)329.49 398.4 R 2.785(wv)
+-.25 G(ariables)472.9 398.4 Q .12(or k)72 410.4 R .42 -.15(ey b)-.1 H .119(ind\
+ings to be assigned based on the application using readline, the terminal curr\
+ently being used, or).15 F .316(the editing mode.)72 422.4 R .317
+(Users can add program-speci\214c bindings to mak)5.317 F 2.817(et)-.1 G .317
+(heir li)352.808 422.4 R -.15(ve)-.25 G 2.817(se).15 G 2.817(asier: here)
+396.922 422.4 R .317(are bindings to)2.817 F(edit the v)72 434.4 Q(alue of)-.25
+E F1 -.74(PA)2.5 G(TH)-.21 E F0(and double-quote the current or pre)2.5 E
+(vious w)-.25 E(ord:)-.1 E/F3 10/Courier@0 SF 6(#M)97 452.4 S
+(acros that are convenient for shell interaction)115 452.4 Q($if Bash)97 464.4
+Q 6(#e)97 476.4 S(dit the path)115 476.4 Q
+("\\C-xp": "PATH=${PATH}\\e\\C-e\\C-a\\ef\\C-f")97 488.4 Q 6(#p)97 500.4 S
+(repare to type a quoted word -- insert open and close double quotes)115 500.4
+Q 6(#a)97 512.4 S(nd move to just after the open quote)115 512.4 Q
+("\\C-x\\"": "\\"\\"\\C-b")97 524.4 Q 6(#Q)97 536.4 S
+(uote the current or previous word)115 536.4 Q("\\C-xq": "\\eb\\"\\ef\\"")97
+548.4 Q($endif)97 560.4 Q F0 .322(There is a readline command to re-read the \
+\214le, so users can edit the \214le, change some bindings, and be)72 582 R
+(gin)-.15 E(to use them almost immediately)72 594 Q(.)-.65 E .851
+(Bash implements the)97 609.6 R F1(bind)3.351 E F0 -.2(bu)3.351 G .851
+(iltin for more dyamic control of readline than the startup \214le permits.).2
+F F1(Bind)72 621.6 Q F0 .167(is used in se)2.667 F -.15(ve)-.25 G .167(ral w)
+.15 F 2.667(ays. In)-.1 F F2(list)2.667 E F0 .167
+(mode, it can display the current k)4.333 F .466 -.15(ey b)-.1 H .166
+(indings, list all the readline edit-).15 F .149(ing directi)72 633.6 R -.15
+(ve)-.25 G 2.649(sa).15 G -.25(va)132.798 633.6 S .149
+(ilable for binding, list which k).25 F -.15(ey)-.1 G 2.649(si).15 G -1.9 -.4
+(nv o)282.352 633.6 T .349 -.1(ke a g).4 H -2.15 -.25(iv e).1 H 2.65(nd).25 G
+(irecti)345.3 633.6 Q -.15(ve)-.25 G 2.65(,o).15 G 2.65(ro)385.04 633.6 S .15
+(utput the current set of k)396.02 633.6 R -.15(ey)-.1 G .526(bindings in a fo\
+rmat that can be incorporated directly into an inputrc \214le.)72 645.6 R(In)
+5.526 E F2(batc)3.026 E(h)-.15 E F0 .526(mode, it reads a series)4.692 F .71
+(of k)72 657.6 R 1.01 -.15(ey b)-.1 H .71
+(indings directly from a \214le and passes them to readline.).15 F .71
+(In its most common usage,)5.71 F F1(bind)3.21 E F0(tak)3.21 E .71(es a)-.1 F
+.534(single string and passes it directly to readline, which interprets the li\
+ne as if it had just been read from the)72 669.6 R(inputrc \214le.)72 681.6 Q
+(Both k)5 E .3 -.15(ey b)-.1 H(indings and v).15 E
+(ariable assignments can appear in the string gi)-.25 E -.15(ve)-.25 G 2.5(nt)
+.15 G(o)424.4 681.6 Q F1(bind)2.5 E F0(.)A .401(The readline library also pro)
+97 697.2 R .402(vides an interf)-.15 F .402(ace for)-.1 F F2(wor)2.902 E 2.902
+(dc)-.37 G(ompletion)328.546 697.2 Q F0 5.402(.W)C .402(hen the)385.888 697.2 R
+F2(completion)2.902 E F0(character)4.568 E 1.261(\(usually T)72 709.2 R 1.261
+(AB\) is typed, readline looks at the w)-.93 F 1.26
+(ord currently being entered and computes the set of \214le-)-.1 F .523
+(names of which the current w)72 721.2 R .523(ord is a v)-.1 F .523
+(alid pre\214x.)-.25 F .524
+(If there is only one possible completion, the rest of the)5.523 F EP
+%%Page: 8 8
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-8-)279.67 48 S .358
+(characters are inserted directly)72 84 R 2.858(,o)-.65 G .358(therwise the co\
+mmon pre\214x of the set of \214lenames is added to the current)205.232 84 R
+-.1(wo)72 96 S 3.199(rd. A).1 F .699(second T)3.199 F .699(AB character entere\
+d immediately after a non-unique completion causes readline to list)-.93 F
+1.814(the possible completions; there is an option to ha)72 108 R 2.113 -.15
+(ve t)-.2 H 1.813(he list displayed immediately).15 F 6.813(.R)-.65 G 1.813
+(eadline pro)436.517 108 R(vides)-.15 E .482
+(hooks so that applications can pro)72 120 R .482
+(vide speci\214c types of completion before the def)-.15 F .483
+(ault \214lename completion)-.1 F .132(is attempted.)72 132 R .132
+(This is quite \215e)5.132 F .132(xible, though it is not completely user)-.15
+F 2.632(-programmable. Bash,)-.2 F .132(for e)2.632 F .132(xample, can)-.15 F
+.37(complete \214lenames, command names \(including aliases, b)72 144 R .37
+(uiltins, shell reserv)-.2 F .37(ed w)-.15 F .37(ords, shell functions, and)-.1
+F -.15(exe)72 156 S .424(cutables found in the \214le system\), shell v).15 F
+.424(ariables, usernames, and hostnames.)-.25 F .423
+(It uses a set of heuristics)5.424 F(that, while not perfect, is generally qui\
+te good at determining what type of completion to attempt.)72 168 Q/F1 10
+/Times-Bold@0 SF 2.5(4.3.4. History)72 192 R F0 .255
+(Access to the list of commands pre)97 207.6 R .255(viously entered \(the)-.25
+F/F2 10/Times-Italic@0 SF .255(command history)2.755 F F0 2.756(\)i)C 2.756(sp)
+399.236 207.6 S(ro)410.882 207.6 Q .256(vided jointly by bash)-.15 F .095
+(and the readline library)72 219.6 R 5.094(.B)-.65 G .094(ash pro)178.928 219.6
+R .094(vides v)-.15 F .094(ariables \()-.25 F F1(HISTFILE)A F0(,)A F1(HISTSIZE)
+2.594 E F0 2.594(,a)C(nd)382.068 219.6 Q F1(HISTCONTR)2.594 E(OL)-.3 E F0 2.594
+(\)a)C .094(nd the)479.186 219.6 R F1(history)72 231.6 Q F0(and)2.825 E F1(fc)
+2.825 E F0 -.2(bu)2.825 G .325(iltins to manipulate the history list.).2 F .325
+(The v)5.325 F .325(alue of)-.25 F F1(HISTFILE)2.825 E F0 .326
+(specifes the \214le where bash)2.826 F .128(writes the command history on e)72
+243.6 R .128(xit and reads it on startup.)-.15 F F1(HISTSIZE)5.128 E F0 .128
+(is used to limit the number of com-)2.628 F .346(mands sa)72 255.6 R -.15(ve)
+-.2 G 2.846(di).15 G 2.846(nt)129.002 255.6 S .346(he history)139.628 255.6 R
+(.)-.65 E F1(HISTCONTR)5.346 E(OL)-.3 E F0(pro)2.846 E .346
+(vides a crude form of control o)-.15 F -.15(ve)-.15 G 2.846(rw).15 G .346
+(hich commands are)425.548 255.6 R(sa)72 267.6 Q -.15(ve)-.2 G 2.905(do).15 G
+2.905(nt)102.325 267.6 S .405(he history list: a v)113.01 267.6 R .405(alue of)
+-.25 F F2(ignor)2.905 E(espace)-.37 E F0 .405(means to not sa)4.571 F .705 -.15
+(ve c)-.2 H .405(ommands which be).15 F .405(gin with a space; a)-.15 F -.25
+(va)72 279.6 S .339(lue of).25 F F2(ignor)2.839 E(edups)-.37 E F0 .339
+(means to not sa)4.505 F .64 -.15(ve c)-.2 H .34
+(ommands identical to the last command sa).15 F -.15(ve)-.2 G(d.).15 E F1
+(HISTCONTR)5.34 E(OL)-.3 E F0 -.1(wa)72 291.6 S 3.15(sn).1 G(amed)95.6 291.6 Q
+F1(history_contr)3.15 E(ol)-.18 E F0 .65(in earlier v)3.15 F .649
+(ersions of bash; the old name is still accepted for backw)-.15 F .649
+(ards com-)-.1 F(patibility)72 303.6 Q 5.723(.T)-.65 G(he)121.803 303.6 Q F1
+(history)3.223 E F0 .724(command can read or write \214les containing the hist\
+ory list and display the current)3.223 F .895(list contents.)72 315.6 R(The)
+5.895 E F1(fc)3.395 E F0 -.2(bu)3.395 G .895
+(iltin, adopted from POSIX.2 and the K).2 F .894(orn Shell, allo)-.35 F .894
+(ws display and re-e)-.25 F -.15(xe)-.15 G(cution,).15 E .461
+(with optional editing, of commands from the history list.)72 327.6 R .462
+(The readline library of)5.462 F .462(fers a set of commands to)-.25 F .657(se\
+arch the history list for a portion of the current input line or a string type\
+d by the user)72 339.6 R 5.657(.F)-.55 G(inally)445.836 339.6 Q 3.157(,t)-.65 G
+(he)476.403 339.6 Q F2(his-)3.157 E(tory)72 351.6 Q F0(library)4.196 E 2.53(,g)
+-.65 G .03(enerally incorporated directly into the readline library)128.346
+351.6 R 2.53(,i)-.65 G .03(mplements a f)350.636 351.6 R .031
+(acility for history recall,)-.1 F -.15(ex)72 363.6 S .594(pansion, and re-e)
+.15 F -.15(xe)-.15 G .594(cution of pre).15 F .594(vious commands v)-.25 F .594
+(ery similar to csh \(`)-.15 F .593(`bang history')-.74 F .593
+(', so called because)-.74 F(the e)72 375.6 Q
+(xclamation point introduces a history substitution\):)-.15 E/F3 10/Courier@0
+SF 6($e)97 393.6 S(cho a b c d e)115 393.6 Q 6(abcde)97 405.6 S 6($!)97 417.6 S
+6(!fghi)115 417.6 S(echo a b c d e f g h i)97 429.6 Q 6(abcdefghi)97 441.6 S 6
+($!)97 453.6 S(-2)115 453.6 Q(echo a b c d e)97 465.6 Q 6(abcde)97 477.6 S 6
+($e)97 489.6 S(cho !-2:1-4)115 489.6 Q(echo a b c d)97 501.6 Q 6(abcd)97 513.6
+S F0 1.456(The command history is only sa)72 535.2 R -.15(ve)-.2 G 3.957(dw).15
+G 1.457(hen the shell is interacti)232.599 535.2 R -.15(ve)-.25 G 3.957(,s).15
+G 3.957(oi)352.804 535.2 S 3.957(ti)364.541 535.2 S 3.957(sn)374.058 535.2 S
+1.457(ot a)386.905 535.2 R -.25(va)-.2 G 1.457(ilable for use by shell).25 F
+(scripts.)72 547.2 Q F1 2.5(4.3.5. New)72 571.2 R(Shell V)2.5 E(ariables)-.92 E
+F0 .701(There are a number of con)97 586.8 R -.15(ve)-.4 G .701(nience v).15 F
+.701(ariables that bash interprets to mak)-.25 F 3.2(el)-.1 G .7(ife easier)
+402.76 586.8 R 5.7(.T)-.55 G .7(hese include)453.59 586.8 R F1(FIGNORE)72 598.8
+Q F0 3.973(,w)C 1.473(hich is a set of \214lename suf)132.363 598.8 R<8c78>-.25
+E 1.474(es identifying \214les to e)-.15 F 1.474
+(xclude when completing \214lenames;)-.15 F F1(HOSTTYPE)72 610.8 Q F0 3.03(,w)C
+.53(hich is automatically set to a string describing the type of hardw)139.21
+610.8 R .53(are on which bash is cur)-.1 F(-)-.2 E .76(rently e)72 622.8 R -.15
+(xe)-.15 G(cuting;).15 E F1(OSTYPE)3.26 E F0 3.26(,t)C 3.26(ow)191.76 622.8 S
+.76(hich bash assigns a v)207.24 622.8 R .761(alue that identi\214es the v)-.25
+F .761(ersion of)-.15 F/F4 9/Times-Roman@0 SF(UNIX)3.261 E F0(it')3.261 E 3.261
+(sr)-.55 G(unning)476.22 622.8 Q 1.354
+(on \(great for putting architecture-speci\214c binary directories into the)72
+634.8 R F1 -.74(PA)3.854 G(TH)-.21 E F0 1.354(\); and)B F1(IGNOREEOF)3.854 E F0
+3.854(,w)C(hose)485.67 634.8 Q -.25(va)72 646.8 S .062
+(lue indicates the number of consecuti).25 F .362 -.15(ve E)-.25 H .062
+(OF characters that an interacti).15 F .362 -.15(ve s)-.25 H .062
+(hell will read before e).15 F .062(xiting \255)-.15 F .114(an easy w)72 658.8
+R .113(ay to k)-.1 F .113(eep yourself from being logged out accidentally)-.1 F
+5.113(.T)-.65 G(he)344.285 658.8 Q F1(auto_r)2.613 E(esume)-.18 E F0 -.25(va)
+2.613 G .113(riable alters the w).25 F(ay)-.1 E .409
+(the shell treats simple command names: if job control is acti)72 670.8 R -.15
+(ve)-.25 G 2.909(,a).15 G .409(nd this v)335.516 670.8 R .409
+(ariable is set, single-w)-.25 F .409(ord simple)-.1 F .17(commands without re\
+directions cause the shell to \214rst look for a suspended job with that name \
+before start-)72 682.8 R(ing a ne)72 694.8 Q 2.5(wp)-.25 G(rocess.)118.13 694.8
+Q EP
+%%Page: 9 9
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-9-)279.67 48 S/F1 10/Times-Bold@0 SF 2.5
+(4.3.6. Brace)72 84 R(Expansion)2.5 E F0 .653(Since sh of)97 99.6 R .653
+(fers no con)-.25 F -.15(ve)-.4 G .653(nient w).15 F .653
+(ay to generate arbitrary strings that share a common pre\214x or suf)-.1 F
+<8c78>-.25 E 1.893(\(pathname e)72 111.6 R 1.893
+(xpansion requires that the \214lenames e)-.15 F 1.892(xist\), bash implements)
+-.15 F/F2 10/Times-Italic@0 SF(br)4.392 E 1.892(ace e)-.15 F(xpansion)-.2 E F0
+4.392(,ac)C(apability)469 111.6 Q(pick)72 123.6 Q .496(ed up from csh.)-.1 F
+.496(Brace e)5.496 F .496(xpansion is similar to pathname e)-.15 F .496
+(xpansion, b)-.15 F .497(ut the strings generated need not)-.2 F 1.107
+(correspond to e)72 135.6 R 1.107(xisting \214les.)-.15 F 3.607(Ab)6.107 G
+1.107(race e)207.655 135.6 R 1.107(xpression consists of an optional)-.15 F F2
+(pr)3.606 E(eamble)-.37 E F0 3.606(,f)1.666 G(ollo)419.286 135.6 Q 1.106
+(wed by a pair of)-.25 F 2.809
+(braces enclosing a series of comma-separated strings, and an optional)72 147.6
+R F2(postamble)5.31 E F0 7.81(.T)1.666 G 2.81(he preamble is)440.06 147.6 R(pr\
+epended to each string within the braces, and the postamble is then appended t\
+o each resulting string:)72 159.6 Q/F3 10/Courier@0 SF 6($e)97 177.6 S
+(cho a{d,c,b}e)115 177.6 Q(ade ace abe)97 189.6 Q F1 2.5(4.3.7. Pr)72 219.6 R
+(ompt Customization)-.18 E F0 .077(One of the more popular interacti)97 235.2 R
+.376 -.15(ve f)-.25 H .076(eatures that bash pro).15 F .076
+(vides is the ability to customize the prompt.)-.15 F(Both)72 247.2 Q F1(PS1)
+3.305 E F0(and)3.305 E F1(PS2,)3.305 E F0 .805
+(the primary and secondary prompts, are e)3.305 F .805
+(xpanded before being displayed.)-.15 F -.15(Pa)5.805 G(rameter).15 E .324
+(and v)72 259.2 R .324(ariable e)-.25 F .324
+(xpansion is performed when the prompt string is e)-.15 F .323
+(xpanded, so the v)-.15 F .323(alue of an)-.25 F 2.823(ys)-.15 G .323(hell v)
+454.217 259.2 R(ariable)-.25 E .728(can be put into the prompt \(e.g.,)72 271.2
+R F1($SHL)3.228 E(VL)-.92 E F0 3.228(,w)C .728(hich indicates ho)258.564 271.2
+R 3.228(wd)-.25 G .729(eeply the current shell is nested\).)342.988 271.2 R
+(Bash)5.729 E 1.895
+(specially interprets characters in the prompt string preceded by a backslash.)
+72 283.2 R 1.895(Some of these backslash)6.895 F .874
+(escapes are replaced with the current time, the date, the current w)72 295.2 R
+.874(orking directory)-.1 F 3.374(,t)-.65 G .874(he username, and the)416.958
+295.2 R .781(command number or history number of the command being entered.)72
+307.2 R .78(There is e)5.781 F -.15(ve)-.25 G 3.28(nab).15 G .78
+(ackslash escape to)429.13 307.2 R .007
+(cause the shell to change its prompt when running as root after an)72 319.2 R
+F2(su)2.507 E F0 5.007(.B)C .008(efore printing each primary prompt,)360.388
+319.2 R .27(bash e)72 331.2 R .27(xpands the v)-.15 F(ariable)-.25 E F1(PR)2.77
+E(OMPT_COMMAND)-.3 E F0 .269(and, if it has a v)2.77 F .269(alue, e)-.25 F -.15
+(xe)-.15 G .269(cutes the e).15 F .269(xpanded v)-.15 F .269(alue as a)-.25 F
+.04(command, allo)72 343.2 R .041(wing additional prompt customization.)-.25 F
+-.15(Fo)5.041 G 2.541(re).15 G .041
+(xample, this assignment causes the current user)311.964 343.2 R(,)-.4 E .99
+(the current host, the time, the last component of the current w)72 355.2 R
+.989(orking directory)-.1 F 3.489(,t)-.65 G .989(he le)402.954 355.2 R -.15(ve)
+-.25 G 3.489(lo).15 G 3.489(fs)443.412 355.2 S .989(hell nesting,)454.121 355.2
+R(and the history number of the current command to be embedded into the primar\
+y prompt:)72 367.2 Q F3 6($P)97 385.2 S
+(S1='\\u@\\h [\\t] \\W\($SHLVL:\\!\)\\$ ')115 385.2 Q
+(chet@odin [21:03:44] documentation\(2:636\)$ cd ..)97 397.2 Q
+(chet@odin [21:03:54] src\(2:637\)$)97 409.2 Q F0 .619
+(The string being assigned is surrounded by single quotes so that if it is e)72
+430.8 R(xported,)-.15 E F1(SHL)3.119 E(VL)-.92 E F0 .619(will be updated)3.119
+F(by a child shell:)72 442.8 Q F3
+(chet@odin [21:13:35] src\(2:638\)$ export PS1)97 460.8 Q
+(chet@odin [21:17:40] src\(2:639\)$ bash)97 472.8 Q
+(chet@odin [21:17:46] src\(3:696\)$)97 484.8 Q F0(The)72 506.4 Q F1(\\$)2.5 E
+F0(escape is displayed as `)2.5 E(`)-.74 E F1($)A F0 1.48 -.74('' w)D
+(hen running as a normal user).74 E 2.5(,b)-.4 G(ut as `)342.08 506.4 Q(`)-.74
+E F1(#)A F0 1.48 -.74('' w)D(hen running as root.).74 E F1 2.5(4.3.8. POSIX)72
+530.4 R(Mode)2.5 E F0 .46(Although bash is intended to be POSIX.2 compliant, t\
+here are areas in which the def)97 546 R .46(ault beha)-.1 F .46(vior is)-.2 F
+1.168(not compatible with the standard.)72 558 R -.15(Fo)6.169 G 3.669(ru).15 G
+1.169(sers who wish to operate in a strict POSIX.2 en)238.85 558 R 1.169
+(vironment, bash)-.4 F .61(implements a)72 570 R F2 .61(POSIX mode)3.11 F F0
+5.61(.W)C .61(hen this mode is acti)199.42 570 R -.15(ve)-.25 G 3.109(,b).15 G
+.609(ash modi\214es its def)303.727 570 R .609(ault operation where it dif)-.1
+F(fers)-.25 E .066(from POSIX.2 to match the standard.)72 582 R .067
+(POSIX mode is entered when bash is started with the)5.066 F F1 .067(-o posix)
+2.567 F F0(option)2.567 E .382(or when)72 594 R F1 .382(set -o posix)2.882 F F0
+.381(is e)2.881 F -.15(xe)-.15 G 2.881(cuted. F).15 F .381
+(or compatibility with other GNU softw)-.15 F .381
+(are that attempts to be POSIX.2)-.1 F 5.752
+(compliant, bash also enters POSIX mode if either of the v)72 606 R(ariables)
+-.25 E F1(POSIX_PED)8.253 E(ANTIC)-.35 E F0(or)8.253 E F1(POSIXL)72 618 Q
+(Y_CORRECT)-.92 E F0 1.179(is set when bash is started or assigned a v)3.679 F
+1.178(alue during e)-.25 F -.15(xe)-.15 G 3.678(cution. When).15 F 1.178
+(bash is)3.678 F .218(started in POSIX mode, for e)72 630 R .218(xample, the)
+-.15 F F1(kill)2.718 E F0 -.2(bu)2.718 G(iltin').2 E(s)-.55 E F1<ad6c>2.718 E
+F0 .218(option beha)2.718 F -.15(ve)-.2 G 2.718(sd).15 G(if)370.166 630 Q .219
+(ferently: it lists the names of all)-.25 F 1.084(signals on a single line sep\
+arated by spaces, rather than listing the signal names and their corresponding)
+72 642 R(numbers.)72 654 Q .865(Some of the def)97 669.6 R .865(ault bash beha)
+-.1 F .865(vior dif)-.2 F .865
+(fers from other shells as a result of the POSIX standard.)-.25 F -.15(Fo)5.866
+G(r).15 E 1.16(instance, bash includes the)72 681.6 R F1(!)3.66 E F0(reserv)
+6.16 E 1.16(ed w)-.15 F 1.16(ord to ne)-.1 F -.05(ga)-.15 G 1.16
+(te the return status of a pipeline because it has been).05 F
+(de\214ned by POSIX.2.)72 693.6 Q
+(Neither sh nor ksh has implemented that feature.)5 E EP
+%%Page: 10 10
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(0-)288 48 S/F1 10/Times-Bold@0
+SF 2.5(4.4. F)72 84 R(eatur)-.25 E(es Unique to ksh)-.18 E F0 .177
+(Ksh includes a number of features not in the currently-released v)97 99.6 R
+.178(ersion of bash, v)-.15 F .178(ersion 1.14.)-.15 F(Unless)5.178 E .822
+(noted, none of these features is in the POSIX.2 standard.)72 111.6 R .821
+(Where appropriate the equi)5.821 F -.25(va)-.25 G .821(lent bash features).25
+F(are noted.)72 123.6 Q F1 2.5(4.4.1. The)72 147.6 R(ksh Language)2.5 E F0
+2.955(An)97 163.2 S .955 -.25(ew c)112.175 163.2 T .455(ompound command folds)
+.25 F F1(test)2.955 E F0 .456(into the ksh language, delimited by the reserv)
+2.955 F .456(ed w)-.15 F(ords)-.1 E F1([[)2.956 E F0(and)2.956 E F1(]])72 175.2
+Q F0 5.726(.T)C .726(he syntax is identical to)92.996 175.2 R F1(test)3.225 E
+F0 .725(with a fe)3.225 F 3.225(wc)-.25 G .725
+(hanges: for instance, instead of)262.855 175.2 R F1<ad61>3.225 E F0(and)3.225
+E F1<ad6f>3.225 E F0(,)A F1(&&)3.225 E F0(and)3.225 E/F2 10/Symbol SF<efef>
+3.225 E F0(are)3.225 E 3.32(used. The)72 187.2 R -.1(wo)3.32 G .82(rds between)
+.1 F F1([[)3.32 E F0(and)3.32 E F1(]])3.32 E F0 .82(are not processed for w)
+3.32 F .82(ord splitting or \214lename generation.)-.1 F .82(The ne)5.82 F(w)
+-.25 E .926
+(command does pattern matching as well as string comparison, a la the)72 199.2
+R F1(case)3.425 E F0 3.425(command. This)3.425 F(ne)3.425 E 3.425(wc)-.25 G
+(ontrol)480.11 199.2 Q .165(structure does ha)72 211.2 R .465 -.15(ve t)-.2 H
+.165(he adv).15 F .166(antage of reducing common ar)-.25 F .166
+(gument problems encountered using test \(e.g.)-.18 F F1(test)2.666 E
+("$string")72 223.2 Q F0 2.928(,w)C(here)125.748 223.2 Q F1($string)2.928 E F0
+-.15(ex)2.928 G .428(pands to).15 F F1<ad66>2.928 E F0 .428(\), b)B .428
+(ut at the cost of bloating the language.)-.2 F .427(The POSIX.2 test algo-)
+5.427 F 2.752(rithm that bash uses, along with some programmer care, alle)72
+235.2 R 2.752(viates those problems in a backw)-.25 F(ards-)-.1 E .854
+(compatible w)72 247.2 R .853(ay with no additions to the language.)-.1 F .853
+(The one capability of)5.853 F F1 .853([[ ]])3.353 F F0 .853(not a)3.353 F -.25
+(va)-.2 G .853(ilable in bash is its).25 F(ability to test whether an indi)72
+259.2 Q(vidual)-.25 E F1(set \255o)2.5 E F0(option is turned on or of)2.5 E(f.)
+-.25 E .339(Other parts of the ksh language are not common to bash.)97 274.8 R
+(The)5.34 E F1(\(\(...\)\))2.84 E F0(operator)5.34 E 2.84(,e)-.4 G(qui)419.33
+274.8 Q -.25(va)-.25 G .34(lent to).25 F F1 .34(let "...")2.84 F F0(,)A .197
+(is unique to ksh, as are the concept of co-processes and the)72 286.8 R F1
+(time)2.697 E F0 -.1(ke)2.696 G(yw)-.05 E .196
+(ord to time commands and pipelines.)-.1 F F1 2.5(4.4.2. Functions)72 310.8 R
+(and Aliases)2.5 E F0 1.022(The K)97 326.4 R 1.022(orn shell has)-.35 F/F3 10
+/Times-Italic@0 SF(autoloaded)3.522 E F0 3.522(functions. A)3.522 F 1.022
+(function mark)3.522 F 1.022(ed as)-.1 F F3(autoload)3.522 E F0 1.022
+(is not de\214ned until it is)5.188 F 1.042(\214rst e)72 338.4 R -.15(xe)-.15 G
+3.542(cuted. When).15 F 1.042(such a function is e)3.542 F -.15(xe)-.15 G 1.042
+(cuted, a search is made through the directories in).15 F F1(FP)3.541 E -.95
+(AT)-.74 G(H).95 E F0(\(a)3.541 E .27
+(colon-separated list of directories similar to)72 350.4 R F1 -.74(PA)2.77 G
+(TH)-.21 E F0 2.77(\)f)C .27(or a \214le with the same name as the function.)
+285.78 350.4 R .27(That \214le)5.27 F .548(is then read in as with the)72 362.4
+R F1(.)3.881 E F0 .547(command; presumably the function is de\214ned therein.)
+3.047 F .547(There is a pair of shell)5.547 F .886
+(functions included in the bash distrib)72 374.4 R .886(ution \()-.2 F F3 -.2
+(ex)C(amples/functions/autoload).2 E F0 5.886(\)t)C .886(hat pro)378.35 374.4 R
+.886(vide much of this func-)-.15 F
+(tionality without changing the shell itself.)72 386.4 Q .116
+(Ksh functions are scoped in such a w)97 402 R .116(ay that the en)-.1 F .116
+(vironment in which the)-.4 F 2.616(ya)-.15 G .116(re e)405.144 402 R -.15(xe)
+-.15 G .115(cuted is closer to a).15 F .827(shell script en)72 414 R 3.327
+(vironment. Bash)-.4 F .827(uses the POSIX.2 scoping rules, which mak)3.327 F
+3.327(et)-.1 G .827(he function e)392.517 414 R -.15(xe)-.15 G .828(cution en)
+.15 F(vi-)-.4 E 1.2(ronment an e)72 426 R 1.2(xact cop)-.15 F 3.7(yo)-.1 G 3.7
+(ft)174.86 426 S 1.199(he shell en)184.67 426 R 1.199
+(vironment with the replacement of the shell')-.4 F 3.699(sp)-.55 G 1.199
+(ositional paramters)426.421 426 R(with the function ar)72 438 Q 2.5
+(guments. K)-.18 F
+(orn shell functions do not share options or traps with the in)-.35 E -.2(vo)
+-.4 G(king shell.).2 E .451(Ksh has)97 453.6 R F3(tr)2.951 E(ac)-.15 E -.1(ke)
+-.2 G(d).1 E F0 .452(aliases, which alias a command name to its full pathname.)
+2.952 F .452(Bash has true command)5.452 F(hashing.)72 465.6 Q F1 2.5
+(4.4.3. Arrays)72 489.6 R F0 .246
+(Arrays are an aspect of ksh that has no real bash equi)97 505.2 R -.25(va)-.25
+G 2.746(lent. The).25 F 2.746(ya)-.15 G .246(re easy to create and manipulate:)
+371.42 505.2 R 1.637
+(an array is created automatically by using subscript assignment \()72 517.2 R
+F1(name)A F0([)A F3(inde)A(x)-.2 E F0(]=)A F1 -.1(va)C(lue).1 E F0 1.637
+(\), and an)B 4.137(yv)-.15 G(ariable)476.79 517.2 Q 1.967
+(may be referred to as an array)72 529.2 R 6.967(.K)-.65 G 1.967(sh arrays, ho)
+219.229 529.2 R(we)-.25 E -.15(ve)-.25 G 2.767 -.4(r, h).15 H -2.25 -.2(av e).4
+H(se)4.667 E -.15(ve)-.25 G 1.967(ral anno).15 F 1.967(ying limitations: the)
+-.1 F 4.466(ym)-.15 G 1.966(ay be)480.654 529.2 R(inde)72 541.2 Q -.15(xe)-.15
+G 3.498(do).15 G .998(nly up to 512 or 1024 elements, depending on ho)111.858
+541.2 R 3.498(wt)-.25 G .999(he shell is compiled, and there is only the)
+330.188 541.2 R(clumsy)72 553.2 Q F1 .223(set -A)2.723 F F0 .223
+(to assign a list of v)2.723 F .223(alues sequentially)-.25 F 5.223(.D)-.65 G
+.223(espite these limits, arrays are useful, if underutilized)293.31 553.2 R
+(by shell programmers.)72 565.2 Q F1 2.5(4.4.4. Builtin)72 589.2 R(Commands)2.5
+E F0 .112(Some of the b)97 604.8 R .112(uiltin commands ha)-.2 F .412 -.15
+(ve b)-.2 H .112(een e).15 F .112(xtended or are ne)-.15 F 2.612(wi)-.25 G
+2.613(nk)351.402 604.8 S 2.613(sh. The)364.015 604.8 R F1(print)2.613 E F0 -.2
+(bu)2.613 G .113(iltin w).2 F .113(as included)-.1 F .242(to w)72 616.8 R .242
+(ork around the incompatibilities and limitations of)-.1 F F1(echo)2.741 E F0
+5.241(.T)C(he)328.234 616.8 Q F1(whence)2.741 E F0 .241(command tells what w)
+2.741 F .241(ould hap-)-.1 F .418(pen if each ar)72 628.8 R .418
+(gument were typed as a command name.)-.18 F(The)5.418 E F1(cd)2.919 E F0 -.2
+(bu)2.919 G .419(iltin has been e).2 F .419(xtended to tak)-.15 F 2.919(eu)-.1
+G 2.919(pt)470.482 628.8 S 2.919(ot)481.181 628.8 S -.1(wo)491.88 628.8 S(ar)72
+640.8 Q 1.425(guments: if tw)-.18 F 3.925(oa)-.1 G -.18(rg)153.485 640.8 S
+1.424(uments are supplied, the second is substituted for the \214rst in the cu\
+rrent directory).18 F 2.294
+(name and the shell changes to the resultant directory name.)72 652.8 R 2.295
+(The ksh)7.294 F F1(trap)4.795 E F0 -.2(bu)4.795 G 2.295(iltin accepts).2 F F1
+(ERR)4.795 E F0(and)4.795 E F1(DEB)72 664.8 Q(UG)-.1 E F0 .15(as trap names.)
+2.65 F(The)5.15 E F1(ERR)2.65 E F0 .15(trap is e)2.65 F -.15(xe)-.15 G .15
+(cuted when a command f).15 F(ails;)-.1 E F1(DEB)2.65 E(UG)-.1 E F0 .15(is e)
+2.65 F -.15(xe)-.15 G .15(cuted after e).15 F -.15(ve)-.25 G(ry).15 E
+(simple command.)72 676.8 Q .05(The bash distrib)97 692.4 R .05
+(ution includes shell functions that implement)-.2 F F1(print)2.55 E F0(and)
+2.55 E F1(whence)2.55 E F0 .05(and the e)2.55 F .05(xtensions to)-.15 F F1(cd)
+72 704.4 Q F0(.)A EP
+%%Page: 11 11
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(1-)288 48 S/F1 10/Times-Bold@0
+SF 2.5(4.4.5. Expansion)72 84 R F0 .282(The ksh \214lename generation \()97
+99.6 R/F2 10/Times-Italic@0 SF(globbing)A F0 2.782(\)f)C .282(acilities ha)
+262.45 99.6 R .581 -.15(ve b)-.2 H .281(een e).15 F .281(xtended be)-.15 F .281
+(yond their bash and sh coun-)-.15 F 3.68(terparts. In)72 111.6 R 1.181
+(this area, ksh can be thought of as)3.681 F F2 -.4(eg)3.681 G -.37(re).4 G(p)
+.37 E F0 1.181(to the bash)5.347 F F2(gr)3.681 E(ep)-.37 E F0 6.181(.K)1.666 G
+1.181(sh globbing of)382.406 111.6 R 1.181(fers things lik)-.25 F(e)-.1 E 1.018
+(alternation, the ability to match zero or more instances of a pattern, and th\
+e ability to match e)72 123.6 R 1.018(xactly one)-.15 F(occurrence of an)72
+135.6 Q 2.5(yo)-.15 G 2.5(fal)150.98 135.6 S(ist of patterns.)166.53 135.6 Q F1
+2.5(4.4.6. Startup)72 159.6 R(Files)2.5 E F0 .977(Ksh and bash e)97 175.2 R
+-.15(xe)-.15 G .977(cute startup \214les dif).15 F(ferently)-.25 E 5.977(.K)
+-.65 G .977(sh e)297.879 175.2 R(xpands)-.15 E F1(ENV)3.478 E F0 .978
+(and sources the \214le it names for)3.478 F -2.15 -.25(ev e)72 187.2 T 1.85
+(ry shell.).25 F 1.85(Bash sources)6.85 F F1($ENV)4.35 E F0 1.85
+(only in non-interacti)4.35 F 2.15 -.15(ve s)-.25 H 1.85(hells; interacti).15 F
+2.15 -.15(ve s)-.25 H 1.85(hells source \214x).15 F 1.85(ed \214les, as)-.15 F
+-.15(ex)72 199.2 S 1.285(plained in the pre).15 F 1.285(vious section.)-.25 F
+1.285(The POSIX standard has speci\214ed the ksh beha)6.285 F(vior)-.2 E 3.785
+(,s)-.4 G 3.785(ob)441.545 199.2 S 1.285(ash acts the)455.33 199.2 R
+(same as ksh if started with the)72 211.2 Q F1(\255posix)2.5 E F0(or)2.5 E F1
+(\255o posix)2.5 E F0(options.)2.5 E F1 2.5(4.4.7. History)72 235.2 R F0
+(Finally)97 250.8 Q 3.372(,t)-.65 G .872(he ksh history implementation dif)
+133.342 250.8 R .871(fers slightly from bash.)-.25 F .871
+(Each instance of bash k)5.871 F .871(eeps the)-.1 F .633
+(history list in memory and of)72 262.8 R .633(fers options to the)-.25 F F1
+(history)3.133 E F0 -.2(bu)3.133 G .634
+(iltin to write the list to or read it from a named).2 F 3.216(\214le. Ksh)72
+274.8 R -.1(ke)3.216 G .716
+(eps the history in a \214le, which it accesses each time a command is sa).1 F
+-.15(ve)-.2 G 3.215(dt).15 G 3.215(oo)426.445 274.8 S 3.215(rr)439.66 274.8 S
+(etrie)449.535 274.8 Q -.15(ve)-.25 G 3.215(df).15 G(rom)487.89 274.8 Q .338
+(the history)72 286.8 R 5.338(.K)-.65 G .338
+(sh history \214les may be shared among dif)129.246 286.8 R .338
+(ferent concurrent instances of ksh, which could be a)-.25 F
+(bene\214t to the user)72 298.8 Q(.)-.55 E F1 2.5(5. F)72 322.8 R(eatur)-.25 E
+(es in Bash-2.0)-.18 E F0 .657(The ne)97 338.4 R .657
+(xt release of bash, 2.0, will be a major o)-.15 F -.15(ve)-.15 G 3.157
+(rhaul. It).15 F .656(will include man)3.157 F 3.156(yn)-.15 G 1.156 -.25(ew f)
+419.532 338.4 T .656(eatures, for both).25 F .705(programming and interacti)72
+350.4 R 1.005 -.15(ve u)-.25 H 3.205(se. Redundant).15 F -.15(ex)3.205 G .705
+(isting functions will be remo).15 F -.15(ve)-.15 G 3.206(d. There).15 F .706
+(are se)3.206 F -.15(ve)-.25 G .706(ral cases).15 F 1.34(where bash treats a v)
+72 362.4 R 1.34(ariable specially to enable functionality a)-.25 F -.25(va)-.2
+G 1.34(ilable another w).25 F 1.34(ay \()-.1 F F1($nolinks)A F0(vs.)3.84 E F1
+1.34(set -o)3.84 F(ph)72 374.4 Q(ysical)-.15 E F0 2.5(,f)C(or e)115.19 374.4 Q
+(xample\); the special treatment of the v)-.15 E(ariable name will be remo)-.25
+E -.15(ve)-.15 G(d.).15 E F1 2.5(5.1. Arrays)72 398.4 R F0 .546(Bash-2.0 will \
+include arrays which are a superset of those in ksh, with the size limitations\
+ remo)97 414 R -.15(ve)-.15 G(d.).15 E(The)72 426 Q F1(declar)3.086 E(e)-.18 E
+F0(,)A F1 -.18(re)3.086 G(adonly).18 E F0 3.086(,a)C(nd)174.768 426 Q F1
+(export)3.086 E F0 -.2(bu)3.086 G .586
+(iltins will accept options to specify arrays, and the).2 F F1 -.18(re)3.085 G
+(ad).18 E F0 -.2(bu)3.085 G .585(iltin will).2 F(ha)72 438 Q .81 -.15(ve a)-.2
+H 3.01(no).15 G .51(ption to read a list of w)110.99 438 R .51
+(ords and assign them directly to an array)-.1 F 5.51(.T)-.65 G .51
+(here will also be a ne)386.23 438 R 3.01(wa)-.25 G(rray)487.9 438 Q F2 .262
+(compound assignment)72 450 R F0 .262(syntax a)2.762 F -.25(va)-.2 G .262
+(ilable for assignment statements and the).25 F F1(declar)2.761 E(e)-.18 E F0
+-.2(bu)2.761 G 2.761(iltin. This).2 F(ne)2.761 E 2.761(ws)-.25 G(yntax)481.78
+450 Q .441(has the form)72 462 R F2(name)2.941 E F0(=\()A F2(value1)A F0(...)
+2.941 E F2(valueN)2.941 E F0 .441(\), where each)B F2(value)2.942 E F0 .442
+(has the form [)4.608 F F2(subscript)A F0(]=)A F2(string)A F0 5.442(.O)C .442
+(nly the)449.776 462 R F2(string)2.942 E F0 1.395(is required.)72 474 R 1.395
+(If the optional brack)6.395 F 1.395(ets and)-.1 F F2(subscript)3.894 E F0
+1.394(are included, that inde)3.894 F 3.894(xi)-.15 G 3.894(sa)388.714 474 S
+1.394(ssigned to, otherwise the)400.938 474 R(inde)72 486 Q 3.656(xo)-.15 G
+3.656(ft)102.726 486 S 1.156(he element assigned is the last inde)112.492 486 R
+3.657(xa)-.15 G 1.157(ssigned to by the statement plus one.)272.917 486 R(Inde)
+6.157 E 1.157(xing starts at)-.15 F 2.73(zero. The)72 498 R .23
+(same syntax is accepted by)2.73 F F1(declar)2.73 E(e)-.18 E F0 5.229(.I)C(ndi)
+269.159 498 Q .229(vidual array elements may be assigned to using the ksh)-.25
+F F2(name)72 510 Q F0([)A F2(subscript)A F0(]=)A F2(value)A F0(.)A F1 2.5
+(5.2. Dynamic)72 534 R(Loading)2.5 E F0 .348(On systems that support the)97
+549.6 R F2(dlopen)2.848 E F0 .349(\(3\) library function, bash-2.0 will allo)B
+2.849(wn)-.25 G .849 -.25(ew b)407.504 549.6 T .349(uiltins to be loaded).05 F
+.049(into a running shell from a shared object \214le.)72 561.6 R .049(The ne)
+5.049 F 2.549(wb)-.25 G .049(uiltins will ha)298.999 561.6 R .348 -.15(ve a)-.2
+H .048(ccess to the rest of the shell f).15 F(acil-)-.1 E .649(ities, b)72
+573.6 R .649(ut programmers will be subject to a fe)-.2 F 3.149(ws)-.25 G .649
+(tructural rules.)269.591 573.6 R .65(This will be pro)5.65 F .65
+(vided via a ne)-.15 F 3.15(wo)-.25 G .65(ption to)472.51 573.6 R F1(enable)72
+585.6 Q F0(.)A F1 2.5(5.3. Builtins)72 609.6 R F0 .889(Some of the e)97 625.2 R
+.889(xisting b)-.15 F .889(uiltins will change in bash-2.0.)-.2 F .888(As pre)
+5.888 F .888(viously noted,)-.25 F F1(declar)3.388 E(e)-.18 E F0(,)A F1(export)
+3.388 E F0(,)A F1 -.18(re)3.388 G(ad-).18 E(only)72 637.2 Q F0 2.873(,a)C(nd)
+100.153 637.2 Q F1 -.18(re)2.873 G(ad).18 E F0 .373(will accept ne)2.873 F
+2.873(wo)-.25 G .374(ptions to specify arrays.)206.288 637.2 R(The)5.374 E F1
+(jobs)2.874 E F0 -.2(bu)2.874 G .374(iltin will be able to list only stopped).2
+F .323(or running jobs.)72 649.2 R(The)5.322 E F1(enable)2.822 E F0 .322
+(command will tak)2.822 F 2.822(ean)-.1 G -.25(ew)282.84 649.2 S F1<ad73>3.072
+E F0 .322(option to restrict its actions to the POSIX.2)2.822 F F2(spe-)2.822 E
+(cial)72 661.2 Q F0 -.2(bu)3.14 G(iltins.).2 E F1(Kill)5.64 E F0 .64
+(will be able to list signal numbers corresponding to indi)3.14 F .64
+(vidual signal names.)-.25 F .64(The read-)5.64 F .703(line library interf)72
+673.2 R(ace,)-.1 E F1(bind)3.203 E F0 3.203(,w)C .703(ill ha)193.032 673.2 R
+1.003 -.15(ve a)-.2 H 3.203(no).15 G .703(ption to remo)243.951 673.2 R 1.003
+-.15(ve t)-.15 H .703(he binding for an).15 F 3.203(yk)-.15 G 1.002 -.15(ey s)
+398.032 673.2 T .702(equence \(which is not).15 F
+(the same as binding it to self-insert\).)72 685.2 Q .494(There will be tw)97
+700.8 R 2.994(on)-.1 G .994 -.25(ew b)177.196 700.8 T .495
+(uiltin commands in bash-2.0.).05 F(The)5.495 E F1(diso)2.995 E(wn)-.1 E F0
+.495(command will remo)2.995 F .795 -.15(ve j)-.15 H .495(obs from).15 F(bash')
+72 712.8 Q 3.445(si)-.55 G .945(nternal jobs table when job control is acti)
+103.225 712.8 R -.15(ve)-.25 G 5.945(.A).15 G(diso)303.25 712.8 Q .944
+(wned job will not be listed by the jobs com-)-.25 F .666(mand, nor will its e)
+72 724.8 R .666(xit status be reported.)-.15 F(Diso)5.667 E .667
+(wned jobs will not be sent a)-.25 F F1(SIGHUP)3.167 E F0 .667
+(when an interacti)3.167 F -.15(ve)-.25 G EP
+%%Page: 12 12
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(2-)288 48 S .688(shell e)72 84 R
+3.187(xits. Most)-.15 F .687(of the shell')3.187 F 3.187(so)-.55 G .687
+(ptional or)205.423 84 R/F1 10/Times-Italic@0 SF(to)3.187 E -.1(gg)-.1 G(led).1
+E F0 .687(functionality will be folded into the ne)3.187 F(w)-.25 E/F2 10
+/Times-Bold@0 SF(shopt)3.187 E F0 -.2(bu)3.187 G(iltin.).2 E(Man)72 96 Q 3.714
+(yo)-.15 G 3.714(ft)103.894 96 S 1.214(he v)113.718 96 R 1.214
+(ariables which alter the shell')-.25 F 3.714(sb)-.55 G(eha)266.282 96 Q 1.214
+(vior when set \(re)-.2 F -.05(ga)-.15 G 1.214(rdless of their v).05 F 1.215
+(alue\) will be made)-.25 F 6(options settable with)72 108 R F2(shopt)8.5 E F0
+11(.E)C 6(xamples of such v)218.23 108 R 6(ariables include)-.25 F F2(allo)8.5
+E(w_null_glob_expansion)-.1 E F0(,)A F2(glob_dot_\214lenames)72 120 Q F0 2.5
+(,a)C(nd)163.67 120 Q F2(MAIL_W)2.5 E(ARNING)-1.2 E F0(.)A F2 2.5(5.4. V)72 144
+R(ariables and V)-.92 E(ariable Expansion)-.92 E F0 .047
+(Bash-2.0 will implement se)97 159.6 R -.15(ve)-.25 G .048(ral ne).15 F 2.548
+(wv)-.25 G .048(ariable e)252.988 159.6 R 2.548(xpansions. These)-.15 F .048
+(will answer se)2.548 F -.15(ve)-.25 G .048(ral of the most per).15 F(-)-.2 E
+.213(sistant requests for ne)72 171.6 R 2.713(wf)-.25 G 2.713(eatures. It)
+172.582 171.6 R .213(will be possible to `)2.713 F .212(`indirectly reference')
+-.74 F 2.712('av)-.74 G .212(ariable with an e)398.534 171.6 R(xpansion,)-.15 E
+(lik)72 183.6 Q 3.01(eu)-.1 G(sing)94.91 183.6 Q/F3 10/Courier@0 SF .51
+(eval \\$${name})3.01 F F0 .51(to reference a v)3.01 F .51(ariable named by)
+-.25 F F3(${name})3.01 E F0 5.51(.E)C .51(xpansions will be a)394.32 183.6 R
+-.25(va)-.2 G(ilable).25 E .462(to retrie)72 195.6 R .762 -.15(ve s)-.25 H .462
+(ubstrings of v).15 F .461(ariables in an)-.25 F F1(awk)2.961 E F0(-lik)A 2.961
+(em)-.1 G .461(anner: starting at a speci\214c inde)277.692 195.6 R .461
+(x, retrie)-.15 F .461(ving some num-)-.25 F .941
+(ber of characters or the rest of the string.)72 207.6 R .941
+(It will be possible to retrie)5.941 F 1.241 -.15(ve s)-.25 H .941
+(equences of array elements lik).15 F(e)-.1 E .354(this, too.)72 219.6 R .354
+(It w)5.354 F .354(ould be nice to ha)-.1 F .654 -.15(ve a w)-.2 H .354
+(ay to replace portions of a v).05 F .353
+(ariable matching a pattern the same w)-.25 F(ay)-.1 E(leading or trailing sub\
+strings are presently stripped; that capability may be a)72 231.6 Q -.25(va)-.2
+G(ilable.).25 E .453(Another ne)97 247.2 R 2.953(we)-.25 G .453
+(xpansion will pro)156.376 247.2 R .453(vide a w)-.15 F .454
+(ay to create strings containing arbitrary characters, which is)-.1 F(incon)72
+259.2 Q -.15(ve)-.4 G 1.636(nient in the current v).15 F 4.136(ersion. W)-.15 F
+1.635(ords of the form $')-.8 F F1(string)A F0 4.135('w)C 1.635(ill e)355.145
+259.2 R 1.635(xpand to)-.15 F F1(string)4.135 E F0 1.635(with backslash-)4.135
+F 1.231(escaped characters in)72 271.2 R F1(string)3.731 E F0 1.231
+(replaced as speci\214ed by the ANSI C standard.)3.731 F 1.232
+(As with other single-quoted)6.232 F
+(shell strings, the only character that may not appear in)72 283.2 Q F1(string)
+2.5 E F0(is a single quote.)2.5 E 1.436(The shell v)97 298.8 R 1.436
+(ariables will change also.)-.25 F 3.936(An)6.436 G 1.936 -.25(ew va)272.052
+298.8 T(riable).25 E F2(HISTIGNORE)3.936 E F0 1.435(will supersede)3.936 F F2
+(HISTCON-)3.935 E(TR)72 310.8 Q(OL)-.3 E F0(.)A F2(HISTIGNORE)5.327 E F0 .327
+(is the history analogy of)2.827 F F2(FIGNORE)2.828 E F0 2.828(:ac)C .328
+(olon-separated list of patterns specifying)339.938 310.8 R 1.082
+(commands to omit from the history list.)72 322.8 R 1.081
+(The special pattern '&' will match the pre)6.081 F 1.081
+(vious history line, to)-.25 F(pro)72 334.8 Q 1.568(vide the)-.15 F F2
+(HISTCONTR)4.068 E(OL)-.3 E F1(ignor)4.068 E(edups)-.37 E F0(beha)5.734 E(vior)
+-.2 E 6.568(.M)-.55 G(an)303.546 334.8 Q 4.069(yv)-.15 G 1.569
+(ariables which modify the shell')326.655 334.8 R 4.069(sb)-.55 G(eha)474.21
+334.8 Q(vior)-.2 E .395(will lose their special meaning.)72 346.8 R -1.11(Va)
+5.395 G .395(riables such as)1.11 F F2(notify)2.895 E F0(and)2.895 E F2(noclob)
+2.895 E(ber)-.1 E F0 .395(which pro)2.895 F .395(vide functionality a)-.15 F
+-.25(va)-.2 G(il-).25 E .931
+(able via other mechanisms will no longer be treated specially)72 358.8 R 5.931
+(.O)-.65 G .931(ther v)340.06 358.8 R .932(ariables will be folded into)-.25 F
+F2(shopt)3.432 E F0(.)A(The)72 370.8 Q F2(history_contr)5.519 E(ol)-.18 E F0
+(and)5.519 E F2(hostname_completion_\214le)5.519 E F0 -.25(va)5.519 G 3.019
+(riables, superseded by).25 F F2(HISTCONTR)5.518 E(OL)-.3 E F0(and)5.518 E F2
+(HOSTFILE)72 382.8 Q F0(respecti)2.5 E -.15(ve)-.25 G(ly).15 E 2.5(,w)-.65 G
+(ill be remo)185.12 382.8 Q -.15(ve)-.15 G(d.).15 E F2 2.5(5.5. Readline)72
+406.8 R F0(Naturally)97 422.4 Q 2.94(,t)-.65 G .44(here will be impro)142.34
+422.4 R -.15(ve)-.15 G .441(ments to readline as well.).15 F .441
+(All of the POSIX.2)5.441 F F1(vi)2.941 E F0 .441(-mode editing com-)B .33
+(mands will be implemented; missing commands lik)72 434.4 R 2.829(e`)-.1 G .329
+(m' to sa)290.599 434.4 R .629 -.15(ve t)-.2 H .329
+(he current cursor position \().15 F F1(mark)A F0 2.829(\)a)C .329(nd the)
+478.951 434.4 R .36(`@' command for macro e)72 446.4 R .36(xpansion will be a)
+-.15 F -.25(va)-.2 G 2.861(ilable. The).25 F .361
+(ability to set the mark and e)2.861 F .361(xchange the current)-.15 F .764
+(cursor position \()72 458.4 R F1(point)A F0 3.264(\)a)C .764
+(nd mark will be added to the readline emacs mode as well.)170.672 458.4 R .763
+(Since there are com-)5.764 F .196
+(mands to set the mark, commands to manipulate the re)72 470.4 R .197
+(gion \(the characters between the point and the mark\))-.15 F .111(will be a)
+72 482.4 R -.25(va)-.2 G 2.611(ilable. Commands).25 F(ha)2.611 E .411 -.15
+(ve b)-.2 H .11
+(een added to the readline emacs mode for more complete ksh compati-).15 F
+(bility)72 494.4 Q 2.5(,s)-.65 G(uch as the C-])101.36 494.4 Q F1(c)A F0
+(character search command.)2.5 E F2 2.5(5.6. Con\214guration)72 518.4 R F0 .318
+(Bash w)97 534 R .318
+(as the \214rst GNU program to completely autocon\214gure.)-.1 F .319
+(Its autocon\214guration mechanism pre-)5.319 F(dates)72 546 Q F1(autoconf)4.07
+E F0 4.07(,t)C 1.569
+(he current GNU con\214guration program, and needs updating.)140.97 546 R 1.569
+(Bash-2.0 may include an)6.569 F .603
+(autoconf-based con\214guration script, if necessary ne)72 558 R 3.103(wf)-.25
+G .603(unctionality can be added to autoconf, or its limita-)294.476 558 R
+(tions bypassed.)72 570 Q F2 2.5(5.7. Miscellaneous)72 594 R F0 1.632
+(The POSIX mode will be impro)97 609.6 R -.15(ve)-.15 G 4.131(di).15 G 4.131
+(nb)254.26 609.6 S 1.631(ash-2.0; it will pro)268.391 609.6 R 1.631
+(vide a more complete superset of the)-.15 F(POSIX standard.)72 621.6 Q -.15
+(Fo)5 G 2.5(rt).15 G(he \214rst time, bash will recognize the e)163.79 621.6 Q
+(xistance of the POSIX.2)-.15 E F1(special)2.5 E F0 -.2(bu)2.5 G(iltins.).2 E
+2.627(An)97 637.2 S .627 -.25(ew t)111.847 637.2 T .127(rap v).25 F(alue,)-.25
+E F2(DEB)2.627 E(UG)-.1 E F0 2.627(,w)C .128(ill be present, as in ksh.)218.405
+637.2 R .128(Commands speci\214ed with a)5.128 F F2(DEB)2.628 E(UG)-.1 E F0
+.128(trap will)2.628 F 1.908(be e)72 649.2 R -.15(xe)-.15 G 1.908
+(cuted after e).15 F -.15(ve)-.25 G 1.908(ry simple command.).15 F 1.908
+(Since this mak)6.908 F 1.908(es shell script deb)-.1 F 1.908
+(uggers possible, I hope to)-.2 F(include a bash deb)72 661.2 Q
+(ugger in the bash-2.0 release.)-.2 E F2 2.5(6. A)72 685.2 R -.1(va)-1 G
+(ilability).1 E F0 5.997(The current v)97 700.8 R 5.997(ersion of bash is a)
+-.15 F -.25(va)-.2 G 5.998(ilable for anon).25 F 5.998
+(ymous FTP from prep.ai.mit.edu as)-.15 F F1(/pub/gnu/bash-1.14.2.tar)72 712.8
+Q(.gz)-1.11 E F0(.)1.666 E EP
+%%Page: 13 13
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 2.5(-1)277.17 48 S 2.5(3-)288 48 S/F1 10/Times-Bold@0
+SF 2.5(7. Conclusion)72 84 R F0 .755(This paper has presented an o)97 99.6 R
+-.15(ve)-.15 G(rvie).15 E 3.255(wo)-.25 G 3.255(fb)259.27 99.6 S .755
+(ash, compared its features with those of other shells, and)270.855 99.6 R
+(hinted at features in the ne)72 111.6 Q(xt release, bash-2.0.)-.15 E .483
+(Bash is a solid replacement for sh.)97 127.2 R .483(It is suf)5.483 F .483
+(\214ciently portable to run on nearly e)-.25 F -.15(ve)-.25 G .484(ry v).15 F
+.484(ersion of)-.15 F/F2 9/Times-Roman@0 SF(UNIX)2.984 E F0 .514
+(from 4.3 BSD to SVR4.2, and se)72 139.2 R -.15(ve)-.25 G(ral).15 E F2(UNIX)
+3.013 E F0 -.1(wo)3.013 G(rkalik).1 E .513(es, and rob)-.1 F .513
+(ust enough to replace sh on most of those)-.2 F .771(systems, It is v)72 151.2
+R .771(ery close to POSIX.2-conformant in POSIX mode, and is getting f)-.15 F
+(aster)-.1 E 5.771(.I)-.55 G 3.272(ti)436.684 151.2 S 3.272(sn)445.516 151.2 S
+.772(ot, unfortu-)457.678 151.2 R(nately)72 163.2 Q 2.663(,g)-.65 G .163
+(etting smaller)105.953 163.2 R 2.663(,b)-.4 G .163(ut there are man)170.399
+163.2 R 2.663(yo)-.15 G .163(ptional features.)248.101 163.2 R .163(It is v)
+5.163 F .162(ery easy to b)-.15 F .162(uild a small subset to use as)-.2 F 2.5
+(ad)72 175.2 S(irect replacement for /bin/sh.)83.94 175.2 Q .909
+(Bash has thousands of users w)97 190.8 R .909(orldwide, all of whom ha)-.1 F
+1.209 -.15(ve h)-.2 H .91(elped to mak).15 F 3.41(ei)-.1 G 3.41(tb)409.34 190.8
+S(etter)420.53 190.8 Q 5.91(.A)-.55 G .91(nother testa-)453.38 190.8 R
+(ment to the bene\214ts of free softw)72 202.8 Q(are.)-.1 E F1 2.5(8. Refer)72
+226.8 R(ences)-.18 E F0 .432([1] S. R. Bourne, `)72 242.4 R .432(`UNIX T)-.74 F
+.432(ime-Sharing System:)-.35 F .431(The UNIX Shell')5.431 F(',)-.74 E/F3 10
+/Times-Italic@0 SF .431(Bell System T)2.931 F(ec)-.92 E .431(hnical J)-.15 F
+(ournal)-.25 E F0 2.931(,5)C(7\(6\),)484.84 242.4 Q
+(July-August, 1978, pp. 1971-1990.)72 254.4 Q .736([2] Morris Bolsk)72 270 R
+3.237(ya)-.15 G .737(nd Da)153.22 270 R .737(vid K)-.2 F(orn,)-.35 E F3 .737
+(The K)3.237 F .737(ornShell Command and Pr)-.4 F -.1(og)-.45 G -.15(ra).1 G
+.737(mming Langua).15 F -.1(ge)-.1 G F0 3.237(,P).1 G .737(rentice Hall,)
+453.833 270 R(1989.)72 282 Q .142([3] Bill Jo)72 297.6 R 1.442 -.65(y, A)-.1 H
+2.642(nI).65 G .141(ntroduction to the C Shell,)140.428 297.6 R F3 .141
+(UNIX User')2.641 F 2.641(sS)-.4 G .141(upplementary Documents)309.346 297.6 R
+F0 2.641(,U)C(ni)424.328 297.6 Q -.15(ve)-.25 G .141(rsity of Califor).15 F(-)
+-.2 E(nia at Berk)72 309.6 Q(ele)-.1 E 1.3 -.65(y, 1)-.15 H(986.).65 E .283
+([4] IEEE,)72 325.2 R F3 .283(IEEE Standar)2.783 F 2.783(df)-.37 G .283
+(or Information T)179.692 325.2 R(ec)-.92 E(hnolo)-.15 E .283(gy -- P)-.1 F
+.283(ortable Oper)-.8 F .283(ating System Interface \(POSIX\) P)-.15 F(art)-.8
+E(2: Shell and Utilities)72 337.2 Q F0 2.5(,1)C(992.)165.06 337.2 Q F1 2.5
+(9. A)72 361.2 R(uthor Inf)-.5 E(ormation)-.25 E F0 .937(Chet Rame)97 376.8 R
+3.437(yi)-.15 G 3.437(sas)153.724 376.8 S(oftw)172.818 376.8 Q .936
+(are engineer w)-.1 F .936(orking at Case W)-.1 F .936(estern Reserv)-.8 F
+3.436(eU)-.15 G(ni)393.43 376.8 Q -.15(ve)-.25 G(rsity).15 E 5.936(.H)-.65 G
+3.436(eh)443.036 376.8 S .936(as a B.S. in)455.912 376.8 R .072
+(Computer Engineering and an M.S. in Computer Science, both from CWR)72 388.8 R
+2.573(U. He)-.4 F .073(has been w)2.573 F .073(orking on bash)-.1 F
+(for six years, and the primary maintainer for one.)72 400.8 Q EP
+%%Trailer
+end
+%%EOF
index 0ca20b1..f769a19 100644 (file)
@@ -1,10 +1,10 @@
 @ignore
-Copyright (C) 1988-2004 Free Software Foundation, Inc.
+Copyright (C) 1988-2005 Free Software Foundation, Inc.
 @end ignore
 
-@set EDITION 3.0
-@set VERSION 3.0
-@set UPDATED 27 July 2004
-@set UPDATED-MONTH July 2004
+@set LASTCHANGE Mon Sep  5 11:47:04 EDT 2005
 
-@set LASTCHANGE Tue Jul 27 09:12:07 EDT 2004
+@set EDITION 3.1-beta1
+@set VERSION 3.1-beta1
+@set UPDATED 5 September 2005
+@set UPDATED-MONTH September 2005
diff --git a/eval.c b/eval.c
index cb4d85a..34a088c 100644 (file)
--- a/eval.c
+++ b/eval.c
@@ -63,8 +63,9 @@ int
 reader_loop ()
 {
   int our_indirection_level;
-  COMMAND *current_command = (COMMAND *)NULL;
+  COMMAND * volatile current_command;
 
+  current_command = (COMMAND *)NULL;
   USE_VAR(current_command);
 
   our_indirection_level = ++indirection_level;
@@ -146,13 +147,13 @@ reader_loop ()
              execute_command (current_command);
 
            exec_done:
+             QUIT;
+
              if (current_command)
                {
                  dispose_command (current_command);
                  current_command = (COMMAND *)NULL;
                }
-
-             QUIT;
            }
        }
       else
diff --git a/examples/bashdb/README b/examples/bashdb/README
new file mode 100644 (file)
index 0000000..2f643d1
--- /dev/null
@@ -0,0 +1,3 @@
+This is a sample implementation of a bash debugger.  It is not the same
+as the project available from http://bashdb.sourceforge.net, and has been
+deprecated in favor of that implementation.
index 2bca9f9..560cb7c 100755 (executable)
@@ -509,11 +509,11 @@ function _showline
   fi
 
   if (( $line < 100 )); then
-    _msg "$_guineapig:$line   $bp $cl${_lines[$line]}"
+    _msg "${_guineapig/*\//}:$line   $bp $cl${_lines[$line]}"
   elif (( $line < 10 )); then
-    _msg "$_guineapig:$line  $bp $cl${_lines[$line]}"
+    _msg "${_guineapig/*\//}:$line  $bp $cl${_lines[$line]}"
   elif (( $line > 0 )); then
-    _msg "$_guineapig:$line $bp $cl${_lines[$line]}"
+    _msg "${_guineapig/*\//}:$line $bp $cl${_lines[$line]}"
   fi
 }
 
@@ -564,7 +564,7 @@ let _trace=0
 let _i=1
 
 # Be careful about quoted newlines
-_potbelliedpig=${TMPDIR-/tmp}/$_guineapig.$$
+_potbelliedpig=${TMPDIR-/tmp}/${_guineapig/*\//}.$$
 sed 's,\\$,\\\\,' $_guineapig > $_potbelliedpig
 
 _msg "Reading source from file: $_guineapig"
index 356baef..f6208f5 100644 (file)
@@ -46,6 +46,17 @@ LOCAL_CFLAGS = @LOCAL_CFLAGS@
 DEFS = @DEFS@
 LOCAL_DEFS = @LOCAL_DEFS@
 
+CPPFLAGS = @CPPFLAGS@
+
+BASHINCDIR = ${topdir}/include
+
+LIBBUILD = ${BUILD_DIR}/lib
+
+INTL_LIBSRC = ${topdir}/lib/intl
+INTL_BUILDDIR = ${LIBBUILD}/intl
+INTL_INC = @INTL_INC@
+LIBINTL_H = @LIBINTL_H@
+
 CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CFLAGS)
 
 #
@@ -63,8 +74,8 @@ SHOBJ_LIBS = @SHOBJ_LIBS@
 SHOBJ_STATUS = @SHOBJ_STATUS@
 
 INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins \
-      -I$(topdir)/include -I$(BUILD_DIR) -I$(BUILD_DIR)/lib \
-      -I$(BUILD_DIR)/builtins
+      -I$(BASHINCDIR) -I$(BUILD_DIR) -I$(LIBBUILD) \
+      -I$(BUILD_DIR)/builtins $(INTL_INC)
 
 .c.o:
        $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) $(INC) -c -o $@ $<
@@ -184,7 +195,7 @@ pushd.c:    ${topdir}/builtins/pushd.def
 
 pushd.o:       pushd.c
        $(RM) $@
-       $(SHOBJ_CC) -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(INC) -c -o $@ $<
+       $(SHOBJ_CC) -DHAVE_CONFIG_H -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<
 
 pushd: pushd.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pushd.o $(SHOBJ_LIBS)
index cc6d50b..0bf2079 100644 (file)
@@ -1039,7 +1039,7 @@ static const struct conf_variable conf_table[] =
 #ifdef _PC_MAX_INPUT
   { "MAX_INPUT",               PATHCONF,       _PC_MAX_INPUT           },
 #endif
-#ifdef _PC_NAMW_MAX
+#ifdef _PC_NAME_MAX
   { "NAME_MAX",                        PATHCONF,       _PC_NAME_MAX            },
 #endif
 #ifdef _PC_PATH_MAX
index d3b5776..2245f06 100755 (executable)
@@ -22,7 +22,7 @@ mkalias ()
                                      s/#/\#/g')
                echo $1 \(\) "{" command "$comm"  "; }"
                ;;
-       *)      echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\' ;;
+       *)      echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':g")\' ;;
        esac
 }
 EOF
index 44426fd..ce90d25 100644 (file)
@@ -1,6 +1,6 @@
 /* execute_command.c -- Execute a COMMAND structure. */
 
-/* Copyright (C) 1987-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -160,7 +160,7 @@ static int execute_while_command __P((WHILE_COM *));
 static int execute_until_command __P((WHILE_COM *));
 static int execute_while_or_until __P((WHILE_COM *, int));
 static int execute_if_command __P((IF_COM *));
-static int execute_null_command __P((REDIRECT *, int, int, int, pid_t));
+static int execute_null_command __P((REDIRECT *, int, int, int));
 static void fix_assignment_words __P((WORD_LIST *));
 static int execute_simple_command __P((SIMPLE_COM *, int, int, int, struct fd_bitmap *));
 static int execute_builtin __P((sh_builtin_func_t *, WORD_LIST *, int, int));
@@ -245,6 +245,9 @@ int subshell_level = 0;
 /* Currently-executing shell function. */
 SHELL_VAR *this_shell_function;
 
+/* If non-zero, matches in case and [[ ... ]] are case-insensitive */
+int match_ignore_case = 0;
+
 struct fd_bitmap *current_fds_to_close = (struct fd_bitmap *)NULL;
 
 #define FD_BITMAP_DEFAULT_SIZE 32
@@ -366,7 +369,6 @@ shell_control_structure (type)
 {
   switch (type)
     {
-    case cm_for:
 #if defined (ARITH_FOR_COMMAND)
     case cm_arith_for:
 #endif
@@ -383,7 +385,9 @@ shell_control_structure (type)
     case cm_while:
     case cm_until:
     case cm_if:
+    case cm_for:
     case cm_group:
+    case cm_function_def:
       return (1);
 
     default:
@@ -491,7 +495,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
 {
   int exec_result, invert, ignore_return, was_error_trap;
   REDIRECT *my_undo_list, *exec_undo_list;
-  volatile pid_t last_pid;
+  volatile int last_pid;
   volatile int save_line_number;
 
   if (command == 0 || breaking || continuing || read_but_dont_execute)
@@ -648,6 +652,9 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
        /* We can't rely on variables retaining their values across a
           call to execute_simple_command if a longjmp occurs as the
           result of a `return' builtin.  This is true for sure with gcc. */
+#if defined (RECYCLES_PIDS)
+       last_made_pid = NO_PID;
+#endif
        last_pid = last_made_pid;
        was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
 
@@ -678,7 +685,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
        /* XXX - this is something to watch out for if there are problems
           when the shell is compiled without job control. */
        if (already_making_children && pipe_out == NO_PIPE &&
-           last_pid != last_made_pid)
+           last_made_pid != last_pid)
          {
            stop_pipeline (asynchronous, (COMMAND *)NULL);
 
@@ -698,14 +705,6 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
               subshells forked to execute builtin commands (e.g., in
               pipelines) to be waited for twice. */
              exec_result = wait_for (last_made_pid);
-#if defined (RECYCLES_PIDS)
-             /* LynxOS, for one, recycles pids very quickly -- so quickly
-                that a new process may have the same pid as the last one
-                created.  This has been reported to fix the problem on that
-                OS, and a similar problem on Cygwin. */
-             if (exec_result == 0)
-               last_made_pid = NO_PID;
-#endif
          }
       }
 
@@ -1274,6 +1273,11 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   tcom = (command->type == cm_subshell) ? command->value.Subshell->command : command;
 
+  if (command->flags & CMD_TIME_PIPELINE)
+    tcom->flags |= CMD_TIME_PIPELINE;
+  if (command->flags & CMD_TIME_POSIX)
+    tcom->flags |= CMD_TIME_POSIX;
+  
   /* Make sure the subshell inherits any CMD_IGNORE_RETURN flag. */
   if ((command->flags & CMD_IGNORE_RETURN) && tcom != command)
     tcom->flags |= CMD_IGNORE_RETURN;
@@ -1355,6 +1359,7 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 #if defined (JOB_CONTROL)
          terminate_current_pipeline ();
          kill_current_pipeline ();
+         UNBLOCK_CHILD (oset);
 #endif /* JOB_CONTROL */
          last_command_exit_value = EXECUTION_FAILURE;
          /* The unwind-protects installed below will take care
@@ -1622,8 +1627,9 @@ execute_for_command (for_command)
       if (echo_command_at_execute)
        xtrace_print_for_command_head (for_command);
 
-      /* Save this command unless it's a trap command. */
-      if (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0))
+      /* Save this command unless it's a trap command and we're not running
+        a debug trap. */
+      if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
        {
          FREE (the_printed_command_except_trap);
          the_printed_command_except_trap = savestring (the_printed_command);
@@ -1638,7 +1644,7 @@ execute_for_command (for_command)
 #endif
 
       this_command_name = (char *)NULL;
-      v = bind_variable (identifier, list->word->word);
+      v = bind_variable (identifier, list->word->word, 0);
       if (readonly_p (v) || noassign_p (v))
        {
          line_number = save_line_number;
@@ -1685,7 +1691,7 @@ execute_for_command (for_command)
        {
          SHELL_VAR *new_value;
 
-         new_value = bind_variable (identifier, value_cell(old_value));
+         new_value = bind_variable (identifier, value_cell(old_value), 0);
          new_value->attributes = old_value->attributes;
          dispose_variable (old_value);
        }
@@ -1731,8 +1737,11 @@ eval_arith_for_expr (l, okp)
 
       command_string_index = 0;
       print_arith_command (new);
-      FREE (the_printed_command_except_trap);
-      the_printed_command_except_trap = savestring (the_printed_command);
+      if (signal_in_progress (DEBUG_TRAP) == 0)
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
 
       r = run_debug_trap ();
       /* In debugging mode, if the DEBUG trap returns a non-zero status, we
@@ -2039,8 +2048,11 @@ execute_select_command (select_command)
   if (echo_command_at_execute)
     xtrace_print_select_command_head (select_command);
 
-  FREE (the_printed_command_except_trap);
-  the_printed_command_except_trap = savestring (the_printed_command);
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
 
   retval = run_debug_trap ();
 #if defined (DEBUGGER)
@@ -2092,7 +2104,7 @@ execute_select_command (select_command)
          break;
        }
 
-      v = bind_variable (identifier, selection);
+      v = bind_variable (identifier, selection, 0);
       if (readonly_p (v) || noassign_p (v))
        {
          if (readonly_p (v) && interactive_shell == 0 && posixly_correct)
@@ -2168,7 +2180,7 @@ execute_case_command (case_command)
   if (echo_command_at_execute)
     xtrace_print_case_command_head (case_command);
 
-  if (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0))
+  if (signal_in_progress (DEBUG_TRAP == 0) && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
     {
       FREE (the_printed_command_except_trap);
       the_printed_command_except_trap = savestring (the_printed_command);
@@ -2185,14 +2197,6 @@ execute_case_command (case_command)
     }
 #endif
 
-  /* Posix.2 specifies that the WORD is tilde expanded. */
-  if (member ('~', case_command->word->word))
-    {
-      word = bash_tilde_expand (case_command->word->word, 0);
-      free (case_command->word->word);
-      case_command->word->word = word;
-    }
-
   wlist = expand_word_unsplit (case_command->word, 0);
   word = wlist ? string_list (wlist) : savestring ("");
   dispose_words (wlist);
@@ -2210,15 +2214,6 @@ execute_case_command (case_command)
       QUIT;
       for (list = clauses->patterns; list; list = list->next)
        {
-         /* Posix.2 specifies to tilde expand each member of the pattern
-            list. */
-         if (member ('~', list->word->word))
-           {
-             pattern = bash_tilde_expand (list->word->word, 0);
-             free (list->word->word);
-             list->word->word = pattern;
-           }
-
          es = expand_word_leave_quoted (list->word, 0);
 
          if (es && es->word && es->word->word && *(es->word->word))
@@ -2232,7 +2227,7 @@ execute_case_command (case_command)
          /* Since the pattern does not undergo quote removal (as per
             Posix.2, section 3.9.4.3), the strmatch () call must be able
             to recognize backslashes as escape characters. */
-         match = strmatch (pattern, word, FNMATCH_EXTFLAG) != FNM_NOMATCH;
+         match = strmatch (pattern, word, FNMATCH_EXTFLAG|FNMATCH_IGNCASE) != FNM_NOMATCH;
          free (pattern);
 
          dispose_words (es);
@@ -2395,8 +2390,12 @@ execute_arith_command (arith_command)
 
   command_string_index = 0;
   print_arith_command (arith_command->exp);
-  FREE (the_printed_command_except_trap);
-  the_printed_command_except_trap = savestring (the_printed_command);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
 
   /* Run the debug trap before each arithmetic command, but do it after we
      update the line number information and before we expand the various
@@ -2508,9 +2507,15 @@ execute_cond_node (cond)
        }
       else
 #endif /* COND_REGEXP */
-       result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP)
-                               ? EXECUTION_SUCCESS
-                               : EXECUTION_FAILURE;
+       {
+         int oe;
+         oe = extended_glob;
+         extended_glob = 1;
+         result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP)
+                                 ? EXECUTION_SUCCESS
+                                 : EXECUTION_FAILURE;
+         extended_glob = oe;
+       }
       if (arg1 != nullstr)
        free (arg1);
       if (arg2 != nullstr)
@@ -2546,8 +2551,12 @@ execute_cond_command (cond_command)
 
   command_string_index = 0;
   print_cond_command (cond_command);
-  FREE (the_printed_command_except_trap);
-  the_printed_command_except_trap = savestring (the_printed_command);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
 
   /* Run the debug trap before each conditional command, but do it after we
      update the line number information. */
@@ -2580,7 +2589,7 @@ bind_lastarg (arg)
 
   if (arg == 0)
     arg = "";
-  var = bind_variable ("_", arg);
+  var = bind_variable ("_", arg, 0);
   VUNSETATTR (var, att_exported);
 }
 
@@ -2588,10 +2597,9 @@ bind_lastarg (arg)
    to be run asynchronously.  This handles all the side effects that are
    supposed to take place. */
 static int
-execute_null_command (redirects, pipe_in, pipe_out, async, old_last_command_subst_pid)
+execute_null_command (redirects, pipe_in, pipe_out, async)
      REDIRECT *redirects;
      int pipe_in, pipe_out, async;
-     pid_t old_last_command_subst_pid;
 {
   int r;
 
@@ -2637,7 +2645,7 @@ execute_null_command (redirects, pipe_in, pipe_out, async, old_last_command_subs
 
       if (r != 0)
        return (EXECUTION_FAILURE);
-      else if (old_last_command_subst_pid != last_command_subst_pid)
+      else if (last_command_subst_pid != NO_PID)
        return (last_command_exit_value);
       else
        return (EXECUTION_SUCCESS);
@@ -2666,8 +2674,10 @@ fix_assignment_words (words)
            b = builtin_address_internal (words->word->word, 0);
            if (b == 0 || (b->flags & ASSIGNMENT_BUILTIN) == 0)
              return;
+           else if (b && (b->flags & ASSIGNMENT_BUILTIN))
+             words->word->flags |= W_ASSNBLTIN;
          }
-       w->word->flags |= (W_NOSPLIT|W_NOGLOB|W_TILDEEXP);
+       w->word->flags |= (W_NOSPLIT|W_NOGLOB|W_TILDEEXP|W_ASSIGNARG);
       }
 }
 
@@ -2683,7 +2693,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
   WORD_LIST *words, *lastword;
   char *command_line, *lastarg, *temp;
   int first_word_quoted, result, builtin_is_special, already_forked, dofork;
-  pid_t old_last_command_subst_pid, old_last_async_pid;
+  pid_t old_last_async_pid;
   sh_builtin_func_t *builtin;
   SHELL_VAR *func;
 
@@ -2699,10 +2709,10 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
   command_string_index = 0;
   print_simple_command (simple_command);
 
-  if (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0))
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
     {
       FREE (the_printed_command_except_trap);
-      the_printed_command_except_trap = savestring (the_printed_command);
+      the_printed_command_except_trap = the_printed_command ? savestring (the_printed_command) : (char *)0;
     }
 
   /* Run the debug trap before each simple command, but do it after we
@@ -2718,7 +2728,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
   first_word_quoted =
     simple_command->words ? (simple_command->words->word->flags & W_QUOTED): 0;
 
-  old_last_command_subst_pid = last_command_subst_pid;
+  last_command_subst_pid = NO_PID;
   old_last_async_pid = last_asynchronous_pid;
 
   already_forked = dofork = 0;
@@ -2739,27 +2749,22 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
 
   if (dofork)
     {
-#if 0
-      /* XXX memory leak if expand_words() error causes a jump_to_top_level */
-      command_line = savestring (the_printed_command);
-#endif
-
       /* Do this now, because execute_disk_command will do it anyway in the
         vast majority of cases. */
       maybe_make_export_env ();
 
-#if 0
-      if (make_child (command_line, async) == 0)
-#else
-      if (make_child (savestring (the_printed_command), async) == 0)
-#endif
+      /* Don't let a DEBUG trap overwrite the command string to be saved with
+        the process/job associated with this child. */
+      if (make_child (savestring (the_printed_command_except_trap), async) == 0)
        {
          already_forked = 1;
          simple_command->flags |= CMD_NO_FORK;
 
-         subshell_environment = (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
-                                       ? (SUBSHELL_PIPE|SUBSHELL_FORK)
-                                       : (SUBSHELL_ASYNC|SUBSHELL_FORK);
+         subshell_environment = SUBSHELL_FORK;
+         if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+           subshell_environment |= SUBSHELL_PIPE;
+         if (async)
+           subshell_environment |= SUBSHELL_ASYNC;
 
          /* We need to do this before piping to handle some really
             pathological cases where one of the pipe file descriptors
@@ -2804,8 +2809,7 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
       this_command_name = 0;
       result = execute_null_command (simple_command->redirects,
                                     pipe_in, pipe_out,
-                                    already_forked ? 0 : async,
-                                    old_last_command_subst_pid);
+                                    already_forked ? 0 : async);
       if (already_forked)
        exit (result);
       else
@@ -3048,8 +3052,10 @@ execute_builtin (builtin, words, flags, subshell)
 
   /* The temporary environment for a builtin is supposed to apply to
      all commands executed by that builtin.  Currently, this is a
-     problem only with the `source' and `eval' builtins. */
-  isbltinenv = (builtin == source_builtin || builtin == eval_builtin);
+     problem only with the `unset', `source' and `eval' builtins. */
+
+  isbltinenv = (builtin == source_builtin || builtin == eval_builtin || builtin == unset_builtin);
+
   if (isbltinenv)
     {
       if (subshell == 0)
@@ -3059,7 +3065,7 @@ execute_builtin (builtin, words, flags, subshell)
        {
          push_scope (VC_BLTNENV, temporary_env);
          if (subshell == 0)
-           add_unwind_protect (pop_scope, "1");
+           add_unwind_protect (pop_scope, (flags & CMD_COMMAND_BUILTIN) ? 0 : "1");
           temporary_env = (HASH_TABLE *)NULL;    
        }
     }
@@ -3105,7 +3111,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
   COMMAND *tc, *fc, *save_current;
   char *debug_trap, *error_trap, *return_trap;
 #if defined (ARRAY_VARS)
-  SHELL_VAR *funcname_v, *bash_source_v, *bash_lineno_v;
+  SHELL_VAR *funcname_v, *nfv, *bash_source_v, *bash_lineno_v;
   ARRAY *funcname_a, *bash_source_a, *bash_lineno_a;
 #endif
   FUNCTION_DEF *shell_fn;
@@ -3178,7 +3184,13 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
       restore_default_signal (ERROR_TRAP);
     }
 
+  /* Shell functions inherit the RETURN trap if function tracing is on
+     globally or on individually for this function. */
+#if 0
   if (return_trap && ((trace_p (var) == 0) && function_trace_mode == 0))
+#else
+  if (return_trap && (signal_in_progress (DEBUG_TRAP) || ((trace_p (var) == 0) && function_trace_mode == 0)))
+#endif
     {
       if (subshell == 0)
        {
@@ -3214,24 +3226,24 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
   /* Number of the line on which the function body starts. */
   line_number = function_line_number = tc->line;
 
-  if (subshell)
-    {
 #if defined (JOB_CONTROL)
-      stop_pipeline (async, (COMMAND *)NULL);
+  if (subshell)
+    stop_pipeline (async, (COMMAND *)NULL);
 #endif
-      fc = (tc->type == cm_group) ? tc->value.Group->command : tc;
 
-      if (fc && (flags & CMD_IGNORE_RETURN))
-       fc->flags |= CMD_IGNORE_RETURN;
-    }
-  else
-    fc = tc;
+  fc = tc;
 
   return_catch_flag++;
   return_val = setjmp (return_catch);
 
   if (return_val)
-    result = return_catch_value;
+    {
+      result = return_catch_value;
+      /* Run the RETURN trap in the function's context. */
+      save_current = currently_executing_command;
+      run_return_trap ();
+      currently_executing_command = save_current;
+    }
   else
     {
       /* Run the debug trap here so we can trap at the start of a function's
@@ -3255,6 +3267,10 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
        }
 #else
       result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close);
+
+      save_current = currently_executing_command;
+      run_return_trap ();
+      currently_executing_command = save_current;
 #endif
       showing_function_line = 0;
     }
@@ -3268,9 +3284,16 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
 
   funcnest--;
 #if defined (ARRAY_VARS)
+  /* These two variables cannot be unset, and cannot be affected by the
+     function. */
   array_pop (bash_source_a);
-  array_pop (funcname_a);
   array_pop (bash_lineno_a);
+
+  /* FUNCNAME can be unset, and so can potentially be changed by the
+     function. */
+  GET_ARRAY_FROM_VAR ("FUNCNAME", nfv, funcname_a);
+  if (nfv == funcname_v)
+    array_pop (funcname_a);
 #endif
   
   if (variable_context == 0 || this_shell_function == 0)
@@ -3759,6 +3782,7 @@ initialize_subshell ()
   /* Forget about the way job control was working. We are in a subshell. */
   without_job_control ();
   set_sigchld_handler ();
+  init_job_stats ();
 #endif /* JOB_CONTROL */
 
   /* Reset the values of the shell flags and options. */
@@ -3833,6 +3857,12 @@ shell_execve (command, args, env)
          errno = i;
          file_error (command);
        }
+      /* errors not involving the path argument to execve. */
+      else if (i == E2BIG || i == ENOMEM)
+       {
+         errno = i;
+         file_error (command);
+       }
       else
        {
          /* The file has the execute bits set, but the kernel refuses to
@@ -3842,9 +3872,18 @@ shell_execve (command, args, env)
          if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
            {
              char *interp;
+             int ilen;
 
              interp = getinterp (sample, sample_len, (int *)NULL);
+             ilen = strlen (interp);
              errno = i;
+             if (interp[ilen - 1] == '\r')
+               {
+                 interp = xrealloc (interp, ilen + 2);
+                 interp[ilen - 1] = '^';
+                 interp[ilen] = 'M';
+                 interp[ilen + 1] = '\0';
+               }
              sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : "");
              FREE (interp);
              return (EX_NOEXEC);
diff --git a/expr.c b/expr.c
index a45e6a7..7f9a2f1 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -769,7 +769,7 @@ exppower ()
   while (curtok == POWER)
     {
       readtok ();
-      val2 = exp1 ();
+      val2 = exppower ();      /* exponentiation is right-associative */
       if (val2 == 0)
        return (1);
       if (val2 < 0)
@@ -1135,7 +1135,7 @@ evalerror (msg)
    Base may be >=2 and <=64.  If base is <= 36, the numbers are drawn
    from [0-9][a-zA-Z], and lowercase and uppercase letters may be used
    interchangably.  If base is > 36 and <= 64, the numbers are drawn
-   from [0-9][a-z][A-Z]_@ (a = 10, z = 35, A = 36, Z = 61, _ = 62, @ = 63 --
+   from [0-9][a-z][A-Z]_@ (a = 10, z = 35, A = 36, Z = 61, @ = 62, _ = 63 --
    you get the picture). */
 
 static intmax_t
@@ -1206,6 +1206,7 @@ strlong (num)
       else
        break;
     }
+
   return (val);
 }
 
index a015d78..094d924 100644 (file)
--- a/externs.h
+++ b/externs.h
@@ -1,7 +1,7 @@
 /* externs.h -- extern function declarations which do not appear in their
    own header file. */
 
-/* Copyright (C) 1993-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -235,6 +235,7 @@ extern int sh_regmatch __P((const char *, const char *, int));
 /* declarations for functions defined in lib/sh/shquote.c */
 extern char *sh_single_quote __P((char *));
 extern char *sh_double_quote __P((char *));
+extern char *sh_mkdoublequoted __P((const char *, int, int));
 extern char *sh_un_double_quote __P((char *));
 extern char *sh_backslash_quote __P((char *));
 extern char *sh_backslash_quote_for_double_quotes __P((char *));
@@ -302,6 +303,16 @@ extern void strvec_sort __P((char **));
 extern char **strvec_from_word_list __P((WORD_LIST *, int, int, int *));
 extern WORD_LIST *strvec_to_word_list __P((char **, int, int));
 
+/* declarations for functions defined in lib/sh/strnlen.c */
+#if !defined (HAVE_STRNLEN)
+extern size_t strnlen __P((const char *, size_t));
+#endif
+
+/* declarations for functions defined in lib/sh/strpbrk.c */
+#if !defined (HAVE_STRPBRK)
+extern char *strpbrk __P((const char *, const char *));
+#endif
+
 /* declarations for functions defined in lib/sh/strtod.c */
 #if !defined (HAVE_STRTOD)
 extern double strtod __P((const char *, char **));
@@ -358,10 +369,16 @@ extern char *sh_mktmpname __P((char *, int));
 extern int sh_mktmpfd __P((char *, int, char **));
 /* extern FILE *sh_mktmpfp __P((char *, int, char **)); */
 
+/* declarations for functions defined in lib/sh/winsize.c */
+extern void get_new_window_size __P((int, int *, int *));
+
 /* declarations for functions defined in lib/sh/xstrchr.c */
 #undef xstrchr
 extern char *xstrchr __P((const char *, int));
 
+/* declarations for functions defined in lib/sh/zcatfd.c */
+extern int zcatfd __P((int, int, char *));
+
 /* declarations for functions defined in lib/sh/zread.c */
 extern ssize_t zread __P((int, char *, size_t));
 extern ssize_t zreadintr __P((int, char *, size_t));
index 09ad2fa..6f5ff85 100644 (file)
--- a/findcmd.c
+++ b/findcmd.c
@@ -72,11 +72,6 @@ int check_hashed_filenames;
    containing the file of interest. */
 int dot_found_in_search = 0;
 
-#define u_mode_bits(x) (((x) & 0000700) >> 6)
-#define g_mode_bits(x) (((x) & 0000070) >> 3)
-#define o_mode_bits(x) (((x) & 0000007) >> 0)
-#define X_BIT(x) ((x) & 1)
-
 /* Return some flags based on information about this file.
    The EXISTS bit is non-zero if the file is found.
    The EXECABLE bit is non-zero the file is executble.
@@ -86,6 +81,7 @@ file_status (name)
      const char *name;
 {
   struct stat finfo;
+  int r;
 
   /* Determine whether this file exists or not. */
   if (stat (name, &finfo) < 0)
@@ -96,41 +92,62 @@ file_status (name)
   if (S_ISDIR (finfo.st_mode))
     return (FS_EXISTS|FS_DIRECTORY);
 
+  r = FS_EXISTS;
+
 #if defined (AFS)
   /* We have to use access(2) to determine access because AFS does not
      support Unix file system semantics.  This may produce wrong
      answers for non-AFS files when ruid != euid.  I hate AFS. */
-  return ((access (name, X_OK) == 0) ? (FS_EXISTS|FS_EXECABLE) : FS_EXISTS);
+  if (access (name, X_OK) == 0)
+    r |= FS_EXECABLE;
+  if (access (name, R_OK) == 0)
+    r |= FS_READABLE;
+
+  return r;
 #else /* !AFS */
 
   /* Find out if the file is actually executable.  By definition, the
      only other criteria is that the file has an execute bit set that
-     we can use. */
+     we can use.  The same with whether or not a file is readable. */
 
   /* Root only requires execute permission for any of owner, group or
-     others to be able to exec a file. */
+     others to be able to exec a file, and can read any file. */
   if (current_user.euid == (uid_t)0)
     {
-      int bits;
-
-      bits = (u_mode_bits (finfo.st_mode) |
-             g_mode_bits (finfo.st_mode) |
-             o_mode_bits (finfo.st_mode));
-
-      return ((X_BIT (bits)) ? (FS_EXISTS | FS_EXECABLE) : FS_EXISTS);
+      r |= FS_READABLE;
+      if (finfo.st_mode & S_IXUGO)
+       r |= FS_EXECABLE;
+      return r;
     }
 
-  /* If we are the owner of the file, the owner execute bit applies. */
+  /* If we are the owner of the file, the owner bits apply. */
   if (current_user.euid == finfo.st_uid)
-    return ((X_BIT (u_mode_bits (finfo.st_mode))) ? (FS_EXISTS | FS_EXECABLE) : FS_EXISTS);
+    {
+      if (finfo.st_mode & S_IXUSR)
+       r |= FS_EXECABLE;
+      if (finfo.st_mode & S_IRUSR)
+       r |= FS_READABLE;
+    }
 
   /* If we are in the owning group, the group permissions apply. */
   else if (group_member (finfo.st_gid))
-    return ((X_BIT (g_mode_bits (finfo.st_mode))) ? (FS_EXISTS | FS_EXECABLE) : FS_EXISTS);
+    {
+      if (finfo.st_mode & S_IXGRP)
+       r |= FS_EXECABLE;
+      if (finfo.st_mode & S_IRGRP)
+       r |= FS_READABLE;
+    }
 
   /* Else we check whether `others' have permission to execute the file */
   else
-    return ((X_BIT (o_mode_bits (finfo.st_mode))) ? (FS_EXISTS | FS_EXECABLE) : FS_EXISTS);
+    {
+      if (finfo.st_mode & S_IXOTH)
+       r |= FS_EXECABLE;
+      if (finfo.st_mode & S_IROTH)
+       r |= FS_READABLE;
+    }
+
+  return r;
 #endif /* !AFS */
 }
 
@@ -180,12 +197,13 @@ find_user_command (name)
 /* Locate the file referenced by NAME, searching along the contents
    of the shell PATH variable.  Return a new string which is the full
    pathname to the file, or NULL if the file couldn't be found.  This
-   returns the first file found. */
+   returns the first readable file found; designed to be used to look
+   for shell scripts or files to source. */
 char *
 find_path_file (name)
      const char *name;
 {
-  return (find_user_command_internal (name, FS_EXISTS));
+  return (find_user_command_internal (name, FS_READABLE));
 }
 
 static char *
@@ -460,9 +478,14 @@ find_in_path_element (name, path, flags, name_len, dotinfop)
   if (flags & FS_EXISTS)
     return (full_path);
 
+  /* If we have a readable file, and the caller wants a readable file, this
+     is it. */
+  if ((flags & FS_READABLE) && (status & FS_READABLE))
+    return (full_path);
+
   /* If the file is executable, then it satisfies the cases of
       EXEC_ONLY and EXEC_PREFERRED.  Return this file unconditionally. */
-  if ((status & FS_EXECABLE) &&
+  if ((status & FS_EXECABLE) && (flags & (FS_EXEC_ONLY|FS_EXEC_PREFERRED)) &&
       (((flags & FS_NODIRS) == 0) || ((status & FS_DIRECTORY) == 0)))
     {
       FREE (file_to_lose_on);
@@ -477,9 +500,11 @@ find_in_path_element (name, path, flags, name_len, dotinfop)
     file_to_lose_on = savestring (full_path);
 
   /* If we want only executable files, or we don't want directories and
-     this file is a directory, fail. */
-  if ((flags & FS_EXEC_ONLY) || (flags & FS_EXEC_PREFERRED) ||
-      ((flags & FS_NODIRS) && (status & FS_DIRECTORY)))
+     this file is a directory, or we want a readable file and this file
+     isn't readable, fail. */
+  if ((flags & (FS_EXEC_ONLY|FS_EXEC_PREFERRED)) ||
+      ((flags & FS_NODIRS) && (status & FS_DIRECTORY)) ||
+      ((flags & FS_READABLE) && (status & FS_READABLE) == 0))
     {
       free (full_path);
       return ((char *)NULL);
index 0b9c8fb..3384e84 100644 (file)
--- a/general.c
+++ b/general.c
@@ -39,6 +39,8 @@
 #include "bashintl.h"
 
 #include "shell.h"
+#include "test.h"
+
 #include <tilde/tilde.h>
 
 #if !defined (errno)
@@ -286,10 +288,16 @@ assignment (string, flags)
          newi = skipsubscript (string, indx);
          if (string[newi++] != ']')
            return (0);
+         if (string[newi] == '+' && string[newi+1] == '=')
+           return (newi + 1);
          return ((string[newi] == '=') ? newi : 0);
        }
 #endif /* ARRAY_VARS */
 
+      /* Check for `+=' */
+      if (c == '+' && string[indx+1] == '=')
+       return (indx + 1);
+
       /* Variable names in assignment statements may contain only letters,
         digits, and `_'. */
       if (legal_variable_char (c) == 0)
@@ -498,6 +506,36 @@ file_iswdir (fn)
   return (file_isdir (fn) && test_eaccess (fn, W_OK) == 0);
 }
 
+/* Return 1 if STRING contains an absolute pathname, else 0.  Used by `cd'
+   to decide whether or not to look up a directory name in $CDPATH. */
+int
+absolute_pathname (string)
+     const char *string;
+{
+  if (string == 0 || *string == '\0')
+    return (0);
+
+  if (ABSPATH(string))
+    return (1);
+
+  if (string[0] == '.' && PATHSEP(string[1]))  /* . and ./ */
+    return (1);
+
+  if (string[0] == '.' && string[1] == '.' && PATHSEP(string[2]))      /* .. and ../ */
+    return (1);
+
+  return (0);
+}
+
+/* Return 1 if STRING is an absolute program name; it is absolute if it
+   contains any slashes.  This is used to decide whether or not to look
+   up through $PATH. */
+int
+absolute_program (string)
+     const char *string;
+{
+  return ((char *)xstrchr (string, '/') != (char *)NULL);
+}
 
 /* **************************************************************** */
 /*                                                                 */
@@ -532,47 +570,21 @@ make_absolute (string, dot_path)
   return (result);
 }
 
-/* Return 1 if STRING contains an absolute pathname, else 0.  Used by `cd'
-   to decide whether or not to look up a directory name in $CDPATH. */
-int
-absolute_pathname (string)
-     const char *string;
-{
-  if (string == 0 || *string == '\0')
-    return (0);
-
-  if (ABSPATH(string))
-    return (1);
-
-  if (string[0] == '.' && PATHSEP(string[1]))  /* . and ./ */
-    return (1);
-
-  if (string[0] == '.' && string[1] == '.' && PATHSEP(string[2]))      /* .. and ../ */
-    return (1);
-
-  return (0);
-}
-
-/* Return 1 if STRING is an absolute program name; it is absolute if it
-   contains any slashes.  This is used to decide whether or not to look
-   up through $PATH. */
-int
-absolute_program (string)
-     const char *string;
-{
-  return ((char *)xstrchr (string, '/') != (char *)NULL);
-}
-
 /* Return the `basename' of the pathname in STRING (the stuff after the
-   last '/').  If STRING is not a full pathname, simply return it. */
+   last '/').  If STRING is `/', just return it. */
 char *
 base_pathname (string)
      char *string;
 {
   char *p;
 
+#if 0
   if (absolute_pathname (string) == 0)
     return (string);
+#endif
+
+  if (string[0] == '/' && string[1] == 0)
+    return (string);
 
   p = (char *)strrchr (string, '/');
   return (p ? ++p : string);
@@ -683,7 +695,9 @@ extern char *get_dirstack_from_string __P((char *));
 #endif
 
 static char **bash_tilde_prefixes;
+static char **bash_tilde_prefixes2;
 static char **bash_tilde_suffixes;
+static char **bash_tilde_suffixes2;
 
 /* If tilde_expand hasn't been able to expand the text, perhaps it
    is a special shell expansion.  This function is installed as the
@@ -731,6 +745,10 @@ tilde_initialize ()
       bash_tilde_prefixes[1] = ":~";
       bash_tilde_prefixes[2] = (char *)NULL;
 
+      bash_tilde_prefixes2 = strvec_create (2);
+      bash_tilde_prefixes2[0] = ":~";
+      bash_tilde_prefixes2[1] = (char *)NULL;
+
       tilde_additional_prefixes = bash_tilde_prefixes;
 
       bash_tilde_suffixes = strvec_create (3);
@@ -739,6 +757,10 @@ tilde_initialize ()
       bash_tilde_suffixes[2] = (char *)NULL;
 
       tilde_additional_suffixes = bash_tilde_suffixes;
+
+      bash_tilde_suffixes2 = strvec_create (2);
+      bash_tilde_suffixes2[0] = ":";
+      bash_tilde_suffixes2[1] = (char *)NULL;
     }
 }
 
@@ -770,9 +792,49 @@ unquoted_tilde_word (s)
   return 1;
 }
 
+/* Find the end of the tilde-prefix starting at S, and return the tilde
+   prefix in newly-allocated memory.  Return the length of the string in
+   *LENP.  FLAGS tells whether or not we're in an assignment context --
+   if so, `:' delimits the end of the tilde prefix as well. */
+char *
+bash_tilde_find_word (s, flags, lenp)
+     const char *s;
+     int flags, *lenp;
+{
+  const char *r;
+  char *ret;
+  int l;
+
+  for (r = s; *r && *r != '/'; r++)
+    {
+      /* Short-circuit immediately if we see a quote character.  Even though
+        POSIX says that `the first unquoted slash' (or `:') terminates the
+        tilde-prefix, in practice, any quoted portion of the tilde prefix
+        will cause it to not be expanded. */
+      if (*r == '\\' || *r == '\'' || *r == '"')  
+       {
+         ret = savestring (s);
+         if (lenp)
+           *lenp = 0;
+         return ret;
+       }
+      else if (flags && *r == ':')
+       break;
+    }
+  l = r - s;
+  ret = xmalloc (l + 1);
+  strncpy (ret, s, l);
+  ret[l] = '\0';
+  if (lenp)
+    *lenp = l;
+  return ret;
+}
+    
 /* Tilde-expand S by running it through the tilde expansion library.
    ASSIGN_P is 1 if this is a variable assignment, so the alternate
-   tilde prefixes should be enabled (`=~' and `:~', see above). */
+   tilde prefixes should be enabled (`=~' and `:~', see above).  If
+   ASSIGN_P is 2, we are expanding the rhs of an assignment statement,
+   so `=~' is not valid. */
 char *
 bash_tilde_expand (s, assign_p)
      const char *s;
@@ -783,7 +845,12 @@ bash_tilde_expand (s, assign_p)
 
   old_immed = interrupt_immediately;
   interrupt_immediately = 1;
-  tilde_additional_prefixes = assign_p ? bash_tilde_prefixes : (char **)0;
+
+  tilde_additional_prefixes = assign_p == 0 ? (char **)0
+                                           : (assign_p == 2 ? bash_tilde_prefixes2 : bash_tilde_prefixes);
+  if (assign_p == 2)
+    tilde_additional_suffixes = bash_tilde_suffixes2;
+
   r = (*s == '~') ? unquoted_tilde_word (s) : 1;
   ret = r ? tilde_expand (s) : savestring (s);
   interrupt_immediately = old_immed;
index afc7fb0..e1d01f5 100644 (file)
--- a/general.h
+++ b/general.h
@@ -24,6 +24,7 @@
 #include "stdc.h"
 
 #include "bashtypes.h"
+#include "chartypes.h"
 
 #if defined (HAVE_SYS_RESOURCE_H) && defined (RLIMTYPE)
 #  if defined (HAVE_SYS_TIME_H)
@@ -129,16 +130,16 @@ typedef struct {
                        : (type)(list))
 
 #if __GNUC__ > 1
-#  define FASTCOPY(s, d, n)  __builtin_memcpy (d, s, n)
+#  define FASTCOPY(s, d, n)  __builtin_memcpy ((d), (s), (n))
 #else /* !__GNUC__ */
 #  if !defined (HAVE_BCOPY)
 #    if !defined (HAVE_MEMMOVE)
-#      define FASTCOPY(s, d, n)  memcpy (d, s, n)
+#      define FASTCOPY(s, d, n)  memcpy ((d), (s), (n))
 #    else
-#      define FASTCOPY(s, d, n)  memmove (d, s, n)
+#      define FASTCOPY(s, d, n)  memmove ((d), (s), (n))
 #    endif /* !HAVE_MEMMOVE */
 #  else /* HAVE_BCOPY */
-#    define FASTCOPY(s, d, n)  bcopy (s, d, n)
+#    define FASTCOPY(s, d, n)  bcopy ((s), (d), (n))
 #  endif /* HAVE_BCOPY */
 #endif /* !__GNUC__ */
 
@@ -216,6 +217,7 @@ typedef void sh_resetsig_func_t __P((int)); /* sh_vintfunc_t */
 typedef int sh_ignore_func_t __P((const char *));      /* sh_icpfunc_t */
 
 typedef int sh_assign_func_t __P((const char *));      /* sh_icpfunc_t */
+typedef int sh_wassign_func_t __P((WORD_DESC *));
 
 typedef int sh_builtin_func_t __P((WORD_LIST *)); /* sh_wlist_func_t */
 
@@ -230,6 +232,7 @@ typedef int sh_builtin_func_t __P((WORD_LIST *)); /* sh_wlist_func_t */
 #define FS_EXEC_ONLY     0x8
 #define FS_DIRECTORY     0x10
 #define FS_NODIRS        0x20
+#define FS_READABLE      0x40
 
 /* Default maximum for move_to_high_fd */
 #define HIGH_FD_MAX    256
@@ -248,14 +251,18 @@ typedef int QSFUNC ();
 #  define ABSPATH(x)   ((x)[0] == '/')
 #  define RELPATH(x)   ((x)[0] != '/')
 #else /* __CYGWIN__ */
-#  define ABSPATH(x)   (((x)[0] && ISALPHA((unsigned char)(x)[0]) && (x)[1] == ':' && (x)[2] == '/') || (x)[0] == '/')
-#  define RELPATH(x)   (!(x)[0] || ((x)[1] != ':' && (x)[0] != '/'))
+#  define ABSPATH(x)   (((x)[0] && ISALPHA((unsigned char)(x)[0]) && (x)[1] == ':') || ISDIRSEP((x)[0]))
+#  define RELPATH(x)   (ABSPATH(x) == 0)
 #endif /* __CYGWIN__ */
 
 #define ROOTEDPATH(x)  (ABSPATH(x))
 
 #define DIRSEP '/'
-#define ISDIRSEP(c)    ((c) == '/')
+#if !defined (__CYGWIN__)
+#  define ISDIRSEP(c)  ((c) == '/')
+#else
+#  define ISDIRSEP(c)  ((c) == '/' || (c) == '\\')
+#endif /* __CYGWIN__ */
 #define PATHSEP(c)     (ISDIRSEP(c) || (c) == 0)
 
 #if 0
@@ -292,10 +299,10 @@ extern int same_file __P((char *, char *, struct stat *, struct stat *));
 
 extern int file_isdir __P((char  *));
 extern int file_iswdir __P((char  *));
-
-extern char *make_absolute __P((char *, char *));
 extern int absolute_pathname __P((const char *));
 extern int absolute_program __P((const char *));
+
+extern char *make_absolute __P((char *, char *));
 extern char *base_pathname __P((char *));
 extern char *full_pathname __P((char *));
 extern char *polite_directory_format __P((char *));
@@ -303,6 +310,7 @@ extern char *polite_directory_format __P((char *));
 extern char *extract_colon_unit __P((char *, int *));
 
 extern void tilde_initialize __P((void));
+extern char *bash_tilde_find_word __P((const char *, int, int *));
 extern char *bash_tilde_expand __P((const char *, int));
 
 extern int group_member __P((gid_t));
index 1139d50..f5f8b98 100644 (file)
@@ -43,6 +43,9 @@ extern char *xstrchr __P((const char *, int));
 #define MBSLEN(s)      (((s) && (s)[0]) ? ((s)[1] ? mbstrlen (s) : 1) : 0)
 #define MB_STRLEN(s)   ((MB_CUR_MAX > 1) ? MBSLEN (s) : STRLEN (s))
 
+#define MBLEN(s, n)    ((MB_CUR_MAX > 1) ? mblen ((s), (n)) : 1)
+#define MBRLEN(s, n, p)        ((MB_CUR_MAX > 1) ? mbrlen ((s), (n), (p)) : 1)
+
 #else /* !HANDLE_MULTIBYTE */
 
 #undef MB_LEN_MAX
@@ -61,6 +64,9 @@ extern char *xstrchr __P((const char *, int));
 
 #define MB_STRLEN(s)           (STRLEN(s))
 
+#define MBLEN(s, n)            1
+#define MBRLEN(s, n, p)                1
+
 #endif /* !HANDLE_MULTIBYTE */
 
 /* Declare and initialize a multibyte state.  Call must be terminated
diff --git a/input.c b/input.c
index c4f335d..314a1f5 100644 (file)
--- a/input.c
+++ b/input.c
@@ -50,7 +50,7 @@ extern int errno;
    if a signal is received. */
 
 static char localbuf[128];
-static int local_index, local_bufused;
+static int local_index = 0, local_bufused = 0;
 
 /* Posix and USG systems do not guarantee to restart read () if it is
    interrupted by a signal.  We do the read ourselves, and restart it
@@ -312,7 +312,13 @@ duplicate_buffered_stream (fd1, fd2)
                  (bash_input.location.buffered_fd == fd2);
 
   if (buffers[fd2])
-    free_buffered_stream (buffers[fd2]);
+    {
+      /* If the two objects share the same b_buffer, don't free it. */
+      if (buffers[fd1] && buffers[fd1]->b_buffer && buffers[fd1]->b_buffer == buffers[fd2]->b_buffer)
+       buffers[fd2] = (BUFFERED_STREAM *)NULL;
+      else
+       free_buffered_stream (buffers[fd2]);
+    }
   buffers[fd2] = copy_buffered_stream (buffers[fd1]);
   if (buffers[fd2])
     buffers[fd2]->b_fd = fd2;
diff --git a/jobs.c b/jobs.c
index b10a8a2..0671c65 100644 (file)
--- a/jobs.c
+++ b/jobs.c
@@ -3,7 +3,7 @@
 /* This file works with both POSIX and BSD systems.  It implements job
    control. */
 
-/* Copyright (C) 1989-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #  include <bsdtty.h>
 #endif /* hpux && !TERMIOS_TTY_DRIVER */
 
-#if !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
-/* For struct winsize on SCO */
-/*   sys/ptem.h has winsize but needs mblk_t from sys/stream.h */
-#  if defined (HAVE_SYS_PTEM_H) && defined (TIOCGWINSZ) && defined (SIGWINCH)
-#    if defined (HAVE_SYS_STREAM_H)
-#      include <sys/stream.h>
-#    endif
-#    include <sys/ptem.h>
-#  endif /* HAVE_SYS_PTEM_H && TIOCGWINSZ && SIGWINCH */
-#endif /* !STRUCT_WINSIZE_IN_SYS_IOCTL */
-
 #include "bashansi.h"
 #include "bashintl.h"
 #include "shell.h"
@@ -129,7 +118,8 @@ extern int errno;
 #endif /* !MUST_REINSTALL_SIGHANDLERS */
 
 /* Some systems let waitpid(2) tell callers about stopped children. */
-#if !defined (WCONTINUED)
+#if !defined (WCONTINUED) || defined (WCONTINUED_BROKEN)
+#  undef WCONTINUED
 #  define WCONTINUED 0
 #endif
 #if !defined (WIFCONTINUED)
@@ -141,10 +131,6 @@ extern int errno;
 
 typedef int sh_job_map_func_t __P((JOB *, int, int, int));
 
-#if defined (READLINE)
-extern void rl_set_screen_size __P((int, int));
-#endif
-
 /* Variables used here but defined in other files. */
 extern int subshell_environment, line_number;
 extern int posixly_correct, shell_level;
@@ -159,11 +145,18 @@ extern procenv_t wait_intr_buf;
 extern int wait_signal_received;
 extern WORD_LIST *subst_assign_varlist;
 
+static struct jobstats zerojs = { -1L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NO_JOB, NO_JOB, 0, 0 };
+struct jobstats js = { -1L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NO_JOB, NO_JOB, 0, 0 };
+
+struct bgpids bgpids = { 0, 0, 0 };
+
 /* The array of known jobs. */
 JOB **jobs = (JOB **)NULL;
 
+#if 0
 /* The number of slots currently allocated to JOBS. */
 int job_slots = 0;
+#endif
 
 /* The controlling tty for this shell. */
 int shell_tty = -1;
@@ -187,11 +180,13 @@ pid_t pipeline_pgrp = (pid_t)0;
 int pgrp_pipe[2] = { -1, -1 };
 #endif
 
+#if 0
 /* The job which is current; i.e. the one that `%+' stands for. */
 int current_job = NO_JOB;
 
 /* The previous job; i.e. the one that `%-' stands for. */
 int previous_job = NO_JOB;
+#endif
 
 /* Last child made by the shell.  */
 pid_t last_made_pid = NO_PID;
@@ -214,25 +209,24 @@ int check_window_size;
 
 /* Functions local to this file. */
 
-static void get_new_window_size __P((int));
-
 static void run_sigchld_trap __P((int));
 
 static sighandler wait_sigint_handler __P((int));
 static sighandler sigchld_handler __P((int));
-static sighandler sigwinch_sighandler __P((int));
 static sighandler sigcont_sighandler __P((int));
 static sighandler sigstop_sighandler __P((int));
 
 static int waitchld __P((pid_t, int));
 
 static PROCESS *find_pipeline __P((pid_t, int, int *));
+static PROCESS *find_process __P((pid_t, int, int *));
 
 static char *current_working_directory __P((void));
 static char *job_working_directory __P((void));
 static char *j_strsignal __P((int));
 static char *printable_job_status __P((int, PROCESS *, int));
 
+static PROCESS *find_last_proc __P((int, int));
 static pid_t find_last_pid __P((int, int));
 
 static int set_new_line_discipline __P((int));
@@ -240,7 +234,7 @@ static int map_over_jobs __P((sh_job_map_func_t *, int, int));
 static int job_last_stopped __P((int));
 static int job_last_running __P((int));
 static int most_recent_job_in_state __P((int, JOB_STATE));
-static int find_job __P((pid_t, int));
+static int find_job __P((pid_t, int, PROCESS **));
 static int print_job __P((JOB *, int, int, int));
 static int process_exit_status __P((WAIT));
 static int process_exit_signal __P((WAIT));
@@ -251,9 +245,12 @@ static int set_job_status_and_cleanup __P((int));
 static WAIT raw_job_exit_status __P((int));
 
 static void notify_of_job_status __P((void));
+static void reset_job_indices __P((void));
 static void cleanup_dead_jobs __P((void));
+static int processes_in_job __P((int));
+static void realloc_jobs_list __P((void));
 static int compact_jobs_list __P((int));
-static void discard_pipeline __P((PROCESS *));
+static int discard_pipeline __P((PROCESS *));
 static void add_process __P((char *, pid_t));
 static void print_pipeline __P((PROCESS *, int, int, FILE *));
 static void pretty_print_job __P((int, int, FILE *));
@@ -269,6 +266,13 @@ static void pipe_read __P((int *));
 static void pipe_close __P((int *));
 #endif
 
+static struct pidstat *bgp_alloc __P((pid_t, int));
+static struct pidstat *bgp_add __P((pid_t, int));
+static int bgp_delete __P((pid_t));
+static void bgp_clear __P((void));
+static int bgp_search __P((pid_t));
+static void bgp_prune __P((void));
+
 #if defined (ARRAY_VARS)
 static int *pstatuses;         /* list of pipeline statuses */
 static int statsize;
@@ -291,10 +295,6 @@ static int queue_sigchld;
 static SigHandler *old_tstp, *old_ttou, *old_ttin;
 static SigHandler *old_cont = (SigHandler *)SIG_DFL;
 
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-static SigHandler *old_winch = (SigHandler *)SIG_DFL;
-#endif
-
 /* A place to temporarily save the current pipeline. */
 static PROCESS *saved_pipeline;
 static int saved_already_making_children;
@@ -307,8 +307,6 @@ static int jobs_list_frozen;
 
 static char retcode_name_buffer[64];
 
-static long child_max = -1L;
-
 #if !defined (_POSIX_VERSION)
 
 /* These are definitions to map POSIX 1003.1 functions onto existing BSD
@@ -330,6 +328,13 @@ tcgetpgrp (fd)
 
 #endif /* !_POSIX_VERSION */
 
+/* Initialize the global job stats structure. */
+void
+init_job_stats ()
+{
+  js = zerojs;
+}
+
 /* Return the working directory for the current process.  Unlike
    job_working_directory, this does not call malloc (), nor do any
    of the functions it calls.  This is so that it can safely be called
@@ -391,11 +396,16 @@ stop_making_children ()
 void
 cleanup_the_pipeline ()
 {
-  if (the_pipeline)
-    {
-      discard_pipeline (the_pipeline);
-      the_pipeline = (PROCESS *)NULL;
-    }
+  PROCESS *disposer;
+  sigset_t set, oset;
+
+  BLOCK_CHILD (set, oset);
+  disposer = the_pipeline;
+  the_pipeline = (PROCESS *)NULL;
+  UNBLOCK_CHILD (oset);
+
+  if (disposer)
+    discard_pipeline (disposer);
 }
 
 void
@@ -403,9 +413,9 @@ save_pipeline (clear)
      int clear;
 {
   saved_pipeline = the_pipeline;
-  saved_already_making_children = already_making_children;
   if (clear)
     the_pipeline = (PROCESS *)NULL;
+  saved_already_making_children = already_making_children;
 }
 
 void
@@ -465,49 +475,61 @@ stop_pipeline (async, deferred)
 
   cleanup_dead_jobs ();
 
-  if (job_slots == 0)
+  if (js.j_jobslots == 0)
     {
-      job_slots = JOB_SLOTS;
-      jobs = (JOB **)xmalloc (job_slots * sizeof (JOB *));
+      js.j_jobslots = JOB_SLOTS;
+      jobs = (JOB **)xmalloc (js.j_jobslots * sizeof (JOB *));
 
       /* Now blank out these new entries. */
-      for (i = 0; i < job_slots; i++)
+      for (i = 0; i < js.j_jobslots; i++)
        jobs[i] = (JOB *)NULL;
+
+      js.j_firstj = js.j_lastj = js.j_njobs = 0;
     }
 
   /* Scan from the last slot backward, looking for the next free one. */
   /* XXX - revisit this interactive assumption */
+  /* XXX - this way for now */
   if (interactive)
     {
-      for (i = job_slots; i; i--)
+      for (i = js.j_jobslots; i; i--)
        if (jobs[i - 1])
          break;
     }
   else
     {
-      /* If we're not interactive, we don't need to monotonically increase
-        the job number (in fact, we don't care about the job number at all),
-        so we can simply scan for the first free slot.  This helps to keep
-        us from continuously reallocating the jobs array when running
-        certain kinds of shell loops, and saves time spent searching. */
-      for (i = 0; i < job_slots; i++)
+#if 0
+      /* This wraps around, but makes it inconvenient to extend the array */
+      for (i = js.j_lastj+1; i != js.j_lastj; i++)
+       {
+         if (i >= js.j_jobslots)
+           i = 0;
+         if (jobs[i] == 0)
+           break;
+       }       
+      if (i == js.j_lastj)
+        i = js.j_jobslots;
+#else
+      /* This doesn't wrap around yet. */
+      for (i = js.j_lastj ? js.j_lastj + 1 : js.j_lastj; i < js.j_jobslots; i++)
        if (jobs[i] == 0)
          break;
+#endif
     }
 
   /* Do we need more room? */
 
   /* First try compaction */
-  if (subshell_environment && interactive_shell && i == job_slots && job_slots >= MAX_JOBS_IN_ARRAY)
+  if ((interactive_shell == 0 || subshell_environment) && i == js.j_jobslots && js.j_jobslots >= MAX_JOBS_IN_ARRAY)
     i = compact_jobs_list (0);
 
   /* If we can't compact, reallocate */
-  if (i == job_slots)
+  if (i == js.j_jobslots)
     {
-      job_slots += JOB_SLOTS;
-      jobs = (JOB **)xrealloc (jobs, ((1 + job_slots) * sizeof (JOB *)));
+      js.j_jobslots += JOB_SLOTS;
+      jobs = (JOB **)xrealloc (jobs, (js.j_jobslots * sizeof (JOB *)));
 
-      for (j = i; j < job_slots; j++)
+      for (j = i; j < js.j_jobslots; j++)
        jobs[j] = (JOB *)NULL;
     }
 
@@ -515,11 +537,11 @@ stop_pipeline (async, deferred)
   if (the_pipeline)
     {
       register PROCESS *p;
-      int any_alive, any_stopped;
+      int any_running, any_stopped, n;
 
       newjob = (JOB *)xmalloc (sizeof (JOB));
 
-      for (p = the_pipeline; p->next != the_pipeline; p = p->next)
+      for (n = 1, p = the_pipeline; p->next != the_pipeline; n++, p = p->next)
        ;
       p->next = (PROCESS *)NULL;
       newjob->pipe = REVERSE_LIST (the_pipeline, PROCESS *);
@@ -539,16 +561,16 @@ stop_pipeline (async, deferred)
 
       /* Set the state of this pipeline. */
       p = newjob->pipe;
-      any_alive = any_stopped = 0;
+      any_running = any_stopped = 0;
       do
        {
-         any_alive |= p->running;
-         any_stopped |= WIFSTOPPED (p->status);
+         any_running |= PRUNNING (p);
+         any_stopped |= PSTOPPED (p);
          p = p->next;
        }
       while (p != newjob->pipe);
 
-      newjob->state = any_alive ? JRUNNING : (any_stopped ? JSTOPPED : JDEAD);
+      newjob->state = any_running ? JRUNNING : (any_stopped ? JSTOPPED : JDEAD);
       newjob->wd = job_working_directory ();
       newjob->deferred = deferred;
 
@@ -558,14 +580,30 @@ stop_pipeline (async, deferred)
       jobs[i] = newjob;
       if (newjob->state == JDEAD && (newjob->flags & J_FOREGROUND))
        setjstatus (i);
+      if (newjob->state == JDEAD)
+       {
+         js.c_reaped += n;     /* wouldn't have been done since this was not part of a job */
+         js.j_ndead++;
+       }
+      js.c_injobs += n;
+
+      js.j_lastj = i;
+      js.j_njobs++;
     }
   else
     newjob = (JOB *)NULL;
 
+  if (newjob)
+    js.j_lastmade = newjob;
+
   if (async)
     {
       if (newjob)
-       newjob->flags &= ~J_FOREGROUND;
+       {
+         newjob->flags &= ~J_FOREGROUND;
+         newjob->flags |= J_ASYNC;
+         js.j_lastasync = newjob;
+       }
       reset_current ();
     }
   else
@@ -589,9 +627,172 @@ stop_pipeline (async, deferred)
 
   stop_making_children ();
   UNBLOCK_CHILD (oset);
-  return (current_job);
+  return (js.j_current);
+}
+
+/* Functions to manage the list of exited background pids whose status has
+   been saved. */
+
+static struct pidstat *
+bgp_alloc (pid, status)
+     pid_t pid;
+     int status;
+{
+  struct pidstat *ps;
+
+  ps = (struct pidstat *)xmalloc (sizeof (struct pidstat));
+  ps->pid = pid;
+  ps->status = status;
+  ps->next = (struct pidstat *)0;
+  return ps;
 }
 
+static struct pidstat *
+bgp_add (pid, status)
+     pid_t pid;
+     int status;
+{
+  struct pidstat *ps;
+
+  ps = bgp_alloc (pid, status);
+
+  if (bgpids.list == 0)
+    {
+      bgpids.list = bgpids.end = ps;
+      bgpids.npid = 0;                 /* just to make sure */
+    }
+  else
+    {
+      bgpids.end->next = ps;
+      bgpids.end = ps;
+    }
+  bgpids.npid++;
+
+  if (bgpids.npid > js.c_childmax)
+    bgp_prune ();
+
+  return ps;
+}
+
+static int
+bgp_delete (pid)
+     pid_t pid;
+{
+  struct pidstat *prev, *p;
+
+  for (prev = p = bgpids.list; p; prev = p, p = p->next)
+    if (p->pid == pid)
+      {
+        prev->next = p->next;  /* remove from list */
+        break;
+      }
+
+  if (p == 0)
+    return 0;          /* not found */
+
+#if defined (DEBUG)
+  itrace("bgp_delete: deleting %d", pid);
+#endif
+
+  /* Housekeeping in the border cases. */
+  if (p == bgpids.list)
+    bgpids.list = bgpids.list->next;
+  else if (p == bgpids.end)
+    bgpids.end = prev;
+
+  bgpids.npid--;
+  if (bgpids.npid == 0)
+    bgpids.list = bgpids.end = 0;
+  else if (bgpids.npid == 1)
+    bgpids.end = bgpids.list;          /* just to make sure */
+
+  free (p);
+  return 1;
+}
+
+/* Clear out the list of saved statuses */
+static void
+bgp_clear ()
+{
+  struct pidstat *ps, *p;
+
+  for (ps = bgpids.list; ps; )
+    {
+      p = ps;
+      ps = ps->next;
+      free (p);
+    }
+  bgpids.list = bgpids.end = 0;
+  bgpids.npid = 0;
+}
+
+/* Search for PID in the list of saved background pids; return its status if
+   found.  If not found, return -1. */
+static int
+bgp_search (pid)
+     pid_t pid;
+{
+  struct pidstat *ps;
+
+  for (ps = bgpids.list ; ps; ps = ps->next)
+    if (ps->pid == pid)
+      return ps->status;
+  return -1;
+}
+
+static void
+bgp_prune ()
+{
+  struct pidstat *ps, *p;
+
+  while (bgpids.npid > js.c_childmax)
+    {
+      ps = bgpids.list;
+      bgpids.list = bgpids.list->next;
+      free (ps);
+      bgpids.npid--;
+    }
+}
+    
+/* Reset the values of js.j_lastj and js.j_firstj after one or both have
+   been deleted.  The caller should check whether js.j_njobs is 0 before
+   calling this.  This wraps around, but the rest of the code does not.  At
+   this point, it should not matter. */
+static void
+reset_job_indices ()
+{
+  int old;
+
+  if (jobs[js.j_firstj] == 0)
+    {
+      old = js.j_firstj++;
+      while (js.j_firstj != old)
+       {
+         if (js.j_firstj >= js.j_jobslots)
+           js.j_firstj = 0;
+         if (jobs[js.j_firstj])
+           break;
+         js.j_firstj++;
+       }
+      if (js.j_firstj == old)
+        js.j_firstj = js.j_lastj = js.j_njobs = 0;
+    }
+  if (jobs[js.j_lastj] == 0)
+    {
+      old = js.j_lastj--;
+      while (js.j_lastj != old)
+       {
+         if (js.j_lastj < 0)
+           js.j_lastj = js.j_jobslots - 1;
+         if (jobs[js.j_lastj])
+           break;
+         js.j_lastj--;
+       }
+      if (js.j_lastj == old)
+        js.j_firstj = js.j_lastj = js.j_njobs = 0;
+    }
+}
+      
 /* Delete all DEAD jobs that the user had received notification about. */
 static void
 cleanup_dead_jobs ()
@@ -599,84 +800,92 @@ cleanup_dead_jobs ()
   register int i;
   int os;
 
-  if (job_slots == 0 || jobs_list_frozen)
+  if (js.j_jobslots == 0 || jobs_list_frozen)
     return;
 
   QUEUE_SIGCHLD(os);
 
-  for (i = 0; i < job_slots; i++)
-    if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i))
-      delete_job (i, 0);
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
+    {
+#if defined (DEBUG)
+      if (i < js.j_firstj && jobs[i])
+       itrace("cleanup_dead_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
 
+      if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i))
+       delete_job (i, 0);
+    }
   UNQUEUE_SIGCHLD(os);
 }
 
-/* Compact the jobs list by removing dead jobs.  Assumed that we have filled
-   the jobs array to some predefined maximum.  Called when the shell is not
-   the foreground process (subshell_environment != 0).  Returns the first
-   available slot in the compacted list.  If that value is job_slots, then
-   the list needs to be reallocated.  The jobs array is in new memory if
-   this returns > 0 and < job_slots.  FLAGS is reserved for future use. */
 static int
-compact_jobs_list (flags)
-     int flags;
+processes_in_job (job)
 {
-  sigset_t set, oset;
-  register int i, j;
-  int nremove, ndel;
-  JOB **newlist;
-
-  if (job_slots == 0 || jobs_list_frozen)
-    return job_slots;
-
-  if (child_max < 0)
-    child_max = getmaxchild ();
-
-  /* Take out at most a quarter of the jobs in the jobs array, but leave at
-     least child_max */
-  nremove = job_slots >> 2;
-  if ((job_slots - nremove) < child_max)
-    nremove = job_slots - child_max;
+  int nproc;
+  register PROCESS *p;
 
-  /* need to increase jobs list to at least CHILD_MAX entries */
-  if (nremove < 0)
-    return job_slots;
+  nproc = 0;
+  p = jobs[job]->pipe;
+  do
+    {
+      p = p->next;
+      nproc++;
+    }
+  while (p != jobs[job]->pipe);
 
-  BLOCK_CHILD (set, oset);  
+  return nproc;
+}
 
-  for (ndel = i = 0; i < job_slots; i++)
-    if (jobs[i])
-      {
-       if (DEADJOB (i) && (find_last_pid (i, 0) != last_asynchronous_pid))
-         {
-           delete_job (i, 0);
-           ndel++;
-           if (ndel == nremove)
-             break;
-         }
-      }
+/* Reallocate and compress the jobs list.  This returns with a jobs array
+   whose size is a multiple of JOB_SLOTS and can hold the current number of
+   jobs.  Heuristics are used to minimize the number of new reallocs. */
+static void
+realloc_jobs_list ()
+{
+  sigset_t set, oset;
+  int nsize, i, j;
+  JOB **nlist;
 
-  if (ndel == 0)
-    {
-      UNBLOCK_CHILD (oset);
-      return job_slots;
-    }
+  nsize = ((js.j_njobs + JOB_SLOTS - 1) / JOB_SLOTS);
+  nsize *= JOB_SLOTS;
+  i = js.j_njobs % JOB_SLOTS;
+  if (i == 0 || i > (JOB_SLOTS >> 1))
+    nsize += JOB_SLOTS;
 
-  newlist = (JOB **)xmalloc ((1 + job_slots) * sizeof (JOB *));
-  for (i = j = 0; i < job_slots; i++)
+  BLOCK_CHILD (set, oset);
+  nlist = (JOB **) xmalloc (nsize * sizeof (JOB *));
+  for (i = j = 0; i < js.j_jobslots; i++)
     if (jobs[i])
-      newlist[j++] = jobs[i];
+      nlist[j++] = jobs[i];
 
-  ndel = j;
-  for ( ; j < job_slots; j++)
-    newlist[j] = (JOB *)NULL;
+  js.j_firstj = 0;
+  js.j_lastj = (j > 0) ? j - 1: 0;
+  js.j_jobslots = nsize;
 
   free (jobs);
-  jobs = newlist;
+  jobs = nlist;
 
   UNBLOCK_CHILD (oset);
+}
+
+/* Compact the jobs list by removing dead jobs.  Assumed that we have filled
+   the jobs array to some predefined maximum.  Called when the shell is not
+   the foreground process (subshell_environment != 0).  Returns the first
+   available slot in the compacted list.  If that value is js.j_jobslots, then
+   the list needs to be reallocated.  The jobs array is in new memory if
+   this returns > 0 and < js.j_jobslots.  FLAGS is reserved for future use. */
+static int
+compact_jobs_list (flags)
+     int flags;
+{
+  if (js.j_jobslots == 0 || jobs_list_frozen)
+    return js.j_jobslots;
+
+  reap_dead_jobs ();
+  realloc_jobs_list ();
 
-  return ndel;
+  return (js.j_lastj);
 }
 
 /* Delete the job at INDEX from the job list.  Must be called
@@ -686,26 +895,57 @@ delete_job (job_index, warn_stopped)
      int job_index, warn_stopped;
 {
   register JOB *temp;
+  PROCESS *proc;
+  int ndel, status;
+  pid_t pid;
 
-  if (job_slots == 0 || jobs_list_frozen)
+  if (js.j_jobslots == 0 || jobs_list_frozen)
     return;
 
   if (warn_stopped && subshell_environment == 0 && STOPPED (job_index))
     internal_warning (_("deleting stopped job %d with process group %ld"), job_index+1, (long)jobs[job_index]->pgrp);
-
   temp = jobs[job_index];
-  if (job_index == current_job || job_index == previous_job)
+  if (job_index == js.j_current || job_index == js.j_previous)
     reset_current ();
 
+  proc = find_last_proc (job_index, 0);
+  /* Could do this just for J_ASYNC jobs, but we save all. */
+  bgp_add (proc->pid, process_exit_status (proc->status));
+
   jobs[job_index] = (JOB *)NULL;
 
+  if (temp == js.j_lastmade)
+    js.j_lastmade = 0;
+  else if (temp == js.j_lastasync)
+    js.j_lastasync = 0;
+
   free (temp->wd);
-  discard_pipeline (temp->pipe);
+  ndel = discard_pipeline (temp->pipe);
+
+  js.c_injobs -= ndel;
+  if (temp->state == JDEAD)
+    {
+      js.c_reaped -= ndel;
+      js.j_ndead--;
+      if (js.c_reaped < 0)
+       {
+#ifdef DEBUG
+         itrace("delete_job (%d pgrp %d): js.c_reaped (%d) < 0 ndel = %d js.j_ndead = %d", job_index, temp->pgrp, js.c_reaped, ndel, js.j_ndead);
+#endif
+         js.c_reaped = 0;
+       }
+    }
 
   if (temp->deferred)
     dispose_command (temp->deferred);
 
   free (temp);
+
+  js.j_njobs--;
+  if (js.j_njobs == 0)
+    js.j_firstj = js.j_lastj = 0;
+  else if (jobs[js.j_firstj] == 0 || jobs[js.j_lastj] == 0)
+    reset_job_indices ();
 }
 
 /* Must be called with SIGCHLD blocked. */
@@ -715,7 +955,7 @@ nohup_job (job_index)
 {
   register JOB *temp;
 
-  if (job_slots == 0)
+  if (js.j_jobslots == 0)
     return;
 
   if (temp = jobs[job_index])
@@ -723,21 +963,26 @@ nohup_job (job_index)
 }
 
 /* Get rid of the data structure associated with a process chain. */
-static void
+static int
 discard_pipeline (chain)
      register PROCESS *chain;
 {
   register PROCESS *this, *next;
+  int n;
 
   this = chain;
+  n = 0;
   do
     {
       next = this->next;
       FREE (this->command);
       free (this);
+      n++;
       this = next;
     }
   while (this != chain);
+
+  return n;
 }
 
 /* Add this process to the chain being built in the_pipeline.
@@ -750,6 +995,21 @@ add_process (name, pid)
 {
   PROCESS *t, *p;
 
+#if defined (RECYCLES_PIDS)
+  int j;
+  p = find_process (pid, 0, &j);
+  if (p)
+    {
+#  ifdef DEBUG
+      if (j == NO_JOB)
+       internal_warning ("add_process: process %5ld (%s) in the_pipeline", (long)p->pid, p->command);
+#  endif
+      if (PALIVE (p))
+        internal_warning ("add_process: pid %5ld (%s) marked as still alive", (long)p->pid, p->command);
+      p->running = PS_RECYCLED;                /* mark as recycled */
+    }
+#endif
+
   t = (PROCESS *)xmalloc (sizeof (PROCESS));
   t->next = the_pipeline;
   t->pid = pid;
@@ -820,13 +1080,18 @@ map_over_jobs (func, arg1, arg2)
   int result;
   sigset_t set, oset;
 
-  if (job_slots == 0)
+  if (js.j_jobslots == 0)
     return 0;
 
   BLOCK_CHILD (set, oset);
 
-  for (i = result = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = result = 0; i < js.j_jobslots; i++)
     {
+#if defined (DEBUG)
+      if (i < js.j_firstj && jobs[i])
+       itrace("map_over_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
       if (jobs[i])
        {
          result = (*func)(jobs[i], arg1, arg2, i);
@@ -857,7 +1122,8 @@ terminate_stopped_jobs ()
 {
   register int i;
 
-  for (i = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
     {
       if (jobs[i] && STOPPED (i))
        {
@@ -874,7 +1140,8 @@ hangup_all_jobs ()
 {
   register int i;
 
-  for (i = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
     {
       if (jobs[i])
        {
@@ -894,15 +1161,16 @@ kill_current_pipeline ()
 }
 
 /* Return the pipeline that PID belongs to.  Note that the pipeline
-   doesn't have to belong to a job.  Must be called with SIGCHLD blocked. */
+   doesn't have to belong to a job.  Must be called with SIGCHLD blocked.
+   If JOBP is non-null, return the index of the job containing PID.  */
 static PROCESS *
-find_pipeline (pid, running_only, jobp)
+find_pipeline (pid, alive_only, jobp)
      pid_t pid;
-     int running_only;
+     int alive_only;
      int *jobp;                /* index into jobs list or NO_JOB */
 {
   int job;
-  register PROCESS *p;
+  PROCESS *p;
 
   /* See if this process is in the pipeline that we are building. */
   if (jobp)
@@ -912,46 +1180,67 @@ find_pipeline (pid, running_only, jobp)
       p = the_pipeline;
       do
        {
-         /* Return it if we found it. */
-         if (p->pid == pid)
-           {
-             if ((running_only && PRUNNING(p)) || (running_only == 0))
-               return (p);
-           }
+         /* Return it if we found it.  Don't ever return a recycled pid. */
+         if (p->pid == pid && ((alive_only == 0 && PRECYCLED(p) == 0) || PALIVE(p)))
+           return (p);
 
          p = p->next;
        }
       while (p != the_pipeline);
     }
 
-  job = find_job (pid, running_only);
+  job = find_job (pid, alive_only, &p);
   if (jobp)
     *jobp = job;
   return (job == NO_JOB) ? (PROCESS *)NULL : jobs[job]->pipe;
 }
 
+/* Return the PROCESS * describing PID.  If JOBP is non-null return the index
+   into the jobs array of the job containing PID.  Must be called with
+   SIGCHLD blocked. */
+static PROCESS *
+find_process (pid, alive_only, jobp)
+     pid_t pid;
+     int alive_only;
+     int *jobp;                /* index into jobs list or NO_JOB */
+{
+  PROCESS *p;
+
+  p = find_pipeline (pid, alive_only, jobp);
+  while (p && p->pid != pid)
+    p = p->next;
+  return p;
+}
+
 /* Return the job index that PID belongs to, or NO_JOB if it doesn't
    belong to any job.  Must be called with SIGCHLD blocked. */
 static int
-find_job (pid, running_only)
+find_job (pid, alive_only, procp)
      pid_t pid;
-     int running_only;
+     int alive_only;
+     PROCESS **procp;
 {
   register int i;
-  register PROCESS *p;
+  PROCESS *p;
 
-  for (i = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
     {
+#if defined (DEBUG)
+      if (i < js.j_firstj && jobs[i])
+       itrace("find_job: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
       if (jobs[i])
        {
          p = jobs[i]->pipe;
 
          do
            {
-             if (p->pid == pid)
+             if (p->pid == pid && ((alive_only == 0 && PRECYCLED(p) == 0) || PALIVE(p)))
                {
-                 if ((running_only && PRUNNING(p)) || (running_only == 0))
-                   return (i);
+                 if (procp)
+                   *procp = p;
+                 return (i);
                }
 
              p = p->next;
@@ -976,7 +1265,7 @@ get_job_by_pid (pid, block)
   if (block)
     BLOCK_CHILD (set, oset);
 
-  job = find_job (pid, 0);
+  job = find_job (pid, 0, NULL);
 
   if (block)
     UNBLOCK_CHILD (oset);
@@ -994,10 +1283,10 @@ describe_pid (pid)
 
   BLOCK_CHILD (set, oset);
 
-  job = find_job (pid, 0);
+  job = find_job (pid, 0, NULL);
 
   if (job != NO_JOB)
-    printf ("[%d] %ld\n", job + 1, (long)pid);
+    fprintf (stderr, "[%d] %ld\n", job + 1, (long)pid);
   else
     programming_error (_("describe_pid: %ld: no such pid"), (long)pid);
 
@@ -1214,8 +1503,8 @@ pretty_print_job (job_index, format, stream)
 
   if (format != JLIST_NONINTERACTIVE)
     fprintf (stream, "[%d]%c ", job_index + 1,
-             (job_index == current_job) ? '+':
-               (job_index == previous_job) ? '-' : ' ');
+             (job_index == js.j_current) ? '+':
+               (job_index == js.j_previous) ? '-' : ' ');
 
   if (format == JLIST_NONINTERACTIVE)
     format = JLIST_LONG;
@@ -1396,7 +1685,12 @@ make_child (command, async_p)
 #endif /* PGRP_PIPE */
 
       if (async_p)
-       last_asynchronous_pid = getpid ();
+       last_asynchronous_pid = mypid;
+#if defined (RECYCLES_PIDS)
+      else if (last_asynchronous_pid == mypid)
+        /* Avoid pid aliasing.  1 seems like a safe, unusual pid value. */
+       last_asynchronous_pid = 1;
+#endif
     }
   else
     {
@@ -1430,10 +1724,28 @@ make_child (command, async_p)
 
       if (async_p)
        last_asynchronous_pid = pid;
+#if defined (RECYCLES_PIDS)
+      else if (last_asynchronous_pid == pid)
+        /* Avoid pid aliasing.  1 seems like a safe, unusual pid value. */
+       last_asynchronous_pid = 1;
+#endif
+
+#if !defined (RECYCLES_PIDS)
+      /* Only check for saved status if we've saved more than CHILD_MAX
+        statuses, unless the system recycles pids. */
+      if ((js.c_reaped + bgpids.npid) >= js.c_childmax)
+#endif
+       bgp_delete (pid);               /* new process, discard any saved status */
 
       last_made_pid = pid;
 
-      /* Unblock SIGINT and SIGCHLD. */
+      /* keep stats */
+      js.c_totforked++;
+      js.c_living++;
+
+      /* Unblock SIGINT and SIGCHLD unless creating a pipeline, in which case
+        SIGCHLD remains blocked until all commands in the pipeline have been
+        created. */
       sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL);
     }
 
@@ -1546,7 +1858,7 @@ get_tty_state ()
        }
 #endif /* TERMIOS_TTY_DRIVER */
       if (check_window_size)
-       get_new_window_size (0);
+       get_new_window_size (0, (int *)0, (int *)0);
     }
   return 0;
 }
@@ -1587,11 +1899,11 @@ set_tty_state ()
   return 0;
 }
 
-/* Given an index into the jobs array JOB, return the pid of the last
+/* Given an index into the jobs array JOB, return the PROCESS struct of the last
    process in that job's pipeline.  This is the one whose exit status
    counts.  Must be called with SIGCHLD blocked or queued. */
-static pid_t
-find_last_pid (job, block)
+static PROCESS *
+find_last_proc (job, block)
      int job;
      int block;
 {
@@ -1608,9 +1920,21 @@ find_last_pid (job, block)
   if (block)
     UNBLOCK_CHILD (oset);
 
-  return (p->pid);
+  return (p);
 }
 
+static pid_t
+find_last_pid (job, block)
+     int job;
+     int block;
+{
+  PROCESS *p;
+
+  p = find_last_proc (job, block);
+  /* Possible race condition here. */
+  return p->pid;
+}     
+
 /* Wait for a particular child of the shell to finish executing.
    This low-level function prints an error message if PID is not
    a child of this shell.  It returns -1 if it fails, or whatever
@@ -1630,6 +1954,13 @@ wait_for_single_pid (pid)
 
   if (child == 0)
     {
+      r = bgp_search (pid);
+      if (r >= 0)
+       return r;
+    }
+
+  if (child == 0)
+    {
       internal_error (_("wait: pid %ld is not a child of this shell"), (long)pid);
       return (127);
     }
@@ -1639,11 +1970,18 @@ wait_for_single_pid (pid)
   /* POSIX.2: if we just waited for a job, we can remove it from the jobs
      table. */
   BLOCK_CHILD (set, oset);
-  job = find_job (pid, 0);
+  job = find_job (pid, 0, NULL);
   if (job != NO_JOB && jobs[job] && DEADJOB (job))
     jobs[job]->flags |= J_NOTIFIED;
   UNBLOCK_CHILD (oset);
 
+  /* If running in posix mode, remove the job from the jobs table immediately */
+  if (posixly_correct)
+    {
+      cleanup_dead_jobs ();
+      bgp_delete (pid);
+    }
+
   return r;
 }
 
@@ -1660,11 +1998,17 @@ wait_for_background_pids ()
       BLOCK_CHILD (set, oset);
 
       /* find first running job; if none running in foreground, break */
-      for (i = 0; i < job_slots; i++)
-       if (jobs[i] && RUNNING (i) && IS_FOREGROUND (i) == 0)
-         break;
-
-      if (i == job_slots)
+      /* XXX could use js.j_firstj here */
+      for (i = 0; i < js.j_jobslots; i++)
+       {
+#if defined (DEBUG)
+         if (i < js.j_firstj && jobs[i])
+           itrace("wait_for_background_pids: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
+         if (jobs[i] && RUNNING (i) && IS_FOREGROUND (i) == 0)
+           break;
+       }
+      if (i == js.j_jobslots)
        {
          UNBLOCK_CHILD (oset);
          break;
@@ -1690,6 +2034,7 @@ wait_for_background_pids ()
      `wait' is called with no arguments. */
   mark_dead_jobs_as_notified (1);
   cleanup_dead_jobs ();
+  bgp_clear ();
 }
 
 /* Make OLD_SIGINT_HANDLER the SIGINT signal handler. */
@@ -1873,13 +2218,13 @@ wait_for (pid)
         We check for JDEAD in case the job state has been set by waitchld
         after receipt of a SIGCHLD. */
       if (job == NO_JOB)
-       job = find_job (pid, 0);
+       job = find_job (pid, 0, NULL);
 
       /* waitchld() takes care of setting the state of the job.  If the job
         has already exited before this is called, sigchld_handler will have
         called waitchld and the state will be set to JDEAD. */
 
-      if (child->running || (job != NO_JOB && RUNNING (job)))
+      if (PRUNNING(child) || (job != NO_JOB && RUNNING (job)))
        {
 #if defined (WAITPID_BROKEN)    /* SCOv4 */
          sigset_t suspend_set;
@@ -1921,7 +2266,11 @@ wait_for (pid)
              child->running = PS_DONE;
              child->status = 0;        /* XXX -- can't find true status */
              if (job != NO_JOB)
-               jobs[job]->state = JDEAD;
+               {
+                 jobs[job]->state = JDEAD;
+                 js.c_reaped++;
+                 js.j_ndead++;
+               }
            }
 #endif /* WAITPID_BROKEN */
        }
@@ -1933,7 +2282,7 @@ wait_for (pid)
       if (interactive && job_control == 0)
        QUIT;
     }
-  while (child->running || (job != NO_JOB && RUNNING (job)));
+  while (PRUNNING (child) || (job != NO_JOB && RUNNING (job)));
 
   /* The exit state of the command is either the termination state of the
      child, or the termination state of the job.  If a job, the status
@@ -1944,6 +2293,10 @@ wait_for (pid)
   last_command_exit_signal = (job != NO_JOB) ? job_exit_signal (job)
                                             : process_exit_signal (child->status);
 
+  /* XXX */
+  if ((job != NO_JOB && JOBSTATE (job) == JSTOPPED) || WIFSTOPPED (child->status))
+    termination_state = 128 + WSTOPSIG (child->status);
+
   if (job == NO_JOB || IS_JOBCONTROL (job))
     {
       /* XXX - under what circumstances is a job not present in the jobs
@@ -2002,8 +2355,8 @@ if (job == NO_JOB)
 
              /* If the current job was stopped or killed by a signal, and
                 the user has requested it, get a possibly new window size */
-             if (check_window_size && (job == current_job || IS_FOREGROUND (job)))
-               get_new_window_size (0);
+             if (check_window_size && (job == js.j_current || IS_FOREGROUND (job)))
+               get_new_window_size (0, (int *)0, (int *)0);
            }
          else
            get_tty_state ();
@@ -2159,29 +2512,29 @@ set_current_job (job)
 {
   int candidate;
 
-  if (current_job != job)
+  if (js.j_current != job)
     {
-      previous_job = current_job;
-      current_job = job;
+      js.j_previous = js.j_current;
+      js.j_current = job;
     }
 
-  /* First choice for previous_job is the old current_job. */
-  if (previous_job != current_job &&
-      previous_job != NO_JOB &&
-      jobs[previous_job] &&
-      STOPPED (previous_job))
+  /* First choice for previous job is the old current job. */
+  if (js.j_previous != js.j_current &&
+      js.j_previous != NO_JOB &&
+      jobs[js.j_previous] &&
+      STOPPED (js.j_previous))
     return;
 
   /* Second choice:  Newest stopped job that is older than
      the current job. */
   candidate = NO_JOB;
-  if (STOPPED (current_job))
+  if (STOPPED (js.j_current))
     {
-      candidate = job_last_stopped (current_job);
+      candidate = job_last_stopped (js.j_current);
 
       if (candidate != NO_JOB)
        {
-         previous_job = candidate;
+         js.j_previous = candidate;
          return;
        }
     }
@@ -2190,27 +2543,27 @@ set_current_job (job)
      the current job and the previous job should be set to the newest running
      job, or there are only running jobs and the previous job should be set to
      the newest running job older than the current job.  We decide on which
-     alternative to use based on whether or not JOBSTATE(current_job) is
+     alternative to use based on whether or not JOBSTATE(js.j_current) is
      JSTOPPED. */
 
-  candidate = RUNNING (current_job) ? job_last_running (current_job)
-                                   : job_last_running (job_slots);
+  candidate = RUNNING (js.j_current) ? job_last_running (js.j_current)
+                                   : job_last_running (js.j_jobslots);
 
   if (candidate != NO_JOB)
     {
-      previous_job = candidate;
+      js.j_previous = candidate;
       return;
     }
 
   /* There is only a single job, and it is both `+' and `-'. */
-  previous_job = current_job;
+  js.j_previous = js.j_current;
 }
 
 /* Make current_job be something useful, if it isn't already. */
 
 /* Here's the deal:  The newest non-running job should be `+', and the
    next-newest non-running job should be `-'.  If there is only a single
-   stopped job, the previous_job is the newest non-running job.  If there
+   stopped job, the js.j_previous is the newest non-running job.  If there
    are only running jobs, the newest running job is `+' and the
    next-newest running job is `-'.  Must be called with SIGCHLD blocked. */
 
@@ -2219,23 +2572,23 @@ reset_current ()
 {
   int candidate;
 
-  if (job_slots && current_job != NO_JOB && jobs[current_job] && STOPPED (current_job))
-    candidate = current_job;
+  if (js.j_jobslots && js.j_current != NO_JOB && jobs[js.j_current] && STOPPED (js.j_current))
+    candidate = js.j_current;
   else
     {
       candidate = NO_JOB;
 
       /* First choice: the previous job. */
-      if (previous_job != NO_JOB && jobs[previous_job] && STOPPED (previous_job))
-       candidate = previous_job;
+      if (js.j_previous != NO_JOB && jobs[js.j_previous] && STOPPED (js.j_previous))
+       candidate = js.j_previous;
 
       /* Second choice: the most recently stopped job. */
       if (candidate == NO_JOB)
-       candidate = job_last_stopped (job_slots);
+       candidate = job_last_stopped (js.j_jobslots);
 
       /* Third choice: the newest running job. */
       if (candidate == NO_JOB)
-       candidate = job_last_running (job_slots);
+       candidate = job_last_running (js.j_jobslots);
     }
 
   /* If we found a job to use, then use it.  Otherwise, there
@@ -2243,7 +2596,7 @@ reset_current ()
   if (candidate != NO_JOB)
     set_current_job (candidate);
   else
-    current_job = previous_job = NO_JOB;
+    js.j_current = js.j_previous = NO_JOB;
 }
 
 /* Set up the job structures so we know the job and its processes are
@@ -2280,7 +2633,7 @@ start_job (job, foreground)
   register PROCESS *p;
   int already_running;
   sigset_t set, oset;
-  char *wd;
+  char *wd, *s;
   static TTYSTRUCT save_stty;
 
   BLOCK_CHILD (set, oset);
@@ -2298,7 +2651,7 @@ start_job (job, foreground)
     {
       internal_error (_("%s: job %d already in background"), this_command_name, job + 1);
       UNBLOCK_CHILD (oset);
-      return (-1);
+      return (0);              /* XPG6/SUSv3 says this is not an error */
     }
 
   wd = current_working_directory ();
@@ -2316,12 +2669,19 @@ start_job (job, foreground)
   p = jobs[job]->pipe;
 
   if (foreground == 0)
-    fprintf (stderr, "[%d]%c ", job + 1,
-          (job == current_job) ? '+': ((job == previous_job) ? '-' : ' '));
+    {
+      /* POSIX.2 says `bg' doesn't give any indication about current or
+        previous job. */
+      if (posixly_correct == 0)
+       s = (job == js.j_current) ? "+ ": ((job == js.j_previous) ? "- " : " ");       
+      else
+       s = " ";
+      printf ("[%d]%s", job + 1, s);
+    }
 
   do
     {
-      fprintf (stderr, "%s%s",
+      printf ("%s%s",
               p->command ? p->command : "",
               p->next != jobs[job]->pipe? " | " : "");
       p = p->next;
@@ -2329,12 +2689,12 @@ start_job (job, foreground)
   while (p != jobs[job]->pipe);
 
   if (foreground == 0)
-    fprintf (stderr, " &");
+    printf (" &");
 
   if (strcmp (wd, jobs[job]->wd) != 0)
-    fprintf (stderr, " (wd: %s)", polite_directory_format (jobs[job]->wd));
+    printf ("  (wd: %s)", polite_directory_format (jobs[job]->wd));
 
-  fprintf (stderr, "\n");
+  printf ("\n");
 
   /* Run the job. */
   if (already_running == 0)
@@ -2389,9 +2749,17 @@ kill_pid (pid, sig, group)
      int sig, group;
 {
   register PROCESS *p;
-  int job, result;
+  int job, result, negative;
   sigset_t set, oset;
 
+  if (pid < -1)
+    {
+      pid = -pid;
+      group = negative = 1;
+    }
+  else
+    negative = 0;
+
   result = EXECUTION_SUCCESS;
   if (group)
     {
@@ -2403,18 +2771,25 @@ kill_pid (pid, sig, group)
          jobs[job]->flags &= ~J_NOTIFIED;
 
          /* Kill process in backquotes or one started without job control? */
-         if (jobs[job]->pgrp == shell_pgrp)
+
+         /* If we're passed a pid < -1, just call killpg and see what happens  */
+         if (negative && jobs[job]->pgrp == shell_pgrp)
+           result = killpg (pid, sig);
+         /* If we're killing using job control notification, for example,
+            without job control active, we have to do things ourselves. */
+         else if (jobs[job]->pgrp == shell_pgrp)
            {
              p = jobs[job]->pipe;
-
              do
                {
+                 if (PALIVE (p) == 0)
+                   continue;           /* avoid pid recycling problem */
                  kill (p->pid, sig);
-                 if (p->running == PS_DONE && (sig == SIGTERM || sig == SIGHUP))
+                 if (PEXITED (p) && (sig == SIGTERM || sig == SIGHUP))
                    kill (p->pid, SIGCONT);
                  p = p->next;
                }
-             while (p != jobs[job]->pipe);
+             while  (p != jobs[job]->pipe);
            }
          else
            {
@@ -2476,6 +2851,7 @@ waitchld (wpid, block)
   PROCESS *child;
   pid_t pid;
   int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
+  static int wcontinued = WCONTINUED;  /* run-time fix for glibc problem */
 
   call_set_current = children_exited = 0;
   last_stopped_job = NO_JOB;
@@ -2485,12 +2861,19 @@ waitchld (wpid, block)
       /* We don't want to be notified about jobs stopping if job control
         is not active.  XXX - was interactive_shell instead of job_control */
       waitpid_flags = (job_control && subshell_environment == 0)
-                       ? (WUNTRACED|WCONTINUED)
+                       ? (WUNTRACED|wcontinued)
                        : 0;
       if (sigchld || block == 0)
        waitpid_flags |= WNOHANG;
       pid = WAITPID (-1, &status, waitpid_flags);
 
+      /* WCONTINUED may be rejected by waitpid as invalid even when defined */
+      if (wcontinued && pid < 0 && errno == EINVAL)
+       {
+         wcontinued = 0;
+         continue;     /* jump back to the test and retry without WCONTINUED */
+       }
+
       /* The check for WNOHANG is to make sure we decrement sigchld only
         if it was non-zero before we called waitpid. */
       if (sigchld > 0 && (waitpid_flags & WNOHANG))
@@ -2517,7 +2900,7 @@ waitchld (wpid, block)
        children_exited++;
 
       /* Locate our PROCESS for this pid. */
-      child = find_pipeline (pid, 1, &job);    /* want running procs only */
+      child = find_process (pid, 1, &job);     /* want living procs only */
 
       /* It is not an error to have a child terminate that we did
         not have a record of.  This child could have been part of
@@ -2526,13 +2909,17 @@ waitchld (wpid, block)
       if (child == 0)
        continue;
 
-      while (child->pid != pid)
-       child = child->next;
-
       /* Remember status, and whether or not the process is running. */
       child->status = status;
       child->running = WIFCONTINUED(status) ? PS_RUNNING : PS_DONE;
 
+      if (PEXITED (child))
+       {
+         js.c_totreaped++;
+         if (job != NO_JOB)
+           js.c_reaped++;
+       }
+        
       if (job == NO_JOB)
        continue;
 
@@ -2597,8 +2984,13 @@ set_job_status_and_cleanup (job)
   job_state = any_stopped = any_tstped = 0;
   do
     {
-      job_state |= child->running;
-      if (child->running == PS_DONE && (WIFSTOPPED (child->status)))
+      job_state |= PRUNNING (child);
+#if 0
+      if (PEXITED (child) && (WIFSTOPPED (child->status)))
+#else
+      /* Only checking for WIFSTOPPED now, not for PS_DONE */
+      if (PSTOPPED (child))
+#endif
        {
          any_stopped = 1;
          any_tstped |= interactive && job_control &&
@@ -2636,6 +3028,7 @@ set_job_status_and_cleanup (job)
   else
     {
       jobs[job]->state = JDEAD;
+      js.j_ndead++;
 
 #if 0
       if (IS_FOREGROUND (job))
@@ -2660,7 +3053,7 @@ set_job_status_and_cleanup (job)
    * for a foreground job to complete
    */
 
-  if (jobs[job]->state == JDEAD)
+  if (JOBSTATE (job) == JDEAD)
     {
       /* If we're running a shell script and we get a SIGINT with a
         SIGINT trap handler, but the foreground job handles it and
@@ -2728,10 +3121,10 @@ set_job_status_and_cleanup (job)
              if (temp_handler == trap_handler && signal_is_trapped (SIGINT) == 0)
                  temp_handler = trap_to_sighandler (SIGINT);
                restore_sigint_handler ();
-               if (temp_handler == SIG_DFL)
-                 termination_unwind_protect (SIGINT);
-               else if (temp_handler != SIG_IGN)
-                 (*temp_handler) (SIGINT);
+             if (temp_handler == SIG_DFL)
+               termination_unwind_protect (SIGINT);
+             else if (temp_handler != SIG_IGN)
+               (*temp_handler) (SIGINT);
            }
        }
     }
@@ -2825,7 +3218,7 @@ notify_of_job_status ()
   sigset_t set, oset;
   WAIT s;
 
-  if (jobs == 0 || job_slots == 0)
+  if (jobs == 0 || js.j_jobslots == 0)
     return;
 
   if (old_ttou != 0)
@@ -2839,7 +3232,8 @@ notify_of_job_status ()
   else
     queue_sigchld++;
 
-  for (job = 0, dir = (char *)NULL; job < job_slots; job++)
+  /* XXX could use js.j_firstj here */
+  for (job = 0, dir = (char *)NULL; job < js.j_jobslots; job++)
     {
       if (jobs[job] && IS_NOTIFIED (job) == 0)
        {
@@ -2848,8 +3242,9 @@ notify_of_job_status ()
 
          /* POSIX.2 says we have to hang onto the statuses of at most the
             last CHILD_MAX background processes if the shell is running a
-            script.  If the shell is not interactive, don't print anything
-            unless the job was killed by a signal. */
+            script.  If the shell is running a script, either from a file
+            or standard input, don't print anything unless the job was
+            killed by a signal. */
          if (startup_state == 0 && WIFSIGNALED (s) == 0 &&
                ((DEADJOB (job) && IS_FOREGROUND (job) == 0) || STOPPED (job)))
            continue;
@@ -2912,7 +3307,7 @@ notify_of_job_status ()
                      fprintf (stderr, "\n");
                    }
                }
-             else
+             else if (job_control)     /* XXX job control test added */
                {
                  if (dir == 0)
                    dir = current_working_directory ();
@@ -3053,6 +3448,11 @@ initialize_job_control (force)
   if (interactive)
     get_tty_state ();
 
+  if (js.c_childmax < 0)
+    js.c_childmax = getmaxchild ();
+  if (js.c_childmax < 0)
+    js.c_childmax = DEFAULT_CHILD_MAX;
+
   return job_control;
 }
 
@@ -3124,60 +3524,6 @@ set_new_line_discipline (tty)
 #endif
 }
 
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-static void
-get_new_window_size (from_sig)
-     int from_sig;
-{
-  struct winsize win;
-
-  if ((ioctl (shell_tty, TIOCGWINSZ, &win) == 0) &&
-      win.ws_row > 0 && win.ws_col > 0)
-    {
-#if defined (aixpc)
-      shell_tty_info.c_winsize = win;  /* structure copying */
-#endif
-      sh_set_lines_and_columns (win.ws_row, win.ws_col);
-#if defined (READLINE)
-      rl_set_screen_size (win.ws_row, win.ws_col);
-#endif
-    }
-}
-
-static sighandler
-sigwinch_sighandler (sig)
-     int sig;
-{
-#if defined (MUST_REINSTALL_SIGHANDLERS)
-  set_signal_handler (SIGWINCH, sigwinch_sighandler);
-#endif /* MUST_REINSTALL_SIGHANDLERS */
-  get_new_window_size (1);
-  SIGRETURN (0);
-}
-#else
-static void
-get_new_window_size (from_sig)
-     int from_sig;
-{
-}
-#endif /* TIOCGWINSZ && SIGWINCH */
-
-void
-set_sigwinch_handler ()
-{
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
- old_winch = set_signal_handler (SIGWINCH, sigwinch_sighandler);
-#endif
-}
-
-void
-unset_sigwinch_handler ()
-{
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-  set_signal_handler (SIGWINCH, old_winch);
-#endif
-}
-
 /* Setup this shell to handle C-C, etc. */
 void
 initialize_job_signals ()
@@ -3188,7 +3534,6 @@ initialize_job_signals ()
       set_signal_handler (SIGTSTP, SIG_IGN);
       set_signal_handler (SIGTTOU, SIG_IGN);
       set_signal_handler (SIGTTIN, SIG_IGN);
-      set_sigwinch_handler ();
     }
   else if (job_control)
     {
@@ -3281,21 +3626,32 @@ delete_all_jobs (running_only)
 
   BLOCK_CHILD (set, oset);
 
-  if (job_slots)
+  /* XXX - need to set j_lastj, j_firstj appropriately if running_only != 0. */
+  if (js.j_jobslots)
     {
-      current_job = previous_job = NO_JOB;
-
-      for (i = 0; i < job_slots; i++)
-       if (jobs[i] && (running_only == 0 || (running_only && RUNNING(i))))
-         delete_job (i, 1);
+      js.j_current = js.j_previous = NO_JOB;
 
+      /* XXX could use js.j_firstj here */
+      for (i = 0; i < js.j_jobslots; i++)
+       {
+#if defined (DEBUG)
+         if (i < js.j_firstj && jobs[i])
+           itrace("delete_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
+         if (jobs[i] && (running_only == 0 || (running_only && RUNNING(i))))
+           delete_job (i, 1);
+       }
       if (running_only == 0)
        {
          free ((char *)jobs);
-         job_slots = 0;
+         js.j_jobslots = 0;
+         js.j_firstj = js.j_lastj = js.j_njobs = 0;
        }
     }
 
+  if (running_only == 0)
+    bgp_clear ();
+
   UNBLOCK_CHILD (oset);
 }
 
@@ -3310,9 +3666,10 @@ nohup_all_jobs (running_only)
 
   BLOCK_CHILD (set, oset);
 
-  if (job_slots)
+  if (js.j_jobslots)
     {
-      for (i = 0; i < job_slots; i++)
+      /* XXX could use js.j_firstj here */
+      for (i = 0; i < js.j_jobslots; i++)
        if (jobs[i] && (running_only == 0 || (running_only && RUNNING(i))))
          nohup_job (i);
     }
@@ -3326,10 +3683,18 @@ count_all_jobs ()
   int i, n;
   sigset_t set, oset;
 
+  /* This really counts all non-dead jobs. */
   BLOCK_CHILD (set, oset);
-  for (i = n = 0; i < job_slots; i++)
-    if (jobs[i] && DEADJOB(i) == 0)
-      n++;
+  /* XXX could use js.j_firstj here */
+  for (i = n = 0; i < js.j_jobslots; i++)
+    {
+#if defined (DEBUG)
+      if (i < js.j_firstj && jobs[i])
+       itrace("count_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
+      if (jobs[i] && DEADJOB(i) == 0)
+       n++;
+    }
   UNBLOCK_CHILD (oset);
   return n;
 }
@@ -3340,14 +3705,18 @@ mark_all_jobs_as_dead ()
   register int i;
   sigset_t set, oset;
 
-  if (job_slots == 0)
+  if (js.j_jobslots == 0)
     return;
 
   BLOCK_CHILD (set, oset);
 
-  for (i = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
     if (jobs[i])
-      jobs[i]->state = JDEAD;
+      {
+       jobs[i]->state = JDEAD;
+       js.j_ndead++;
+      }
 
   UNBLOCK_CHILD (oset);
 }
@@ -3360,10 +3729,10 @@ static void
 mark_dead_jobs_as_notified (force)
      int force;
 {
-  register int i, ndead;
+  register int i, ndead, ndeadproc;
   sigset_t set, oset;
 
-  if (job_slots == 0)
+  if (js.j_jobslots == 0)
     return;
 
   BLOCK_CHILD (set, oset);
@@ -3372,7 +3741,8 @@ mark_dead_jobs_as_notified (force)
      around; just run through the array. */
   if (force)
     {
-      for (i = 0; i < job_slots; i++)
+    /* XXX could use js.j_firstj here */
+      for (i = 0; i < js.j_jobslots; i++)
        {
          if (jobs[i] && DEADJOB (i) && (interactive_shell || (find_last_pid (i, 0) != last_asynchronous_pid)))
            jobs[i]->flags |= J_NOTIFIED;
@@ -3381,40 +3751,78 @@ mark_dead_jobs_as_notified (force)
       return;
     }
 
-  /* Mark enough dead jobs as notified to keep CHILD_MAX jobs left in the
-     array not marked as notified. */
+  /* Mark enough dead jobs as notified to keep CHILD_MAX processes left in the
+     array with the corresponding not marked as notified.  This is a better
+     way to avoid pid aliasing and reuse problems than keeping the POSIX-
+     mandated CHILD_MAX jobs around.  delete_job() takes care of keeping the
+     bgpids list regulated. */
           
   /* Count the number of dead jobs */
-  for (i = ndead = 0; i < job_slots; i++)
+  /* XXX could use js.j_firstj here */
+  for (i = ndead = ndeadproc = 0; i < js.j_jobslots; i++)
     {
+#if defined (DEBUG)
+      if (i < js.j_firstj && jobs[i])
+       itrace("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
       if (jobs[i] && DEADJOB (i))
-       ndead++;
+       {
+         ndead++;
+         ndeadproc += processes_in_job (i);
+       }
     }
 
-  if (child_max < 0)
-    child_max = getmaxchild ();
-  if (child_max < 0)
-    child_max = DEFAULT_CHILD_MAX;
+#ifdef DEBUG
+  if (ndeadproc != js.c_reaped)
+    itrace("mark_dead_jobs_as_notified: ndeadproc (%d) != js.c_reaped (%d)", ndeadproc, js.c_reaped);
+  if (ndead != js.j_ndead)
+    itrace("mark_dead_jobs_as_notified: ndead (%d) != js.j_ndead (%d)", ndead, js.j_ndead);
+#endif
+
+  if (js.c_childmax < 0)
+    js.c_childmax = getmaxchild ();
+  if (js.c_childmax < 0)
+    js.c_childmax = DEFAULT_CHILD_MAX;
 
-  /* Don't do anything if the number of dead jobs is less than CHILD_MAX and
-     we're not forcing a cleanup. */
-  if (ndead <= child_max)
+  /* Don't do anything if the number of dead processes is less than CHILD_MAX
+     and we're not forcing a cleanup. */
+  if (ndeadproc <= js.c_childmax)
     {
       UNBLOCK_CHILD (oset);
       return;
     }
 
+#if 0
+itrace("mark_dead_jobs_as_notified: child_max = %d ndead = %d ndeadproc = %d", js.c_childmax, ndead, ndeadproc);
+#endif
+
   /* Mark enough dead jobs as notified that we keep CHILD_MAX jobs in
      the list.  This isn't exactly right yet; changes need to be made
      to stop_pipeline so we don't mark the newer jobs after we've
-     created CHILD_MAX slots in the jobs array. */
-  for (i = 0; i < job_slots; i++)
+     created CHILD_MAX slots in the jobs array.  This needs to be
+     integrated with a way to keep the jobs array from growing without
+     bound.  Maybe we wrap back around to 0 after we reach some max
+     limit, and there are sufficient job slots free (keep track of total
+     size of jobs array (js.j_jobslots) and running count of number of jobs
+     in jobs array.  Then keep a job index corresponding to the `oldest job'
+     and start this loop there, wrapping around as necessary.  In effect,
+     we turn the list into a circular buffer. */
+  /* XXX could use js.j_firstj here */
+  for (i = 0; i < js.j_jobslots; i++)
     {
       if (jobs[i] && DEADJOB (i) && (interactive_shell || (find_last_pid (i, 0) != last_asynchronous_pid)))
        {
-         jobs[i]->flags |= J_NOTIFIED;
-         if (--ndead <= child_max)
+#if defined (DEBUG)
+         if (i < js.j_firstj && jobs[i])
+           itrace("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+#endif
+         /* If marking this job as notified would drop us down below
+            child_max, don't mark it so we can keep at least child_max
+            statuses.  XXX -- need to check what Posix actually says
+            about keeping statuses. */
+         if ((ndeadproc -= processes_in_job (i)) <= js.c_childmax)
            break;
+         jobs[i]->flags |= J_NOTIFIED;
        }
     }
 
@@ -3455,6 +3863,9 @@ without_job_control ()
 {
   stop_making_children ();
   start_pipeline ();
+#if defined (PGRP_PIPE)
+  pipe_close (pgrp_pipe);
+#endif
   delete_all_jobs (0);
   set_job_control (0);
 }
diff --git a/jobs.h b/jobs.h
index bcfaf18..93a42fb 100644 (file)
--- a/jobs.h
+++ b/jobs.h
@@ -1,6 +1,6 @@
 /* jobs.h -- structures and stuff used by the jobs.c file. */
 
-/* Copyright (C) 1993-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #define PS_DONE                0
 #define PS_RUNNING     1
 #define PS_STOPPED     2
+#define PS_RECYCLED    4
 
-/* Each child of the shell is remembered in a STRUCT PROCESS.  A chain of
-   such structures is a pipeline.  The chain is circular. */
+/* Each child of the shell is remembered in a STRUCT PROCESS.  A circular
+   chain of such structures is a pipeline. */
 typedef struct process {
   struct process *next;        /* Next process in the pipeline.  A circular chain. */
   pid_t pid;           /* Process ID. */
@@ -57,28 +58,44 @@ typedef struct process {
   char *command;       /* The particular program that is running. */
 } PROCESS;
 
-/* PRUNNING really means `not exited' */
-#define PRUNNING(p)    ((p)->running || WIFSTOPPED((p)->status))
+/* PALIVE really means `not exited' */
 #define PSTOPPED(p)    (WIFSTOPPED((p)->status))
-#define PDEADPROC(p)   ((p)->running == PS_DONE)
+#define PRUNNING(p)    ((p)->running == PS_RUNNING)
+#define PALIVE(p)      (PRUNNING(p) || PSTOPPED(p))
+
+#define PEXITED(p)     ((p)->running == PS_DONE)
+#if defined (RECYCLES_PIDS)
+#  define PRECYCLED(p) ((p)->running == PS_RECYCLED)
+#else
+#  define PRECYCLED(p) (0)
+#endif
+#define PDEADPROC(p)   (PEXITED(p) || PRECYCLED(p))
+
+#define get_job_by_jid(ind)    (jobs[(ind)])
 
 /* A description of a pipeline's state. */
 typedef enum { JRUNNING, JSTOPPED, JDEAD, JMIXED } JOB_STATE;
-#define JOBSTATE(job) (jobs[(job)]->state)
+#define JOBSTATE(job)  (jobs[(job)]->state)
+#define J_JOBSTATE(j)  ((j)->state)
 
 #define STOPPED(j)     (jobs[(j)]->state == JSTOPPED)
 #define RUNNING(j)     (jobs[(j)]->state == JRUNNING)
 #define DEADJOB(j)     (jobs[(j)]->state == JDEAD)
 
+#define INVALID_JOB(j) ((j) < 0 || (j) >= js.j_jobslots || get_job_by_jid(j) == 0)
+
 /* Values for the FLAGS field in the JOB struct below. */
 #define J_FOREGROUND 0x01 /* Non-zero if this is running in the foreground.  */
 #define J_NOTIFIED   0x02 /* Non-zero if already notified about job state.   */
 #define J_JOBCONTROL 0x04 /* Non-zero if this job started under job control. */
 #define J_NOHUP      0x08 /* Don't send SIGHUP to job if shell gets SIGHUP. */
+#define J_STATSAVED  0x10 /* A process in this job had had status saved via $! */
+#define J_ASYNC             0x20 /* Job was started asynchronously */
 
 #define IS_FOREGROUND(j)       ((jobs[j]->flags & J_FOREGROUND) != 0)
 #define IS_NOTIFIED(j)         ((jobs[j]->flags & J_NOTIFIED) != 0)
 #define IS_JOBCONTROL(j)       ((jobs[j]->flags & J_JOBCONTROL) != 0)
+#define IS_ASYNC(j)            ((jobs[j]->flags & J_ASYNC) != 0)
 
 typedef struct job {
   char *wd;       /* The working directory at time of invocation. */
@@ -93,6 +110,42 @@ typedef struct job {
 #endif /* JOB_CONTROL */
 } JOB;
 
+struct jobstats {
+  /* limits */
+  long c_childmax;
+  /* child process statistics */
+  int c_living;                /* running or stopped child processes */
+  int c_reaped;                /* exited child processes still in jobs list */
+  int c_injobs;                /* total number of child processes in jobs list */
+  /* child process totals */
+  int c_totforked;     /* total number of children this shell has forked */
+  int c_totreaped;     /* total number of children this shell has reaped */
+  /* job counters and indices */
+  int j_jobslots;      /* total size of jobs array */
+  int j_lastj;         /* last (newest) job allocated */
+  int j_firstj;                /* first (oldest) job allocated */
+  int j_njobs;         /* number of non-NULL jobs in jobs array */
+  int j_ndead;         /* number of JDEAD jobs in jobs array */
+  /* */
+  int j_current;       /* current job */
+  int j_previous;      /* previous job */
+  /* */
+  JOB *j_lastmade;     /* last job allocated by stop_pipeline */
+  JOB *j_lastasync;    /* last async job allocated by stop_pipeline */
+};
+
+struct pidstat {
+ struct pidstat *next;
+ pid_t pid;
+ int status;
+};
+
+struct bgpids {
+  struct pidstat *list;
+  struct pidstat *end;
+  int npid;
+};
+
 #define NO_JOB  -1     /* An impossible job array index. */
 #define DUP_JOB -2     /* A possible return value for get_job_spec (). */
 #define BAD_JOBSPEC -3 /* Bad syntax for job spec. */
@@ -106,12 +159,13 @@ extern pid_t fork (), getpid (), getpgrp ();
 #endif /* !HAVE_UNISTD_H */
 
 /* Stuff from the jobs.c file. */
+extern struct jobstats js;
+
 extern pid_t original_pgrp, shell_pgrp, pipeline_pgrp;
 extern pid_t last_made_pid, last_asynchronous_pid;
-extern int current_job, previous_job;
 extern int asynchronous_notification;
+
 extern JOB **jobs;
-extern int job_slots;
 
 extern void making_children __P((void));
 extern void stop_making_children __P((void));
@@ -164,9 +218,6 @@ extern int initialize_job_control __P((int));
 extern void initialize_job_signals __P((void));
 extern int give_terminal_to __P((pid_t, int));
 
-extern void set_sigwinch_handler __P((void));
-extern void unset_sigwinch_handler __P((void));
-
 extern void unfreeze_jobs_list __P((void));
 extern int set_job_control __P((int));
 extern void without_job_control __P((void));
@@ -176,6 +227,8 @@ extern void set_sigchld_handler __P((void));
 extern void ignore_tty_job_signals __P((void));
 extern void default_tty_job_signals __P((void));
 
+extern void init_job_stats __P((void));
+
 #if defined (JOB_CONTROL)
 extern int job_control;
 #endif
index cddfd3f..9bb4dd3 100644 (file)
@@ -4,7 +4,7 @@
 #                                                                 #
 ####################################################################
 #
-# Copyright (C) 1996 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.     
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index a62054e..9a2d833 100644 (file)
@@ -1,6 +1,6 @@
 /* glob.c -- file-name wildcard pattern matching for Bash.
 
-   Copyright (C) 1985-2002 Free Software Foundation, Inc.
+   Copyright (C) 1985-2005 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #  define FREE(x)      if (x) free (x)
 #endif
 
+/* Don't try to alloca() more than this much memory for `struct globval'
+   in glob_vector() */
+#ifndef ALLOCA_MAX
+#  define ALLOCA_MAX   100000
+#endif
+
 extern void throw_to_top_level __P((void));
 extern int test_eaccess __P((char *, int));
 
@@ -127,13 +133,13 @@ glob_pattern_p (pattern)
   int r;
 
   if (MB_CUR_MAX == 1)
-    return (internal_glob_pattern_p (pattern));
+    return (internal_glob_pattern_p ((unsigned char *)pattern));
 
   /* Convert strings to wide chars, and call the multibyte version. */
   n = xdupmbstowcs (&wpattern, NULL, pattern);
   if (n == (size_t)-1)
     /* Oops.  Invalid multibyte sequence.  Try it as single-byte sequence. */
-    return (internal_glob_pattern_p (pattern));
+    return (internal_glob_pattern_p ((unsigned char *)pattern));
 
   r = internal_glob_wpattern_p (wpattern);
   free (wpattern);
@@ -347,10 +353,14 @@ glob_vector (pat, dir, flags)
   register char **name_vector;
   register unsigned int i;
   int mflags;          /* Flags passed to strmatch (). */
+  int nalloca;
+  struct globval *firstmalloc, *tmplink;
 
   lastlink = 0;
   count = lose = skip = 0;
 
+  firstmalloc = 0;
+
   /* If PAT is empty, skip the loop, but return one (empty) filename. */
   if (pat == 0 || *pat == '\0')
     {
@@ -488,8 +498,18 @@ glob_vector (pat, dir, flags)
 
          if (strmatch (pat, dp->d_name, mflags) != FNM_NOMATCH)
            {
+             if (nalloca < ALLOCA_MAX)
+               {
+                 nextlink = (struct globval *) alloca (sizeof (struct globval));
+                 nalloca += sizeof (struct globval);
+               }
+             else
+               {
+                 nextlink = (struct globval *) malloc (sizeof (struct globval));
+                 if (firstmalloc == 0)
+                   firstmalloc = nextlink;
+               }
              nextname = (char *) malloc (D_NAMLEN (dp) + 1);
-             nextlink = (struct globval *) alloca (sizeof (struct globval));
              if (nextlink == 0 || nextname == 0)
                {
                  lose = 1;
@@ -515,11 +535,20 @@ glob_vector (pat, dir, flags)
   /* Have we run out of memory?         */
   if (lose)
     {
+      tmplink = 0;
+
       /* Here free the strings we have got.  */
       while (lastlink)
        {
+         if (firstmalloc)
+           {
+             if (lastlink == firstmalloc)
+               firstmalloc = 0;
+             tmplink = lastlink;
+           }
          free (lastlink->name);
          lastlink = lastlink->next;
+         FREE (tmplink);
        }
 
       QUIT;
@@ -528,13 +557,29 @@ glob_vector (pat, dir, flags)
     }
 
   /* Copy the name pointers from the linked list into the vector.  */
-  for (i = 0; i < count; ++i)
+  for (tmplink = lastlink, i = 0; i < count; ++i)
     {
-      name_vector[i] = lastlink->name;
-      lastlink = lastlink->next;
+      name_vector[i] = tmplink->name;
+      tmplink = tmplink->next;
     }
 
   name_vector[count] = NULL;
+
+  /* If we allocated some of the struct globvals, free them now. */
+  if (firstmalloc)
+    {
+      tmplink = 0;
+      while (lastlink)
+       {
+         tmplink = lastlink;
+         if (lastlink == firstmalloc)
+           lastlink = firstmalloc = 0;
+         else
+           lastlink = lastlink->next;
+         free (tmplink);
+       }
+    }
+       
   return (name_vector);
 }
 
index 8010df7..253cac9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
    
index a8b70f7..6e8cf3a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
    
@@ -358,7 +358,7 @@ BRACKMATCH (p, test, flags)
                {
                  bcopy (p + 1, ccname, (close - p - 1) * sizeof (CHAR));
                  *(ccname + (close - p - 1)) = L('\0');
-                 pc = IS_CCLASS (test, ccname);
+                 pc = IS_CCLASS (test, (XCHAR *)ccname);
                }
              if (pc == -1)
                pc = 0;
@@ -522,11 +522,11 @@ PATSCAN (string, end, delim)
      CHAR *string, *end;
      INT delim;
 {
-  int pnest, bnest;
+  int pnest, bnest, skip;
   INT cchar;
   CHAR *s, c, *bfirst;
 
-  pnest = bnest = 0;
+  pnest = bnest = skip = 0;
   cchar = 0;
   bfirst = NULL;
 
@@ -534,8 +534,17 @@ PATSCAN (string, end, delim)
     {
       if (s >= end)
        return (s);
+      if (skip)
+       {
+         skip = 0;
+         continue;
+       }
       switch (c)
        {
+       case L('\\'):
+         skip = 1;
+         break;
+
        case L('\0'):
          return ((CHAR *)NULL);
 
index d0b7403..12fde3d 100644 (file)
@@ -1,7 +1,7 @@
 /* strmatch.c -- ksh-like extended pattern matching for the shell and filename
                globbing. */
 
-/* Copyright (C) 1991-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
    
@@ -93,14 +93,16 @@ collequiv (c1, c2)
 
 static int
 collsym (s, len)
-     char *s;
+     CHAR *s;
      int len;
 {
   register struct _collsym *csp;
+  char *x;
 
+  x = (char *)s;
   for (csp = posix_collsyms; csp->name; csp++)
     {
-      if (STREQN(csp->name, s, len) && csp->name[len] == '\0')
+      if (STREQN(csp->name, x, len) && csp->name[len] == '\0')
        return (csp->code);
     }
   if (len == 1)
@@ -366,7 +368,7 @@ xstrmatch (pattern, string, flags)
   wchar_t *wpattern, *wstring;
 
   if (MB_CUR_MAX == 1)
-    return (internal_strmatch (pattern, string, flags));
+    return (internal_strmatch ((unsigned char *)pattern, (unsigned char *)string, flags));
 
   n = xdupmbstowcs (&wpattern, NULL, pattern);
   if (n == (size_t)-1 || n == (size_t)-2)
index f1703bc..f8c29b9 100644 (file)
@@ -1,6 +1,6 @@
 /* xmbsrtowcs.c -- replacement function for mbsrtowcs */
 
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2004 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -54,7 +54,7 @@ xmbsrtowcs (dest, src, len, pstate)
       ps = &local_state;
     }
 
-  n = strlen(*src);
+  n = strlen (*src);
 
   if (dest == NULL)
     {
@@ -62,19 +62,22 @@ xmbsrtowcs (dest, src, len, pstate)
       const char *mbs;
       mbstate_t psbuf;
 
+      /* It doesn't matter if malloc fails here, since mbsrtowcs should do
+        the right thing with a NULL first argument. */
       wsbuf = (wchar_t *) malloc ((n + 1) * sizeof(wchar_t));
       mbs = *src;
       psbuf = *ps;
 
       wclength = mbsrtowcs (wsbuf, &mbs, n, &psbuf);
 
-      free (wsbuf);
+      if (wsbuf)
+       free (wsbuf);
       return wclength;
     }
       
   for (wclength = 0; wclength < len; wclength++, dest++)
     {
-      if(mbsinit(ps))
+      if (mbsinit(ps))
        {
          if (**src == '\0')
            {
@@ -166,10 +169,11 @@ xdupmbstowcs (destp, indicesp, src)
 
   p = src;
   wcnum = 0;
-  do {
+  do
+    {
       size_t mblength; /* Byte length of one multibyte character. */
 
-      if(mbsinit (&state))
+      if (mbsinit (&state))
        {
          if (*p == '\0')
            {
@@ -230,7 +234,8 @@ xdupmbstowcs (destp, indicesp, src)
       wsbuf[wcnum - 1] = wc;
       indices[wcnum - 1] = (char *)p;
       p += mblength;
-  } while (MB_NULLWCH (wc) == 0);
+    }
+  while (MB_NULLWCH (wc) == 0);
 
   /* Return the length of the wide character string, not including `\0'. */
   *destp = wsbuf;
index 70bafc9..8520ed2 100644 (file)
@@ -51,12 +51,14 @@ RANLIB = @RANLIB@
 YACC = @INTLBISON@ -y -d
 YFLAGS = --name-prefix=__gettext
 
+LOCAL_DEFS = @LOCAL_DEFS@
+
 DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
 -DLIBDIR=\"$(prefix)/libdata\" -DIN_LIBINTL \
 -DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
 -Dset_relocation_prefix=libintl_set_relocation_prefix \
 -Drelocate=libintl_relocate \
--DDEPENDS_ON_LIBICONV=1 @DEFS@
+-DDEPENDS_ON_LIBICONV=1 @DEFS@ @LOCAL_DEFS@
 CPPFLAGS = @CPPFLAGS@
 CFLAGS = @CFLAGS@
 LDFLAGS = @LDFLAGS@
index f6edb95..c7e696a 100644 (file)
@@ -134,6 +134,10 @@ extern int errno;
 
 /* @@ end of prolog @@ */
 
+#if defined (SHELL) && !defined (HAVE_GETCWD)
+#  define HAVE_GETCWD
+#endif
+
 #ifdef _LIBC
 /* Rename the non ANSI C functions.  This is required by the standard
    because some ANSI C functions will require linking with this object
@@ -417,6 +421,10 @@ static int enable_secure;
     }
 #endif
 
+#ifndef HAVE_RAISE
+#  define raise(x)     kill (getpid (), (x))
+#endif
+
 /* Get the function to evaluate the plural expression.  */
 #include "eval-plural.h"
 
index d013dc7..b2c785b 100644 (file)
@@ -1,7 +1,7 @@
 # Skeleton Makefile for the GNU malloc code
 #
 #
-# Copyright (C) 1996 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -115,6 +115,7 @@ malloc.o: $(BUILD_DIR)/config.h $(topdir)/bashtypes.h getpagesize.h
 xmalloc.o: $(BUILD_DIR)/config.h $(BASHINCDIR)/ansi_stdlib.h
 trace.o: ${BUILD_DIR}/config.h
 table.o: ${BUILD_DIR}/config.h
+watch.o: ${BUILD_DIR}/config.h
 
 malloc.o: ${srcdir}/imalloc.h ${srcdir}/mstats.h
 malloc.o: ${srcdir}/table.h ${srcdir}/watch.h
index 60cbfab..f9a08da 100644 (file)
@@ -1,6 +1,6 @@
 /* malloc.c - dynamic memory allocation for bash. */
 
-/*  Copyright (C) 1985-2003 Free Software Foundation, Inc.
+/*  Copyright (C) 1985-2005 Free Software Foundation, Inc.
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -221,7 +221,7 @@ typedef union _malloc_guard {
 
 static union mhead *nextf[NBUCKETS];
 
-/* busy[i] is nonzero while allocation of block size i is in progress.  */
+/* busy[i] is nonzero while allocation or free of block size i is in progress. */
 
 static char busy[NBUCKETS];
 
@@ -246,7 +246,7 @@ static unsigned long binsizes[NBUCKETS] = {
 static PTR_T internal_malloc __P((size_t, const char *, int, int));
 static PTR_T internal_realloc __P((PTR_T, size_t, const char *, int, int));
 static void internal_free __P((PTR_T, const char *, int, int));
-static PTR_T internal_memalign __P((unsigned int, size_t, const char *, int, int));
+static PTR_T internal_memalign __P((size_t, size_t, const char *, int, int));
 #ifndef NO_CALLOC
 static PTR_T internal_calloc __P((size_t, size_t, const char *, int, int));
 static void internal_cfree __P((PTR_T, const char *, int, int));
@@ -323,7 +323,8 @@ xbotch (mem, e, s, file, line)
 
 /* Coalesce two adjacent free blocks off the free list for size NU - 1,
    as long as we can find two adjacent free blocks.  nextf[NU -1] is
-   assumed to not be busy; the caller (morecore()) checks for this. */
+   assumed to not be busy; the caller (morecore()) checks for this. 
+   BUSY[NU] must be set to 1. */
 static void
 bcoalesce (nu)
      register int nu;
@@ -333,9 +334,10 @@ bcoalesce (nu)
   unsigned long siz;
 
   nbuck = nu - 1;
-  if (nextf[nbuck] == 0)
+  if (nextf[nbuck] == 0 || busy[nbuck])
     return;
 
+  busy[nbuck] = 1;
   siz = binsize (nbuck);
 
   mp2 = mp1 = nextf[nbuck];
@@ -346,22 +348,27 @@ bcoalesce (nu)
       mp1 = mp;
       mp = CHAIN (mp);
     }
+
   if (mp == 0)
-    return;
+    {
+      busy[nbuck] = 0;
+      return;
+    }
 
   /* OK, now we have mp1 pointing to the block we want to add to nextf[NU].
      CHAIN(mp2) must equal mp1.  Check that mp1 and mp are adjacent. */
   if (mp2 != mp1 && CHAIN(mp2) != mp1)
-    xbotch ((PTR_T)0, 0, "bcoalesce: CHAIN(mp2) != mp1", (char *)NULL, 0);
+    {
+      busy[nbuck] = 0;
+      xbotch ((PTR_T)0, 0, "bcoalesce: CHAIN(mp2) != mp1", (char *)NULL, 0);
+    }
 
 #ifdef MALLOC_DEBUG
   if (CHAIN (mp1) != (union mhead *)((char *)mp1 + siz))
-    return;    /* not adjacent */
-#endif
-
-#ifdef MALLOC_STATS
-  _mstats.tbcoalesce++;
-  _mstats.ncoalesce[nbuck]++;
+    {
+      busy[nbuck] = 0;
+      return;  /* not adjacent */
+    }
 #endif
 
   /* Since they are adjacent, remove them from the free list */
@@ -369,6 +376,12 @@ bcoalesce (nu)
     nextf[nbuck] = CHAIN (mp);
   else
     CHAIN (mp2) = CHAIN (mp);
+  busy[nbuck] = 0;
+
+#ifdef MALLOC_STATS
+  _mstats.tbcoalesce++;
+  _mstats.ncoalesce[nbuck]++;
+#endif
 
   /* And add the combined two blocks to nextf[NU]. */
   mp1->mh_alloc = ISFREE;
@@ -380,7 +393,7 @@ bcoalesce (nu)
 /* Split a block at index > NU (but less than SPLIT_MAX) into a set of
    blocks of the correct size, and attach them to nextf[NU].  nextf[NU]
    is assumed to be empty.  Must be called with signals blocked (e.g.,
-   by morecore()). */
+   by morecore()).  BUSY[NU] must be set to 1. */
 static void
 bsplit (nu)
      register int nu;
@@ -416,6 +429,12 @@ bsplit (nu)
   /* XXX might want to split only if nextf[nbuck] has >= 2 blocks free
      and nbuck is below some threshold. */
 
+  /* Remove the block from the chain of larger blocks. */
+  busy[nbuck] = 1;
+  mp = nextf[nbuck];
+  nextf[nbuck] = CHAIN (mp);
+  busy[nbuck] = 0;
+
 #ifdef MALLOC_STATS
   _mstats.tbsplit++;
   _mstats.nsplit[nbuck]++;
@@ -425,10 +444,6 @@ bsplit (nu)
   siz = binsize (nu);
   nblks = binsize (nbuck) / siz;
 
-  /* Remove the block from the chain of larger blocks. */
-  mp = nextf[nbuck];
-  nextf[nbuck] = CHAIN (mp);
-
   /* Split the block and put it on the requested chain. */
   nextf[nu] = mp;
   while (1)
@@ -442,6 +457,49 @@ bsplit (nu)
   CHAIN (mp) = 0;
 }
 
+/* Take the memory block MP and add it to a chain < NU.  NU is the right bucket,
+   but is busy.  This avoids memory orphaning. */
+static void
+xsplit (mp, nu)
+     union mhead *mp;
+     int nu;
+{
+  union mhead *nh;
+  int nbuck, nblks, split_max;
+  unsigned long siz;
+
+  nbuck = nu - 1;
+  while (nbuck >= SPLIT_MIN && busy[nbuck])
+    nbuck--;
+  if (nbuck < SPLIT_MIN)
+    return;
+
+#ifdef MALLOC_STATS
+  _mstats.tbsplit++;
+  _mstats.nsplit[nu]++;
+#endif
+
+  /* Figure out how many blocks we'll get. */
+  siz = binsize (nu);                  /* original block size */
+  nblks = siz / binsize (nbuck);       /* should be 2 most of the time */
+
+  /* And add it to nextf[nbuck] */
+  siz = binsize (nbuck);               /* XXX - resetting here */
+  nh = mp;
+  while (1)
+    {
+      mp->mh_alloc = ISFREE;
+      mp->mh_index = nbuck;
+      if (--nblks <= 0) break;
+      CHAIN (mp) = (union mhead *)((char *)mp + siz);
+      mp = (union mhead *)((char *)mp + siz);
+    }
+  busy[nbuck] = 1;
+  CHAIN (mp) = nextf[nbuck];
+  nextf[nbuck] = nh;
+  busy[nbuck] = 0;
+}
+
 static void
 block_signals (setp, osetp)
      sigset_t *setp, *osetp;
@@ -490,9 +548,10 @@ lesscore (nu)                      /* give system back some memory */
   _mstats.nlesscore[nu]++;
 #endif
 }
-  
+
+/* Ask system for more memory; add to NEXTF[NU].  BUSY[NU] must be set to 1. */  
 static void
-morecore (nu)                  /* ask system for more memory */
+morecore (nu)
      register int nu;          /* size index to get more of  */
 {
   register union mhead *mp;
@@ -531,7 +590,7 @@ morecore (nu)                       /* ask system for more memory */
     }
 
   /* Try to coalesce two adjacent blocks from the free list on nextf[nu - 1],
-     if we can, and we're withing the range of the block coalescing limits. */
+     if we can, and we're within the range of the block coalescing limits. */
   if (nu >= COMBINE_MIN && nu < COMBINE_MAX && busy[nu - 1] == 0 && nextf[nu - 1])
     {
       bcoalesce (nu);
@@ -852,9 +911,8 @@ internal_free (mem, file, line, flags)
     {
       /* If above LESSCORE_FRC, give back unconditionally.  This should be set
         high enough to be infrequently encountered.  If between LESSCORE_MIN
-        and LESSCORE_FRC, call lesscore if the bucket is marked as busy (in
-        which case we would punt below and leak memory) or if there's already
-        a block on the free list. */
+        and LESSCORE_FRC, call lesscore if the bucket is marked as busy or if
+        there's already a block on the free list. */
       if ((nunits >= LESSCORE_FRC) || busy[nunits] || nextf[nunits] != 0)
        {
          lesscore (nunits);
@@ -869,11 +927,14 @@ internal_free (mem, file, line, flags)
 #endif
 
   ASSERT (nunits < NBUCKETS);
-  p->mh_alloc = ISFREE;
 
   if (busy[nunits] == 1)
-    return;    /* this is bogus, but at least it won't corrupt the chains */
+    {
+      xsplit (p, nunits);      /* split block and add to different chain */
+      goto free_return;
+    }
 
+  p->mh_alloc = ISFREE;
   /* Protect against signal handlers calling malloc.  */
   busy[nunits] = 1;
   /* Put this block on the free list.  */
@@ -1026,7 +1087,7 @@ internal_realloc (mem, n, file, line, flags)
 
 static PTR_T
 internal_memalign (alignment, size, file, line, flags)
-     unsigned int alignment;
+     size_t alignment;
      size_t size;
      const char *file;
      int line, flags;
@@ -1145,7 +1206,7 @@ sh_free (mem, file, line)
 
 PTR_T
 sh_memalign (alignment, size, file, line)
-     unsigned int alignment;
+     size_t alignment;
      size_t size;
      const char *file;
      int line;
@@ -1212,7 +1273,7 @@ free (mem)
 
 PTR_T
 memalign (alignment, size)
-     unsigned int alignment;
+     size_t alignment;
      size_t size;
 {
   return internal_memalign (alignment, size, (char *)NULL, 0, 0);
index 812bb41..e51e92b 100644 (file)
@@ -43,7 +43,7 @@ extern PTR_T sh_malloc __P((size_t, const char *, int));
 extern PTR_T sh_realloc __P((PTR_T, size_t, const char *, int));
 extern void sh_free __P((PTR_T, const char *, int));
 
-extern PTR_T sh_memalign __P((unsigned int, size_t, const char *, int));
+extern PTR_T sh_memalign __P((size_t, size_t, const char *, int));
 
 extern PTR_T sh_calloc __P((size_t, size_t, const char *, int));
 extern void sh_cfree __P((PTR_T, const char *, int));
index 9dc34df..79f4668 100644 (file)
@@ -22,6 +22,9 @@
 #endif
 
 #include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif
 
 #include "imalloc.h"
 
@@ -29,10 +32,10 @@ extern int malloc_trace;
 
 static int _mtrace_verbose = 0;
 
-extern FILE *_imalloc_fopen __P((char *, char *, char *, char *, size_t));
-
 #ifdef MALLOC_TRACE
 
+extern FILE *_imalloc_fopen __P((char *, char *, char *, char *, size_t));
+
 FILE *_mtrace_fp = NULL;
 extern char _malloc_trace_buckets[];
 
index a118304..98169e4 100644 (file)
@@ -4,7 +4,7 @@
 #                                                                          #
 #############################################################################
 
-# Copyright (C) 1994 Free Software Foundation, Inc.
+# Copyright (C) 1994-2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 15d0e4e..7559d32 100644 (file)
@@ -1,6 +1,6 @@
 /* bind.c -- key binding and startup file support for the readline library. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -77,6 +77,9 @@ static char *_rl_read_file PARAMS((char *, size_t *));
 static void _rl_init_file_error PARAMS((const char *));
 static int _rl_read_init_file PARAMS((const char *, int));
 static int glean_key_from_name PARAMS((char *));
+static int find_boolean_var PARAMS((const char *));
+
+static char *_rl_get_string_variable_value PARAMS((const char *));
 static int substring_member_of_array PARAMS((char *, const char **));
 
 static int currently_reading_init_file;
@@ -341,7 +344,7 @@ rl_generic_bind (type, keyseq, data, map)
   k.function = 0;
 
   /* If no keys to bind to, exit right away. */
-  if (!keyseq || !*keyseq)
+  if (keyseq == 0 || *keyseq == 0)
     {
       if (type == ISMACR)
        free (data);
@@ -369,7 +372,7 @@ rl_generic_bind (type, keyseq, data, map)
       if (ic < 0 || ic >= KEYMAP_SIZE)
        return -1;
 
-      if (_rl_convert_meta_chars_to_ascii && META_CHAR (ic))
+      if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
        {
          ic = UNMETA (ic);
          if (map[ESC].type == ISKMAP)
@@ -460,7 +463,14 @@ rl_translate_keyseq (seq, array, len)
              else if (c == 'M')
                {
                  i++;
-                 array[l++] = ESC;     /* ESC is meta-prefix */
+                 /* XXX - should obey convert-meta setting? */
+                 if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP)
+                   array[l++] = ESC;   /* ESC is meta-prefix */
+                 else
+                   {
+                     i++;
+                     array[l++] = META (seq[i]);
+                   }
                }
              else if (c == 'C')
                {
@@ -1185,9 +1195,9 @@ rl_parse_and_bind (string)
   /* If this is a command to set a variable, then do that. */
   if (_rl_stricmp (string, "set") == 0)
     {
-      char *var = string + i;
-      char *value;
+      char *var, *value, *e;
 
+      var = string + i;
       /* Make VAR point to start of variable name. */
       while (*var && whitespace (*var)) var++;
 
@@ -1198,6 +1208,20 @@ rl_parse_and_bind (string)
        *value++ = '\0';
       while (*value && whitespace (*value)) value++;
 
+      /* Strip trailing whitespace from values to boolean variables.  Temp
+        fix until I get a real quoted-string parser here. */
+      i = find_boolean_var (var);
+      if (i >= 0)
+       {
+         /* remove trailing whitespace */
+         e = value + strlen (value) - 1;
+         while (e >= value && whitespace (*e))
+           e--;
+         e++;          /* skip back to whitespace or EOS */
+         if (*e && e >= value)
+           *e = '\0';
+       }
+
       rl_variable_bind (var, value);
       return 0;
     }
@@ -1218,8 +1242,9 @@ rl_parse_and_bind (string)
      the quoted string delimiter, like the shell. */
   if (*funname == '\'' || *funname == '"')
     {
-      int delimiter = string[i++], passc;
+      int delimiter, passc;
 
+      delimiter = string[i++];
       for (passc = 0; c = string[i]; i++)
        {
          if (passc)
@@ -1355,6 +1380,7 @@ static struct {
   int *value;
   int flags;
 } boolean_varlist [] = {
+  { "bind-tty-special-chars",  &_rl_bind_stty_chars,           0 },
   { "blink-matching-paren",    &rl_blink_matching_paren,       V_SPECIAL },
   { "byte-oriented",           &rl_byte_oriented,              0 },
   { "completion-ignore-case",  &_rl_completion_case_fold,      0 },
@@ -1468,13 +1494,34 @@ find_string_var (name)
    values result in 0 (false). */
 static int
 bool_to_int (value)
-     char *value;
+     const char *value;
 {
   return (value == 0 || *value == '\0' ||
                (_rl_stricmp (value, "on") == 0) ||
                (value[0] == '1' && value[1] == '\0'));
 }
 
+char *
+rl_variable_value (name)
+     const char *name;
+{
+  register int i;
+  int  v;
+  char *ret;
+
+  /* Check for simple variables first. */
+  i = find_boolean_var (name);
+  if (i >= 0)
+    return (*boolean_varlist[i].value ? "on" : "off");
+
+  i = find_string_var (name);
+  if (i >= 0)
+    return (_rl_get_string_variable_value (string_varlist[i].name));
+
+  /* Unknown variable names return NULL. */
+  return 0;
+}
+
 int
 rl_variable_bind (name, value)
      const char *name, *value;
@@ -2117,12 +2164,68 @@ rl_dump_macros (count, key)
   return (0);
 }
 
+static char *
+_rl_get_string_variable_value (name)
+     const char *name;
+{
+  static char numbuf[32];
+  char *ret;
+  int n;
+
+  if (_rl_stricmp (name, "bell-style") == 0)
+    {
+      switch (_rl_bell_preference)
+       {
+         case NO_BELL:
+           return "none";
+         case VISIBLE_BELL:
+           return "visible";
+         case AUDIBLE_BELL:
+         default:
+           return "audible";
+       }
+    }
+  else if (_rl_stricmp (name, "comment-begin") == 0)
+    return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
+  else if (_rl_stricmp (name, "completion-query-items") == 0)
+    {
+      sprintf (numbuf, "%d", rl_completion_query_items);
+      return (numbuf);
+    }
+  else if (_rl_stricmp (name, "editing-mode") == 0)
+    return (rl_get_keymap_name_from_edit_mode ());
+  else if (_rl_stricmp (name, "isearch-terminators") == 0)
+    {
+      if (_rl_isearch_terminators == 0)
+       return 0;
+      ret = _rl_untranslate_macro_value (_rl_isearch_terminators);
+      if (ret)
+       {
+         strncpy (numbuf, ret, sizeof (numbuf) - 1);
+         free (ret);
+         numbuf[sizeof(numbuf) - 1] = '\0';
+       }
+      else
+       numbuf[0] = '\0';
+      return numbuf;
+    }
+  else if (_rl_stricmp (name, "keymap") == 0)
+    {
+      ret = rl_get_keymap_name (_rl_keymap);
+      if (ret == 0)
+       ret = rl_get_keymap_name_from_edit_mode ();
+      return (ret ? ret : "none");
+    }
+  else
+    return (0);
+}
+
 void
 rl_variable_dumper (print_readably)
      int print_readably;
 {
   int i;
-  const char *kname;
+  char *v;
 
   for (i = 0; boolean_varlist[i].name; i++)
     {
@@ -2134,63 +2237,16 @@ rl_variable_dumper (print_readably)
                               *boolean_varlist[i].value ? "on" : "off");
     }
 
-  /* bell-style */
-  switch (_rl_bell_preference)
-    {
-    case NO_BELL:
-      kname = "none"; break;
-    case VISIBLE_BELL:
-      kname = "visible"; break;
-    case AUDIBLE_BELL:
-    default:
-      kname = "audible"; break;
-    }
-  if (print_readably)
-    fprintf (rl_outstream, "set bell-style %s\n", kname);
-  else
-    fprintf (rl_outstream, "bell-style is set to `%s'\n", kname);
-
-  /* comment-begin */
-  if (print_readably)
-    fprintf (rl_outstream, "set comment-begin %s\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
-  else
-    fprintf (rl_outstream, "comment-begin is set to `%s'\n", _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT);
-
-  /* completion-query-items */
-  if (print_readably)
-    fprintf (rl_outstream, "set completion-query-items %d\n", rl_completion_query_items);
-  else
-    fprintf (rl_outstream, "completion-query-items is set to `%d'\n", rl_completion_query_items);
-
-  /* editing-mode */
-  if (print_readably)
-    fprintf (rl_outstream, "set editing-mode %s\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
-  else
-    fprintf (rl_outstream, "editing-mode is set to `%s'\n", (rl_editing_mode == emacs_mode) ? "emacs" : "vi");
-
-  /* isearch-terminators */
-  if (_rl_isearch_terminators)
+  for (i = 0; string_varlist[i].name; i++)
     {
-      char *disp;
-
-      disp = _rl_untranslate_macro_value (_rl_isearch_terminators);
-
+      v = _rl_get_string_variable_value (string_varlist[i].name);
+      if (v == 0)      /* _rl_isearch_terminators can be NULL */
+       continue;
       if (print_readably)
-       fprintf (rl_outstream, "set isearch-terminators \"%s\"\n", disp);
+        fprintf (rl_outstream, "set %s %s\n", string_varlist[i].name, v);
       else
-       fprintf (rl_outstream, "isearch-terminators is set to \"%s\"\n", disp);
-
-      free (disp);
+        fprintf (rl_outstream, "%s is set to `%s'\n", string_varlist[i].name, v);
     }
-
-  /* keymap */
-  kname = rl_get_keymap_name (_rl_keymap);
-  if (kname == 0)
-    kname = rl_get_keymap_name_from_edit_mode ();
-  if (print_readably)
-    fprintf (rl_outstream, "set keymap %s\n", kname ? kname : "none");
-  else
-    fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none");
 }
 
 /* Print all of the current variables and their values to
index 5b05ea5..9120969 100644 (file)
@@ -1,6 +1,6 @@
 /* callback.c -- functions to use readline as an X `callback' mechanism. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
 #include "readline.h"
 #include "rlprivate.h"
 
+/* Private data for callback registration functions.  See comments in
+   rl_callback_read_char for more details. */
+_rl_callback_func_t *_rl_callback_func = 0;
+_rl_callback_generic_arg *_rl_callback_data = 0;
+
 /* **************************************************************** */
 /*                                                                 */
-/*                     Callback Readline Functions                 */
+/*                     Callback Readline Functions              */
 /*                                                                 */
 /* **************************************************************** */
 
@@ -72,7 +77,8 @@ _rl_callback_newline ()
     {
       in_handler = 1;
 
-      (*rl_prep_term_function) (_rl_meta_flag);
+      if (rl_prep_term_function)
+       (*rl_prep_term_function) (_rl_meta_flag);
 
 #if defined (HANDLE_SIGNALS)
       rl_set_signals ();
@@ -89,6 +95,7 @@ rl_callback_handler_install (prompt, linefunc)
      rl_vcpfunc_t *linefunc;
 {
   rl_set_prompt (prompt);
+  RL_SETSTATE (RL_STATE_CALLBACK);
   rl_linefunc = linefunc;
   _rl_callback_newline ();
 }
@@ -98,7 +105,8 @@ void
 rl_callback_read_char ()
 {
   char *line;
-  int eof;
+  int eof, jcode;
+  static procenv_t olevel;
 
   if (rl_linefunc == NULL)
     {
@@ -106,7 +114,79 @@ rl_callback_read_char ()
       abort ();
     }
 
-  eof = readline_internal_char ();
+  memcpy ((void *)olevel, (void *)readline_top_level, sizeof (procenv_t));
+  jcode = setjmp (readline_top_level);
+  if (jcode)
+    {
+      (*rl_redisplay_function) ();
+      _rl_want_redisplay = 0;
+      memcpy ((void *)readline_top_level, (void *)olevel, sizeof (procenv_t));
+      return;
+    }
+
+  if  (RL_ISSTATE (RL_STATE_ISEARCH))
+    {
+      eof = _rl_isearch_callback (_rl_iscxt);
+      if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))
+       rl_callback_read_char ();
+
+      return;
+    }
+  else if  (RL_ISSTATE (RL_STATE_NSEARCH))
+    {
+      eof = _rl_nsearch_callback (_rl_nscxt);
+      return;
+    }
+  else if (RL_ISSTATE (RL_STATE_NUMERICARG))
+    {
+      eof = _rl_arg_callback (_rl_argcxt);
+      if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING))
+       rl_callback_read_char ();
+      /* XXX - this should handle _rl_last_command_was_kill better */
+      else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
+       _rl_internal_char_cleanup ();
+
+      return;
+    }
+  else if (RL_ISSTATE (RL_STATE_MULTIKEY))
+    {
+      eof = _rl_dispatch_callback (_rl_kscxt); /* For now */
+      while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED))
+       eof = _rl_dispatch_callback (_rl_kscxt);
+      if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0)
+       {
+         _rl_internal_char_cleanup ();
+         _rl_want_redisplay = 1;
+       }
+    }
+  else if (_rl_callback_func)
+    {
+      /* This allows functions that simply need to read an additional character
+        (like quoted-insert) to register a function to be called when input is
+        available.  _rl_callback_data is simply a pointer to a struct that has
+        the argument count originally passed to the registering function and
+        space for any additional parameters.  */
+      eof = (*_rl_callback_func) (_rl_callback_data);
+      /* If the function `deregisters' itself, make sure the data is cleaned
+        up. */
+      if (_rl_callback_func == 0)
+       {
+         if (_rl_callback_data)        
+           {
+             _rl_callback_data_dispose (_rl_callback_data);
+             _rl_callback_data = 0;
+           }
+         _rl_internal_char_cleanup ();
+       }
+    }
+  else
+    eof = readline_internal_char ();
+
+  if (rl_done == 0 && _rl_want_redisplay)
+    {
+      (*rl_redisplay_function) ();
+      _rl_want_redisplay = 0;
+    }
 
   /* We loop in case some function has pushed input back with rl_execute_next. */
   for (;;)
@@ -115,7 +195,8 @@ rl_callback_read_char ()
        {
          line = readline_internal_teardown (eof);
 
-         (*rl_deprep_term_function) ();
+         if (rl_deprep_term_function)
+           (*rl_deprep_term_function) ();
 #if defined (HANDLE_SIGNALS)
          rl_clear_signals ();
 #endif
@@ -131,10 +212,10 @@ rl_callback_read_char ()
          if (in_handler == 0 && rl_linefunc)
            _rl_callback_newline ();
        }
-      if (rl_pending_input || _rl_pushed_input_available ())
+      if (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT))
        eof = readline_internal_char ();
       else
-        break;
+       break;
     }
 }
 
@@ -143,14 +224,37 @@ void
 rl_callback_handler_remove ()
 {
   rl_linefunc = NULL;
+  RL_UNSETSTATE (RL_STATE_CALLBACK);
   if (in_handler)
     {
       in_handler = 0;
-      (*rl_deprep_term_function) ();
+      if (rl_deprep_term_function)
+       (*rl_deprep_term_function) ();
 #if defined (HANDLE_SIGNALS)
       rl_clear_signals ();
 #endif
     }
 }
 
+_rl_callback_generic_arg *
+_rl_callback_data_alloc (count)
+     int count;
+{
+  _rl_callback_generic_arg *arg;
+
+  arg = (_rl_callback_generic_arg *)xmalloc (sizeof (_rl_callback_generic_arg));
+  arg->count = count;
+
+  arg->i1 = arg->i2 = 0;
+
+  return arg;
+}
+
+void _rl_callback_data_dispose (arg)
+     _rl_callback_generic_arg *arg;
+{
+  if (arg)
+    free (arg);
+}
+
 #endif
index cb04c98..def3a11 100644 (file)
@@ -86,6 +86,8 @@
 /* Some systems define these; we want our definitions. */
 #undef ISPRINT
 
+/* Beware:  these only work with single-byte ASCII characters. */
+
 #define ISALNUM(c)     (IN_CTYPE_DOMAIN (c) && isalnum (c))
 #define ISALPHA(c)     (IN_CTYPE_DOMAIN (c) && isalpha (c))
 #define ISDIGIT(c)     (IN_CTYPE_DOMAIN (c) && isdigit (c))
index d212f61..d93c15a 100644 (file)
@@ -1,6 +1,6 @@
 /* complete.c -- filename completion for readline. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -48,7 +48,9 @@
 extern int errno;
 #endif /* !errno */
 
+#if defined (HAVE_PWD_H)
 #include <pwd.h>
+#endif
 
 #include "posixdir.h"
 #include "posixstat.h"
@@ -79,9 +81,9 @@ typedef int QSFUNC ();
 
 /* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
    defined. */
-#if !defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)
+#if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE))
 extern struct passwd *getpwent PARAMS((void));
-#endif /* !HAVE_GETPW_DECLS || _POSIX_SOURCE */
+#endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */
 
 /* If non-zero, then this is the address of a function to call when
    completing a word would normally display the list of possible matches.
@@ -206,7 +208,8 @@ int rl_completion_type = 0;
 
 /* Up to this many items will be displayed in response to a
    possible-completions call.  After that, we ask the user if
-   she is sure she wants to see them all. */
+   she is sure she wants to see them all.  A negative value means
+   don't ask. */
 int rl_completion_query_items = 100;
 
 int _rl_page_completions = 1;
@@ -621,6 +624,8 @@ fnprint (to_print)
   mbstate_t ps;
   const char *end;
   size_t tlen;
+  int width, w;
+  wchar_t wc;
 
   end = to_print + strlen (to_print) + 1;
   memset (&ps, 0, sizeof (mbstate_t));
@@ -653,21 +658,28 @@ fnprint (to_print)
       else
        {
 #if defined (HANDLE_MULTIBYTE)
-         tlen = mbrlen (s, end - s, &ps);
+         tlen = mbrtowc (&wc, s, end - s, &ps);
          if (MB_INVALIDCH (tlen))
            {
              tlen = 1;
+             width = 1;
              memset (&ps, 0, sizeof (mbstate_t));
            }
          else if (MB_NULLWCH (tlen))
            break;
+         else
+           {
+             w = wcwidth (wc);
+             width = (w >= 0) ? w : 1;
+           }
          fwrite (s, 1, tlen, rl_outstream);
          s += tlen;
+         printed_len += width;
 #else
          putc (*s, rl_outstream);
          s++;
-#endif
          printed_len++;
+#endif
        }
     }
 
@@ -683,7 +695,7 @@ print_filename (to_print, full_pathname)
      char *to_print, *full_pathname;
 {
   int printed_len, extension_char, slen, tlen;
-  char *s, c, *new_full_pathname;
+  char *s, c, *new_full_pathname, *dn;
 
   extension_char = 0;
   printed_len = fnprint (to_print);
@@ -708,7 +720,17 @@ print_filename (to_print, full_pathname)
             files in the root directory.  If we pass a null string to the
             bash directory completion hook, for example, it will expand it
             to the current directory.  We just want the `/'. */
-         s = tilde_expand (full_pathname && *full_pathname ? full_pathname : "/");
+         if (full_pathname == 0 || *full_pathname == 0)
+           dn = "/";
+         else if (full_pathname[0] != '/')
+           dn = full_pathname;
+         else if (full_pathname[1] == 0)
+           dn = "//";          /* restore trailing slash to `//' */
+         else if (full_pathname[1] == '/' && full_pathname[2] == 0)
+           dn = "/";           /* don't turn /// into // */
+         else
+           dn = full_pathname;
+         s = tilde_expand (dn);
          if (rl_directory_completion_hook)
            (*rl_directory_completion_hook) (&s);
 
@@ -716,6 +738,10 @@ print_filename (to_print, full_pathname)
          tlen = strlen (to_print);
          new_full_pathname = (char *)xmalloc (slen + tlen + 2);
          strcpy (new_full_pathname, s);
+         if (s[slen - 1] == '/')
+           slen--;
+         else
+           new_full_pathname[slen] = '/';
          new_full_pathname[slen] = '/';
          strcpy (new_full_pathname + slen + 1, to_print);
 
@@ -807,14 +833,7 @@ _rl_find_completion_word (fp, dp)
         quote substrings for the completer.  Try to find the start
         of an unclosed quoted substring. */
       /* FOUND_QUOTE is set so we know what kind of quotes we found. */
-#if defined (HANDLE_MULTIBYTE)
-      for (scan = pass_next = 0; scan < end;
-               scan = ((MB_CUR_MAX == 1 || rl_byte_oriented)
-                       ? (scan + 1) 
-                       : _rl_find_next_mbchar (rl_line_buffer, scan, 1, MB_FIND_ANY)))
-#else
-      for (scan = pass_next = 0; scan < end; scan++)
-#endif
+      for (scan = pass_next = 0; scan < end; scan = MB_NEXTCHAR (rl_line_buffer, scan, 1, MB_FIND_ANY))
        {
          if (pass_next)
            {
@@ -864,11 +883,7 @@ _rl_find_completion_word (fp, dp)
       /* We didn't find an unclosed quoted substring upon which to do
          completion, so use the word break characters to find the
          substring on which to complete. */
-#if defined (HANDLE_MULTIBYTE)
-      while (rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_ANY))
-#else
-      while (--rl_point)
-#endif
+      while (rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_ANY))
        {
          scan = rl_line_buffer[rl_point];
 
@@ -1151,7 +1166,7 @@ compute_lcd_of_matches (match_list, matches, text)
              rl_completion_found_quote &&
              rl_filename_quoting_desired)
            {
-             dtext = (*rl_filename_dequoting_function) (text, rl_completion_quote_character);
+             dtext = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
              text = dtext;
            }
 
@@ -1397,7 +1412,7 @@ display_matches (matches)
        
   /* If there are many items, then ask the user if she really wants to
      see them all. */
-  if (len >= rl_completion_query_items)
+  if (rl_completion_query_items > 0 && len >= rl_completion_query_items)
     {
       rl_crlf ();
       fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len);
@@ -1534,7 +1549,7 @@ append_to_match (text, delimiter, quote_char, nontrivial_match)
                : stat (filename, &finfo);
       if (s == 0 && S_ISDIR (finfo.st_mode))
        {
-         if (_rl_complete_mark_directories)
+         if (_rl_complete_mark_directories /* && rl_completion_suppress_append == 0 */)
            {
              /* This is clumsy.  Avoid putting in a double slash if point
                 is at the end of the line and the previous character is a
@@ -1848,16 +1863,20 @@ rl_username_completion_function (text, state)
       setpwent ();
     }
 
+#if defined (HAVE_GETPWENT)
   while (entry = getpwent ())
     {
       /* Null usernames should result in all users as possible completions. */
       if (namelen == 0 || (STREQN (username, entry->pw_name, namelen)))
        break;
     }
+#endif
 
   if (entry == 0)
     {
+#if defined (HAVE_GETPWENT)
       endpwent ();
+#endif
       return ((char *)NULL);
     }
   else
@@ -2169,9 +2188,11 @@ rl_menu_complete (count, ignore)
       return (0);
     }
 
-  match_list_index = (match_list_index + count) % match_list_size;
+  match_list_index += count;
   if (match_list_index < 0)
     match_list_index += match_list_size;
+  else
+    match_list_index %= match_list_size;
 
   if (match_list_index == 0 && match_list_size > 1)
     {
index ff0cf5a..b22521b 100644 (file)
@@ -1,6 +1,6 @@
 /* display.c -- readline redisplay facility. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -118,16 +118,24 @@ rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
 int rl_display_fixed = 0;
 
 int _rl_suppress_redisplay = 0;
+int _rl_want_redisplay = 0;
 
 /* The stuff that gets printed out before the actual text of the line.
    This is usually pointing to rl_prompt. */
 char *rl_display_prompt = (char *)NULL;
 
 /* Pseudo-global variables declared here. */
+
 /* The visible cursor position.  If you print some text, adjust this. */
+/* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale
+   supporting multibyte characters, and an absolute cursor position when
+   in such a locale.  This is an artifact of the donated multibyte support.
+   Care must be taken when modifying its value. */
 int _rl_last_c_pos = 0;
 int _rl_last_v_pos = 0;
 
+static int cpos_adjusted;
+
 /* Number of lines currently on screen minus 1. */
 int _rl_vis_botlin = 0;
 
@@ -180,6 +188,18 @@ static int prompt_last_screen_line;
 
 static int prompt_physical_chars;
 
+/* Variables to save and restore prompt and display information. */
+
+/* These are getting numerous enough that it's time to create a struct. */
+
+static char *saved_local_prompt;
+static char *saved_local_prefix;
+static int saved_last_invisible;
+static int saved_visible_length;
+static int saved_prefix_length;
+static int saved_invis_chars_first_line;
+static int saved_physical_chars;
+
 /* Expand the prompt string S and return the number of visible
    characters in *LP, if LP is not null.  This is currently more-or-less
    a placeholder for expansion.  LIP, if non-null is a place to store the
@@ -236,7 +256,8 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
       else if (ignoring && *p == RL_PROMPT_END_IGNORE)
        {
          ignoring = 0;
-         last = r - ret - 1;
+         if (p[-1] != RL_PROMPT_START_IGNORE)
+           last = r - ret - 1;
          continue;
        }
       else
@@ -335,7 +356,8 @@ rl_expand_prompt (prompt)
   FREE (local_prompt_prefix);
 
   local_prompt = local_prompt_prefix = (char *)0;
-  prompt_last_invisible = prompt_visible_length = 0;
+  prompt_last_invisible = prompt_invis_chars_first_line = 0;
+  prompt_visible_length = prompt_physical_chars = 0;
 
   if (prompt == 0 || *prompt == 0)
     return (0);
@@ -423,7 +445,7 @@ rl_redisplay ()
 {
   register int in, out, c, linenum, cursor_linenum;
   register char *line;
-  int c_pos, inv_botlin, lb_botlin, lb_linenum;
+  int c_pos, inv_botlin, lb_botlin, lb_linenum, o_cpos;
   int newlines, lpos, temp, modmark, n0, num;
   char *prompt_this_line;
 #if defined (HANDLE_MULTIBYTE)
@@ -440,7 +462,7 @@ rl_redisplay ()
   if (!rl_display_prompt)
     rl_display_prompt = "";
 
-  if (invisible_line == 0)
+  if (invisible_line == 0 || vis_lbreaks == 0)
     {
       init_line_structures (0);
       rl_on_new_line ();
@@ -833,7 +855,7 @@ rl_redisplay ()
 
   if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
     {
-      int nleft, pos, changed_screen_line;
+      int nleft, pos, changed_screen_line, tx;
 
       if (!rl_display_fixed || forced_display)
        {
@@ -864,9 +886,26 @@ rl_redisplay ()
          /* For each line in the buffer, do the updating display. */
          for (linenum = 0; linenum <= inv_botlin; linenum++)
            {
+             o_cpos = _rl_last_c_pos;
+             cpos_adjusted = 0;
              update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
                           VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
 
+             /* update_line potentially changes _rl_last_c_pos, but doesn't
+                take invisible characters into account, since _rl_last_c_pos
+                is an absolute cursor position in a multibyte locale.  See
+                if compensating here is the right thing, or if we have to
+                change update_line itself.  There is one case in which
+                update_line adjusts _rl_last_c_pos itself (so it can pass
+                _rl_move_cursor_relative accurate values); it communicates
+                this back by setting cpos_adjusted */
+             if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+                 cpos_adjusted == 0 &&
+                 _rl_last_c_pos != o_cpos &&
+                 _rl_last_c_pos > wrap_offset &&
+                 o_cpos < prompt_last_invisible)
+               _rl_last_c_pos -= wrap_offset;
+                 
              /* If this is the line with the prompt, we might need to
                 compensate for invisible characters in the new line. Do
                 this only if there is not more than one new line (which
@@ -878,7 +917,10 @@ rl_redisplay ()
                  (wrap_offset > visible_wrap_offset) &&
                  (_rl_last_c_pos < visible_first_line_len))
                {
-                 nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+                 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+                   nleft = _rl_screenwidth - _rl_last_c_pos;
+                 else
+                   nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
                  if (nleft)
                    _rl_clear_to_eol (nleft);
                }
@@ -914,7 +956,7 @@ rl_redisplay ()
                 the physical cursor position on the screen stays the same,
                 but the buffer position needs to be adjusted to account
                 for invisible characters. */
-             if (cursor_linenum == 0 && wrap_offset)
+             if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset)
                _rl_last_c_pos += wrap_offset;
            }
 
@@ -935,7 +977,7 @@ rl_redisplay ()
 #endif
              _rl_output_some_chars (local_prompt, nleft);
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft);
+               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset;
              else
                _rl_last_c_pos = nleft;
            }
@@ -947,18 +989,31 @@ rl_redisplay ()
             start of the line and the cursor position. */
          nleft = c_pos - pos;
 
+         /* NLEFT is now a number of characters in a buffer.  When in a
+            multibyte locale, however, _rl_last_c_pos is an absolute cursor
+            position that doesn't take invisible characters in the prompt
+            into account.  We use a fudge factor to compensate. */
+
          /* Since _rl_backspace() doesn't know about invisible characters in the
             prompt, and there's no good way to tell it, we compensate for
             those characters here and call _rl_backspace() directly. */
          if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
            {
-             _rl_backspace (_rl_last_c_pos - nleft);
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
+               tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
              else
-               _rl_last_c_pos = nleft;
+               tx = nleft;
+             if (_rl_last_c_pos > tx)
+               {
+                 _rl_backspace (_rl_last_c_pos - tx);  /* XXX */
+                 _rl_last_c_pos = tx;
+               }
            }
 
+         /* We need to note that in a multibyte locale we are dealing with
+            _rl_last_c_pos as an absolute cursor position, but moving to a
+            point specified by a buffer position (NLEFT) that doesn't take
+            invisible characters into account. */
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
            _rl_move_cursor_relative (nleft, &invisible_line[pos]);
          else if (nleft != _rl_last_c_pos)
@@ -1117,7 +1172,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
      the exact cursor position and cut-and-paste with certain terminal
      emulators.  In this calculation, TEMP is the physical screen
      position of the cursor. */
-  temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    temp = _rl_last_c_pos;
+  else
+    temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
   if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
        && _rl_last_v_pos == current_line - 1)
     {
@@ -1182,7 +1240,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
            putc (new[0], rl_outstream);
          else
            putc (' ', rl_outstream);
-         _rl_last_c_pos = 1;           /* XXX */
+         _rl_last_c_pos = 1;
          _rl_last_v_pos++;
          if (old[0] && new[0])
            old[0] = new[0];
@@ -1323,7 +1381,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
   if (_rl_last_v_pos != current_line)
     {
       _rl_move_vert (current_line);
-      if (current_line == 0 && visible_wrap_offset)
+      if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
        _rl_last_c_pos += visible_wrap_offset;
     }
 
@@ -1352,7 +1410,12 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
 #endif
       _rl_output_some_chars (local_prompt, lendiff);
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+       {
+         /* We take wrap_offset into account here so we can pass correct
+            information to _rl_move_cursor_relative. */
+         _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset;
+         cpos_adjusted = 1;
+       }
       else
        _rl_last_c_pos = lendiff;
     }
@@ -1414,7 +1477,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
              insert_some_chars (nfd, lendiff, col_lendiff);
              _rl_last_c_pos += col_lendiff;
            }
-         else if (*ols == 0 && lendiff > 0)
+         else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0)
            {
              /* At the end of a line the characters do not have to
                 be "inserted".  They can just be placed on the screen. */
@@ -1453,6 +1516,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          /* cannot insert chars, write to EOL */
          _rl_output_some_chars (nfd, temp);
          _rl_last_c_pos += col_temp;
+         /* If we're in a multibyte locale and were before the last invisible
+            char in the current line (which implies we just output some invisible
+            characters) we need to adjust _rl_last_c_pos, since it represents
+            a physical character position. */
        }
     }
   else                         /* Delete characters from line. */
@@ -1484,7 +1551,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          if (temp > 0)
            {
              _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
+             _rl_last_c_pos += col_temp;               /* XXX */
            }
          lendiff = (oe - old) - (ne - new);
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
@@ -1546,7 +1613,7 @@ rl_on_new_line_with_prompt ()
 
   l = strlen (prompt_last_line);
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);   /* XXX */
   else
     _rl_last_c_pos = l;
 
@@ -1595,6 +1662,8 @@ rl_forced_update_display ()
 }
 
 /* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+   (Well, when we don't have multibyte characters, _rl_last_c_pos is a
+   buffer index.)
    DATA is the contents of the screen line of interest; i.e., where
    the movement is being done. */
 void
@@ -1603,28 +1672,40 @@ _rl_move_cursor_relative (new, data)
      const char *data;
 {
   register int i;
+  int woff;                    /* number of invisible chars on current line */
+  int cpos, dpos;              /* current and desired cursor positions */
 
-  /* If we don't have to do anything, then return. */
+  woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+  cpos = _rl_last_c_pos;
 #if defined (HANDLE_MULTIBYTE)
   /* If we have multibyte characters, NEW is indexed by the buffer point in
      a multibyte string, but _rl_last_c_pos is the display position.  In
      this case, NEW's display position is not obvious and must be
-     calculated. */
-  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+     calculated.  We need to account for invisible characters in this line,
+     as long as we are past them and they are counted by _rl_col_width. */
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     {
-      if (_rl_last_c_pos == new)
-       return;
+      dpos = _rl_col_width (data, 0, new);
+      if (dpos > woff)
+       dpos -= woff;
     }
-  else if (_rl_last_c_pos == _rl_col_width (data, 0, new))
-    return;
-#else
-  if (_rl_last_c_pos == new) return;
+  else
 #endif
+    dpos = new;
+
+  /* If we don't have to do anything, then return. */
+  if (cpos == dpos)
+    return;
 
   /* It may be faster to output a CR, and then move forwards instead
      of moving backwards. */
   /* i == current physical cursor position. */
-  i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    i = _rl_last_c_pos;
+  else
+#endif
+  i = _rl_last_c_pos - woff;
   if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
       (_rl_term_autowrap && i == _rl_screenwidth))
     {
@@ -1633,10 +1714,10 @@ _rl_move_cursor_relative (new, data)
 #else
       tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif /* !__MSDOS__ */
-      _rl_last_c_pos = 0;
+      cpos = _rl_last_c_pos = 0;
     }
 
-  if (_rl_last_c_pos < new)
+  if (cpos < dpos)
     {
       /* Move the cursor forward.  We do it by printing the command
         to move the cursor forward if there is one, else print that
@@ -1650,31 +1731,11 @@ _rl_move_cursor_relative (new, data)
 #if defined (HACK_TERMCAP_MOTION)
       if (_rl_term_forward_char)
        {
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {
-             int width;
-             width = _rl_col_width (data, _rl_last_c_pos, new);
-             for (i = 0; i < width; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-         else
-           {
-             for (i = _rl_last_c_pos; i < new; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-       }
-      else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       {
-         tputs (_rl_term_cr, 1, _rl_output_character_function);
-         for (i = 0; i < new; i++)
-           putc (data[i], rl_outstream);
+         for (i = cpos; i < dpos; i++)
+           tputs (_rl_term_forward_char, 1, _rl_output_character_function);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
-         putc (data[i], rl_outstream);
-
-#else /* !HACK_TERMCAP_MOTION */
-
+#endif /* HACK_TERMCAP_MOTION */
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        {
          tputs (_rl_term_cr, 1, _rl_output_character_function);
@@ -1682,32 +1743,20 @@ _rl_move_cursor_relative (new, data)
            putc (data[i], rl_outstream);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
+       for (i = cpos; i < new; i++)
          putc (data[i], rl_outstream);
-
-#endif /* !HACK_TERMCAP_MOTION */
-
     }
+
 #if defined (HANDLE_MULTIBYTE)
   /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
      The byte length of the string is probably bigger than the column width
      of the string, which means that if NEW == _rl_last_c_pos, then NEW's
      display point is less than _rl_last_c_pos. */
-  else if (_rl_last_c_pos >= new)
-#else
-  else if (_rl_last_c_pos > new)
 #endif
-    {
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
-      else
-       _rl_backspace (_rl_last_c_pos - new);
-    }
+  else if (cpos > dpos)
+    _rl_backspace (cpos - dpos);
 
-  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos =  _rl_col_width (data, 0, new);
-  else
-    _rl_last_c_pos = new;
+  _rl_last_c_pos = dpos;
 }
 
 /* PWP: move the cursor up or down. */
@@ -1796,9 +1845,9 @@ rl_character_len (c, pos)
 
   return ((ISPRINT (uc)) ? 1 : 2);
 }
-
 /* How to print things in the "echo-area".  The prompt is treated as a
    mini-modeline. */
+static int msg_saved_prompt = 0;
 
 #if defined (USE_VARARGS)
 int
@@ -1829,8 +1878,19 @@ rl_message (va_alist)
 #endif
   va_end (args);
 
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
   rl_display_prompt = msg_buf;
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
   (*rl_redisplay_function) ();
+
   return 0;
 }
 #else /* !USE_VARARGS */
@@ -1840,8 +1900,20 @@ rl_message (format, arg1, arg2)
 {
   sprintf (msg_buf, format, arg1, arg2);
   msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+
   rl_display_prompt = msg_buf;
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
   (*rl_redisplay_function) ();
+      
   return 0;
 }
 #endif /* !USE_VARARGS */
@@ -1851,6 +1923,11 @@ int
 rl_clear_message ()
 {
   rl_display_prompt = rl_prompt;
+  if (msg_saved_prompt)
+    {
+      rl_restore_prompt ();
+      msg_saved_prompt = 0;
+    }
   (*rl_redisplay_function) ();
   return 0;
 }
@@ -1865,27 +1942,19 @@ rl_reset_line_state ()
   return 0;
 }
 
-/* These are getting numerous enough that it's time to create a struct. */
-
-static char *saved_local_prompt;
-static char *saved_local_prefix;
-static int saved_last_invisible;
-static int saved_visible_length;
-static int saved_invis_chars_first_line;
-static int saved_physical_chars;
-
 void
 rl_save_prompt ()
 {
   saved_local_prompt = local_prompt;
   saved_local_prefix = local_prompt_prefix;
+  saved_prefix_length = prompt_prefix_length;
   saved_last_invisible = prompt_last_invisible;
   saved_visible_length = prompt_visible_length;
   saved_invis_chars_first_line = prompt_invis_chars_first_line;
   saved_physical_chars = prompt_physical_chars;
 
   local_prompt = local_prompt_prefix = (char *)0;
-  prompt_last_invisible = prompt_visible_length = 0;
+  prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0;
   prompt_invis_chars_first_line = prompt_physical_chars = 0;
 }
 
@@ -1897,10 +1966,16 @@ rl_restore_prompt ()
 
   local_prompt = saved_local_prompt;
   local_prompt_prefix = saved_local_prefix;
+  prompt_prefix_length = saved_prefix_length;
   prompt_last_invisible = saved_last_invisible;
   prompt_visible_length = saved_visible_length;
   prompt_invis_chars_first_line = saved_invis_chars_first_line;
   prompt_physical_chars = saved_physical_chars;
+
+  /* can test saved_local_prompt to see if prompt info has been saved. */
+  saved_local_prompt = saved_local_prefix = (char *)0;
+  saved_last_invisible = saved_visible_length = saved_prefix_length = 0;
+  saved_invis_chars_first_line = saved_physical_chars = 0;
 }
 
 char *
@@ -1934,6 +2009,8 @@ _rl_make_prompt_for_search (pchar)
       prompt_visible_length = saved_visible_length + 1;
     }
 
+  prompt_physical_chars = saved_physical_chars + 1;
+
   return pmt;
 }
 
@@ -1994,6 +2071,9 @@ insert_some_chars (string, count, col)
      char *string;
      int count, col;
 {
+#if defined (__MSDOS__) || defined (__MINGW32__)
+  _rl_output_some_chars (string, count);
+#else
   /* DEBUGGING */
   if (MB_CUR_MAX == 1 || rl_byte_oriented)
     if (count != col)
@@ -2032,6 +2112,7 @@ insert_some_chars (string, count, col)
       if (_rl_term_ei && *_rl_term_ei)
        tputs (_rl_term_ei, 1, _rl_output_character_function);
     }
+#endif /* __MSDOS__ || __MINGW32__ */
 }
 
 /* Delete COUNT characters from the display line. */
@@ -2042,6 +2123,7 @@ delete_chars (count)
   if (count > _rl_screenwidth) /* XXX */
     return;
 
+#if !defined (__MSDOS__) && !defined (__MINGW32__)
   if (_rl_term_DC && *_rl_term_DC)
     {
       char *buffer;
@@ -2054,6 +2136,7 @@ delete_chars (count)
        while (count--)
          tputs (_rl_term_dc, 1, _rl_output_character_function);
     }
+#endif /* !__MSDOS__ && !__MINGW32__ */
 }
 
 void
@@ -2109,18 +2192,10 @@ static void
 redraw_prompt (t)
      char *t;
 {
-  char *oldp, *oldl, *oldlprefix;
-  int oldlen, oldlast, oldplen, oldninvis, oldphyschars;
+  char *oldp;
 
-  /* Geez, I should make this a struct. */
   oldp = rl_display_prompt;
-  oldl = local_prompt;
-  oldlprefix = local_prompt_prefix;
-  oldlen = prompt_visible_length;
-  oldplen = prompt_prefix_length;
-  oldlast = prompt_last_invisible;
-  oldninvis = prompt_invis_chars_first_line;
-  oldphyschars = prompt_physical_chars;
+  rl_save_prompt ();
 
   rl_display_prompt = t;
   local_prompt = expand_prompt (t, &prompt_visible_length,
@@ -2128,16 +2203,11 @@ redraw_prompt (t)
                                   &prompt_invis_chars_first_line,
                                   &prompt_physical_chars);
   local_prompt_prefix = (char *)NULL;
+
   rl_forced_update_display ();
 
   rl_display_prompt = oldp;
-  local_prompt = oldl;
-  local_prompt_prefix = oldlprefix;
-  prompt_visible_length = oldlen;
-  prompt_prefix_length = oldplen;
-  prompt_last_invisible = oldlast;
-  prompt_invis_chars_first_line = oldninvis;
-  prompt_physical_chars = oldphyschars;
+  rl_restore_prompt();
 }
       
 /* Redisplay the current line after a SIGWINCH is received. */
index af9bc53..6f2e2ee 100644 (file)
@@ -5,10 +5,10 @@
 
 @ifinfo
 This document describes the GNU Readline Library, a utility for aiding
-in the consitency of user interface across discrete programs that need
+in the consistency of user interface across discrete programs that need
 to provide a command line interface.
 
-Copyright (C) 1988-2004 Free Software Foundation, Inc.
+Copyright (C) 1988-2005 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -284,6 +284,8 @@ negative argument.
 
 A command function should return 0 if its action completes successfully,
 and a non-zero value if some error occurs.
+This is the convention obeyed by all of the builtin Readline bindable
+command functions.
 
 @node Readline Variables
 @section Readline Variables
@@ -398,6 +400,12 @@ The stdio stream to which Readline performs output.
 If @code{NULL}, Readline defaults to @var{stdout}.
 @end deftypevar
 
+@deftypevar int rl_prefer_env_winsize
+If non-zero, Readline gives values found in the @env{LINES} and
+@env{COLUMNS} environment variables greater precedence than values fetched
+from the kernel when computing the screen dimensions.
+@end deftypevar
+
 @deftypevar {rl_command_func_t *} rl_last_func
 The address of the last command function Readline executed.  May be used to
 test whether or not a function is being executed twice in succession, for
@@ -909,10 +917,14 @@ possibly containing conversion specifications such as @samp{%d}, and
 any additional arguments necessary to satisfy the conversion specifications.
 The resulting string is displayed in the @dfn{echo area}.  The echo area
 is also used to display numeric arguments and search strings.
+You should call @code{rl_save_prompt} to save the prompt information
+before calling this function.
 @end deftypefun
 
 @deftypefun int rl_clear_message (void)
-Clear the message in the echo area.
+Clear the message in the echo area.  If the prompt was saved with a call to
+@code{rl_save_prompt} before the last call to @code{rl_message},
+call @code{rl_restore_prompt} before calling this function.
 @end deftypefun
 
 @deftypefun void rl_save_prompt (void)
@@ -923,6 +935,9 @@ displaying a new message in the message area with @code{rl_message()}.
 @deftypefun void rl_restore_prompt (void)
 Restore the local Readline prompt display state saved by the most
 recent call to @code{rl_save_prompt}.
+if @code{rl_save_prompt} was called to save the prompt before a call
+to @code{rl_message}, this function should be called before the
+corresponding call to @code{rl_clear_message}.
 @end deftypefun
 
 @deftypefun int rl_expand_prompt (char *prompt)
@@ -1149,6 +1164,11 @@ This behaves as if the readline command
 file (@pxref{Readline Init File Syntax}).
 @end deftypefun
 
+@deftypefun {char *} rl_variable_value (const char *variable)
+Return a string representing the value of the Readline variable @var{variable}.
+For boolean variables, this string is either @samp{on} or @samp{off}.
+@end deftypefun
+
 @deftypefun void rl_variable_dumper (int readable)
 Print the readline variable names and their current values
 to @code{rl_outstream}.
@@ -1378,7 +1398,8 @@ Update Readline's internal screen size by reading values from the kernel.
 
 @deftypefun void rl_set_screen_size (int rows, int cols)
 Set Readline's idea of the terminal size to @var{rows} rows and
-@var{cols} columns.
+@var{cols} columns.  If either @var{rows} or @var{columns} is less than
+or equal to 0, Readline's idea of that terminal dimension is unchanged.
 @end deftypefun
 
 If an application does not want to install a @code{SIGWINCH} handler, but
@@ -1390,6 +1411,10 @@ Return Readline's idea of the terminal's size in the
 variables pointed to by the arguments.
 @end deftypefun
 
+@deftypefun void rl_reset_screen_size (void)
+Cause Readline to reobtain the screen size and recalculate its dimensions.
+@end deftypefun
+
 The following functions install and remove Readline's signal handlers.
 
 @deftypefun int rl_set_signals (void)
@@ -1707,8 +1732,9 @@ shell variables and hostnames.
 
 @deftypevar int rl_completion_query_items
 Up to this many items will be displayed in response to a
-possible-completions call.  After that, we ask the user if she is sure
-she wants to see them all.  The default value is 100.
+possible-completions call.  After that, readline asks the user if she is sure
+she wants to see them all.  The default value is 100.  A negative value 
+indicates that Readline should never ask the user.
 @end deftypevar
 
 @deftypevar {int} rl_completion_append_character
@@ -2237,7 +2263,7 @@ too_dangerous (caller)
      char *caller;
 @{
   fprintf (stderr,
-           "%s: Too dangerous for me to distribute.\n"
+           "%s: Too dangerous for me to distribute.\n",
            caller);
   fprintf (stderr, "Write it yourself.\n");
 @}
index 6fa9350..478b41f 100644 (file)
@@ -10,7 +10,7 @@ use these features.  There is a document entitled "readline.texinfo"
 which contains both end-user and programmer documentation for the
 GNU Readline Library.
 
-Copyright (C) 1988-2004 Free Software Foundation, Inc.
+Copyright (C) 1988-2005 Free Software Foundation, Inc.
 
 Authored by Brian Fox and Chet Ramey.
 
@@ -383,7 +383,11 @@ set editing-mode vi
 @end example
 
 Variable names and values, where appropriate, are recognized without regard
-to case. 
+to case.  Unrecognized variable names are ignored.
+
+Boolean variables (those that can be set to on or off) are set to on if
+the value is null or empty, @var{on} (case-insensitive), or 1.  Any other
+value results in the variable being set to off.
 
 @ifset BashFeatures
 The @w{@code{bind -V}} command lists the current Readline variable names
@@ -404,6 +408,12 @@ If set to @samp{none}, Readline never rings the bell.  If set to
 If set to @samp{audible} (the default), Readline attempts to ring
 the terminal's bell.
 
+@item bind-tty-special-chars
+@vindex bind-tty-special-chars
+If set to @samp{on}, Readline attempts to bind the control characters  
+treated specially by the kernel's terminal driver to their Readline
+equivalents.
+
 @item comment-begin
 @vindex comment-begin
 The string to insert at the beginning of the line when the
@@ -423,6 +433,7 @@ If the number of possible completions is greater than this value,
 Readline will ask the user whether or not he wishes to view
 them; otherwise, they are simply listed.
 This variable must be set to an integer value greater than or equal to 0.
+A negative value means Readline should never ask.
 The default limit is @code{100}.
 
 @item convert-meta
@@ -456,10 +467,11 @@ arrow keys.  The default is @samp{off}.
 If set to @samp{on}, tilde expansion is performed when Readline
 attempts word completion.  The default is @samp{off}.
 
+@item history-preserve-point
 @vindex history-preserve-point
 If set to @samp{on}, the history code attempts to place point at the
 same location on each history line retrieved with @code{previous-history}
-or @code{next-history}.
+or @code{next-history}.  The default is @samp{off}.
 
 @item horizontal-scroll-mode
 @vindex horizontal-scroll-mode
@@ -1012,6 +1024,8 @@ With an argument @var{n},
 insert the @var{n}th word from the previous command (the words
 in the previous command begin with word 0).  A negative argument
 inserts the @var{n}th word from the end of the previous command.
+Once the argument @var{n} is computed, the argument is extracted
+as if the @samp{!@var{n}} history expansion had been specified.
 
 @item yank-last-arg (M-. or M-_)
 Insert last argument to the previous command (the last word of the
@@ -1019,6 +1033,8 @@ previous history entry).  With an
 argument, behave exactly like @code{yank-nth-arg}.
 Successive calls to @code{yank-last-arg} move back through the history
 list, inserting the last argument of each line in turn.
+The history expansion facilities are used to extract the last argument,
+as if the @samp{!$} history expansion had been specified.
 
 @end ftable
 
@@ -1530,7 +1546,7 @@ special variable as delimiters.
 Shell quoting is honored.
 Each word is then expanded using
 brace expansion, tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and pathname expansion,
+command substitution, and arithmetic expansion,
 as described above (@pxref{Shell Expansions}).
 The results are split using the rules described above
 (@pxref{Word Splitting}).
@@ -1693,6 +1709,12 @@ shell functions specified with @option{-F}.
 @item nospace
 Tell Readline not to append a space (the default) to words completed at
 the end of the line.
+
+@item plusdirs
+After any matches defined by the compspec are generated, 
+directory name completion is attempted and any
+matches are added to the results of the other actions.
+
 @end table
 
 @item -A @var{action}
index 8681a86..db80b31 100644 (file)
@@ -14,7 +14,7 @@ This manual describes the end user interface of the GNU Readline Library
 consistency of user interface across discrete programs which provide
 a command line interface.
 
-Copyright @copyright{} 1988-2004 Free Software Foundation, Inc.
+Copyright @copyright{} 1988-2005 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
index 0beb276..99816bf 100644 (file)
@@ -1,10 +1,10 @@
 @ignore
-Copyright (C) 1988-2004 Free Software Foundation, Inc. 
+Copyright (C) 1988-2005 Free Software Foundation, Inc. 
 @end ignore
 
-@set EDITION 5.0
-@set VERSION 5.0
-@set UPDATED 28 January 2004
-@set UPDATED-MONTH January 2004
+@set EDITION 5.1-beta1
+@set VERSION 5.1-beta1
+@set UPDATED 11 November 2005
+@set UPDATED-MONTH November 2005
 
-@set LASTCHANGE Wed Jan 28 15:46:54 EST 2004
+@set LASTCHANGE Fri Nov 11 19:50:51 EST 2005
index e875e65..4f059c1 100644 (file)
@@ -26,6 +26,8 @@
 #  include <readline/history.h>
 #endif
 
+#include <string.h>
+
 main (argc, argv)
      int argc;
      char **argv;
index d260489..c608c15 100644 (file)
 
 #include <stdio.h>
 #include <sys/types.h>
-#include "posixstat.h"
+
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#else 
+extern void exit();
+#endif
 
 #if defined (READLINE_LIBRARY)
+#  include "posixstat.h"
 #  include "readline.h"
 #  include "history.h"
 #else
+#  include <sys/stat.h>
 #  include <readline/readline.h>
 #  include <readline/history.h>
 #endif
index 176b9f4..33aea4a 100644 (file)
 #include <string.h>
 #include <errno.h>
 
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#else 
+extern void exit();
+#endif
+
 #ifndef errno
 extern int errno;
 #endif
index 99f083b..cb67bab 100644 (file)
 #include <stdio.h>
 #include <sys/types.h>
 
+#ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+#else 
+extern void exit();
+#endif
+
 #ifdef READLINE_LIBRARY
 #  include "readline.h"
 #  include "history.h"
index 28c8cc6..9c760cc 100644 (file)
@@ -176,6 +176,7 @@ static FUNMAP default_funmap[] = {
   { "vi-put", rl_vi_put },
   { "vi-redo", rl_vi_redo },
   { "vi-replace", rl_vi_replace },
+  { "vi-rubout", rl_vi_rubout },
   { "vi-search", rl_vi_search },
   { "vi-search-again", rl_vi_search_again },
   { "vi-set-mark", rl_vi_set_mark },
index 2ab34cb..6847014 100644 (file)
@@ -206,23 +206,24 @@ get_history_event (string, caller_index, delimiting_quote)
 
   /* Only a closing `?' or a newline delimit a substring search string. */
   for (local_index = i; c = string[i]; i++)
+    {
 #if defined (HANDLE_MULTIBYTE)
-    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-      {
-       int v;
-       mbstate_t ps;
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         int v;
+         mbstate_t ps;
+
+         memset (&ps, 0, sizeof (mbstate_t));
+         /* These produce warnings because we're passing a const string to a
+            function that takes a non-const string. */
+         _rl_adjust_point ((char *)string, i, &ps);
+         if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1)
+           {
+             i += v - 1;
+             continue;
+           }
+        }
 
-       memset (&ps, 0, sizeof (mbstate_t));
-       /* These produce warnings because we're passing a const string to a
-          function that takes a non-const string. */
-       _rl_adjust_point ((char *)string, i, &ps);
-       if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1)
-         {
-           i += v - 1;
-           continue;
-         }
-      }
-    else
 #endif /* HANDLE_MULTIBYTE */
       if ((!substring_okay && (whitespace (c) || c == ':' ||
          (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) ||
@@ -230,6 +231,7 @@ get_history_event (string, caller_index, delimiting_quote)
          string[i] == '\n' ||
          (substring_okay && string[i] == '?'))
        break;
+    }
 
   which = i - local_index;
   temp = (char *)xmalloc (1 + which);
index d99b76e..a538f91 100644 (file)
@@ -1,6 +1,6 @@
 /* history.c -- standalone history library */
 
-/* Copyright (C) 1989-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (the Library), a set of
    routines for managing the text of previously typed lines.
@@ -204,7 +204,7 @@ history_get (offset)
   int local_index;
 
   local_index = offset - history_base;
-  return (local_index >= history_length || local_index < 0 || !the_history)
+  return (local_index >= history_length || local_index < 0 || the_history == 0)
                ? (HIST_ENTRY *)NULL
                : the_history[local_index];
 }
@@ -340,7 +340,7 @@ replace_history_entry (which, line, data)
 {
   HIST_ENTRY *temp, *old_value;
 
-  if (which >= history_length)
+  if (which < 0 || which >= history_length)
     return ((HIST_ENTRY *)NULL);
 
   temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
@@ -364,17 +364,15 @@ remove_history (which)
   HIST_ENTRY *return_value;
   register int i;
 
-  if (which >= history_length || !history_length)
-    return_value = (HIST_ENTRY *)NULL;
-  else
-    {
-      return_value = the_history[which];
+  if (which < 0 || which >= history_length || history_length ==  0 || the_history == 0)
+    return ((HIST_ENTRY *)NULL);
 
-      for (i = which; i < history_length; i++)
-       the_history[i] = the_history[i + 1];
+  return_value = the_history[which];
 
-      history_length--;
-    }
+  for (i = which; i < history_length; i++)
+    the_history[i] = the_history[i + 1];
+
+  history_length--;
 
   return (return_value);
 }
index 044338e..0ec507e 100644 (file)
@@ -1,6 +1,6 @@
 /* input.c -- character input functions for readline. */
 
-/* Copyright (C) 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -444,6 +444,10 @@ rl_getc (stream)
 
   while (1)
     {
+#if defined (__MINGW32__)
+      if (isatty (fileno (stream)))
+       return (getch ());
+#endif
       result = read (fileno (stream), &c, sizeof (unsigned char));
 
       if (result == sizeof (unsigned char))
@@ -519,6 +523,12 @@ _rl_read_mbchar (mbchar, size)
          ps = ps_back;
          continue;
        } 
+      else if (mbchar_bytes_length == 0)
+       {
+         mbchar[0] = '\0';     /* null wide character */
+         mb_len = 1;
+         break;
+       }
       else if (mbchar_bytes_length > (size_t)(0))
        break;
     }
index c1ea5b3..d7d8520 100644 (file)
@@ -4,7 +4,7 @@
 /*                                                                 */
 /* **************************************************************** */
 
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file contains the Readline Library (the Library), a set of
    routines for providing Emacs style line input to programs that ask
 /* Variables exported to other files in the readline library. */
 char *_rl_isearch_terminators = (char *)NULL;
 
+_rl_search_cxt *_rl_iscxt = 0;
+
 /* Variables imported from other files in the readline library. */
 extern HIST_ENTRY *_rl_saved_line_for_history;
 
-/* Forward declarations */
 static int rl_search_history PARAMS((int, int));
 
+static _rl_search_cxt *_rl_isearch_init PARAMS((int));
+static void _rl_isearch_fini PARAMS((_rl_search_cxt *));
+static int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int));
+
 /* Last line found by the current incremental search, so we don't `find'
    identical lines many times in a row. */
 static char *prev_line_found;
@@ -72,6 +77,57 @@ static int last_isearch_string_len;
 
 static char *default_isearch_terminators = "\033\012";
 
+_rl_search_cxt *
+_rl_scxt_alloc (type, flags)
+     int type, flags;
+{
+  _rl_search_cxt *cxt;
+
+  cxt = (_rl_search_cxt *)xmalloc (sizeof (_rl_search_cxt));
+
+  cxt->type = type;
+  cxt->sflags = flags;
+
+  cxt->search_string = 0;
+  cxt->search_string_size = cxt->search_string_index = 0;
+
+  cxt->lines = 0;
+  cxt->allocated_line = 0;
+  cxt->hlen = cxt->hindex = 0;
+
+  cxt->save_point = rl_point;
+  cxt->save_mark = rl_mark;
+  cxt->save_line = where_history ();
+  cxt->last_found_line = cxt->save_line;
+  cxt->prev_line_found = 0;
+
+  cxt->save_undo_list = 0;
+
+  cxt->history_pos = 0;
+  cxt->direction = 0;
+
+  cxt->lastc = 0;
+
+  cxt->sline = 0;
+  cxt->sline_len = cxt->sline_index = 0;
+
+  cxt->search_terminators = 0;
+
+  return cxt;
+}
+
+void
+_rl_scxt_dispose (cxt, flags)
+     _rl_search_cxt *cxt;
+     int flags;
+{
+  FREE (cxt->search_string);
+  FREE (cxt->allocated_line);
+  FREE (cxt->lines);
+
+  free (cxt);
+}
+
 /* Search backwards through the history looking for a string which is typed
    interactively.  Start with the current line. */
 int
@@ -92,7 +148,7 @@ rl_forward_search_history (sign, key)
 
 /* Display the current state of the search in the echo-area.
    SEARCH_STRING contains the string that is being searched for,
-   DIRECTION is zero for forward, or 1 for reverse,
+   DIRECTION is zero for forward, or non-zero for reverse,
    WHERE is the history list number of the current line.  If it is
    -1, then this line is the starting one. */
 static void
@@ -140,66 +196,23 @@ rl_display_search (search_string, reverse_p, where)
   (*rl_redisplay_function) ();
 }
 
-/* Search through the history looking for an interactively typed string.
-   This is analogous to i-search.  We start the search in the current line.
-   DIRECTION is which direction to search; >= 0 means forward, < 0 means
-   backwards. */
-static int
-rl_search_history (direction, invoking_key)
-     int direction, invoking_key;
+static _rl_search_cxt *
+_rl_isearch_init (direction)
+     int direction;
 {
-  /* The string that the user types in to search for. */
-  char *search_string;
-
-  /* The current length of SEARCH_STRING. */
-  int search_string_index;
-
-  /* The amount of space that SEARCH_STRING has allocated to it. */
-  int search_string_size;
-
-  /* The list of lines to search through. */
-  char **lines, *allocated_line;
-
-  /* The length of LINES. */
-  int hlen;
-
-  /* Where we get LINES from. */
-  HIST_ENTRY **hlist;
-
+  _rl_search_cxt *cxt;
   register int i;
-  int orig_point, orig_mark, orig_line, last_found_line;
-  int c, found, failed, sline_len;
-  int n, wstart, wlen;
-#if defined (HANDLE_MULTIBYTE)
-  char mb[MB_LEN_MAX];
-#endif
-
-  /* The line currently being searched. */
-  char *sline;
-
-  /* Offset in that line. */
-  int line_index;
-
-  /* Non-zero if we are doing a reverse search. */
-  int reverse;
+  HIST_ENTRY **hlist;
 
-  /* The list of characters which terminate the search, but are not
-     subsequently executed.  If the variable isearch-terminators has
-     been set, we use that value, otherwise we use ESC and C-J. */
-  char *isearch_terminators;
+  cxt = _rl_scxt_alloc (RL_SEARCH_ISEARCH, 0);
+  if (direction < 0)
+    cxt->sflags |= SF_REVERSE;
 
-  RL_SETSTATE(RL_STATE_ISEARCH);
-  orig_point = rl_point;
-  orig_mark = rl_mark;
-  last_found_line = orig_line = where_history ();
-  reverse = direction < 0;
-  hlist = history_list ();
-  allocated_line = (char *)NULL;
-
-  isearch_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
+  cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators
                                                : default_isearch_terminators;
 
   /* Create an arrary of pointers to the lines that we want to search. */
+  hlist = history_list ();
   rl_maybe_replace_line ();
   i = 0;
   if (hlist)
@@ -207,354 +220,447 @@ rl_search_history (direction, invoking_key)
 
   /* Allocate space for this many lines, +1 for the current input line,
      and remember those lines. */
-  lines = (char **)xmalloc ((1 + (hlen = i)) * sizeof (char *));
-  for (i = 0; i < hlen; i++)
-    lines[i] = hlist[i]->line;
+  cxt->lines = (char **)xmalloc ((1 + (cxt->hlen = i)) * sizeof (char *));
+  for (i = 0; i < cxt->hlen; i++)
+    cxt->lines[i] = hlist[i]->line;
 
   if (_rl_saved_line_for_history)
-    lines[i] = _rl_saved_line_for_history->line;
+    cxt->lines[i] = _rl_saved_line_for_history->line;
   else
     {
       /* Keep track of this so we can free it. */
-      allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
-      strcpy (allocated_line, &rl_line_buffer[0]);
-      lines[i] = allocated_line;
+      cxt->allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
+      strcpy (cxt->allocated_line, &rl_line_buffer[0]);
+      cxt->lines[i] = cxt->allocated_line;
     }
 
-  hlen++;
+  cxt->hlen++;
 
   /* The line where we start the search. */
-  i = orig_line;
+  cxt->history_pos = cxt->save_line;
 
   rl_save_prompt ();
 
   /* Initialize search parameters. */
-  search_string = (char *)xmalloc (search_string_size = 128);
-  *search_string = '\0';
-  search_string_index = 0;
-  prev_line_found = (char *)0;         /* XXX */
+  cxt->search_string = (char *)xmalloc (cxt->search_string_size = 128);
+  cxt->search_string[cxt->search_string_index = 0] = '\0';
 
   /* Normalize DIRECTION into 1 or -1. */
-  direction = (direction >= 0) ? 1 : -1;
+  cxt->direction = (direction >= 0) ? 1 : -1;
 
-  rl_display_search (search_string, reverse, -1);
+  cxt->sline = rl_line_buffer;
+  cxt->sline_len = strlen (cxt->sline);
+  cxt->sline_index = rl_point;
 
-  sline = rl_line_buffer;
-  sline_len = strlen (sline);
-  line_index = rl_point;
+  _rl_iscxt = cxt;             /* save globally */
 
-  found = failed = 0;
-  for (;;)
+  return cxt;
+}
+
+static void
+_rl_isearch_fini (cxt)
+     _rl_search_cxt *cxt;
+{
+  /* First put back the original state. */
+  strcpy (rl_line_buffer, cxt->lines[cxt->save_line]);
+
+  rl_restore_prompt ();
+
+  /* Save the search string for possible later use. */
+  FREE (last_isearch_string);
+  last_isearch_string = cxt->search_string;
+  last_isearch_string_len = cxt->search_string_index;
+  cxt->search_string = 0;
+
+  if (cxt->last_found_line < cxt->save_line)
+    rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0);
+  else
+    rl_get_next_history (cxt->last_found_line - cxt->save_line, 0);
+
+  /* If the string was not found, put point at the end of the last matching
+     line.  If last_found_line == orig_line, we didn't find any matching
+     history lines at all, so put point back in its original position. */
+  if (cxt->sline_index < 0)
     {
-      rl_command_func_t *f = (rl_command_func_t *)NULL;
+      if (cxt->last_found_line == cxt->save_line)
+       cxt->sline_index = cxt->save_point;
+      else
+       cxt->sline_index = strlen (rl_line_buffer);
+      rl_mark = cxt->save_mark;
+    }
 
-      /* Read a key and decide how to proceed. */
-      RL_SETSTATE(RL_STATE_MOREINPUT);
-      c = rl_read_key ();
-      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+  rl_point = cxt->sline_index;
+  /* Don't worry about where to put the mark here; rl_get_previous_history
+     and rl_get_next_history take care of it. */
+
+  rl_clear_message ();
+}
+
+int
+_rl_search_getchar (cxt)
+     _rl_search_cxt *cxt;
+{
+  int c;
+
+  /* Read a key and decide how to proceed. */
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  c = cxt->lastc = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
 #if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX);
 #endif
 
-      /* Translate the keys we do something with to opcodes. */
-      if (c >= 0 && _rl_keymap[c].type == ISFUNC)
-       {
-         f = _rl_keymap[c].function;
-
-         if (f == rl_reverse_search_history)
-           c = reverse ? -1 : -2;
-         else if (f == rl_forward_search_history)
-           c =  !reverse ? -1 : -2;
-         else if (f == rl_rubout)
-           c = -3;
-         else if (c == CTRL ('G'))
-           c = -4;
-         else if (c == CTRL ('W'))     /* XXX */
-           c = -5;
-         else if (c == CTRL ('Y'))     /* XXX */
-           c = -6;
-       }
+  return c;
+}
 
-      /* The characters in isearch_terminators (set from the user-settable
-        variable isearch-terminators) are used to terminate the search but
-        not subsequently execute the character as a command.  The default
-        value is "\033\012" (ESC and C-J). */
-      if (strchr (isearch_terminators, c))
-       {
-         /* ESC still terminates the search, but if there is pending
-            input or if input arrives within 0.1 seconds (on systems
-            with select(2)) it is used as a prefix character
-            with rl_execute_next.  WATCH OUT FOR THIS!  This is intended
-            to allow the arrow keys to be used like ^F and ^B are used
-            to terminate the search and execute the movement command.
-            XXX - since _rl_input_available depends on the application-
-            settable keyboard timeout value, this could alternatively
-            use _rl_input_queued(100000) */
-         if (c == ESC && _rl_input_available ())
-           rl_execute_next (ESC);
-         break;
-       }
+/* Process just-read character C according to isearch context CXT.  Return
+   -1 if the caller should just free the context and return, 0 if we should
+   break out of the loop, and 1 if we should continue to read characters. */
+int
+_rl_isearch_dispatch (cxt, c)
+     _rl_search_cxt *cxt;
+     int c;
+{
+  int n, wstart, wlen, limit, cval;
+  rl_command_func_t *f;
+
+  f = (rl_command_func_t *)NULL;
+ /* Translate the keys we do something with to opcodes. */
+  if (c >= 0 && _rl_keymap[c].type == ISFUNC)
+    {
+      f = _rl_keymap[c].function;
+
+      if (f == rl_reverse_search_history)
+       cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2;
+      else if (f == rl_forward_search_history)
+       cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1;
+      else if (f == rl_rubout)
+       cxt->lastc = -3;
+      else if (c == CTRL ('G'))
+       cxt->lastc = -4;
+      else if (c == CTRL ('W'))        /* XXX */
+       cxt->lastc = -5;
+      else if (c == CTRL ('Y'))        /* XXX */
+       cxt->lastc = -6;
+    }
+
+  /* The characters in isearch_terminators (set from the user-settable
+     variable isearch-terminators) are used to terminate the search but
+     not subsequently execute the character as a command.  The default
+     value is "\033\012" (ESC and C-J). */
+  if (strchr (cxt->search_terminators, cxt->lastc))
+    {
+      /* ESC still terminates the search, but if there is pending
+        input or if input arrives within 0.1 seconds (on systems
+        with select(2)) it is used as a prefix character
+        with rl_execute_next.  WATCH OUT FOR THIS!  This is intended
+        to allow the arrow keys to be used like ^F and ^B are used
+        to terminate the search and execute the movement command.
+        XXX - since _rl_input_available depends on the application-
+        settable keyboard timeout value, this could alternatively
+        use _rl_input_queued(100000) */
+      if (cxt->lastc == ESC && _rl_input_available ())
+       rl_execute_next (ESC);
+      return (0);
+    }
 
 #define ENDSRCH_CHAR(c) \
   ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G')))
 
 #if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc))
+       {
+         /* This sets rl_pending_input to c; it will be picked up the next
+            time rl_read_key is called. */
+         rl_execute_next (cxt->lastc);
+         return (0);
+       }
+    }
+  else
+#endif
+    if (cxt->lastc >= 0 && ENDSRCH_CHAR (cxt->lastc))
+      {
+       /* This sets rl_pending_input to LASTC; it will be picked up the next
+          time rl_read_key is called. */
+       rl_execute_next (cxt->lastc);
+       return (0);
+      }
+
+  /* Now dispatch on the character.  `Opcodes' affect the search string or
+     state.  Other characters are added to the string.  */
+  switch (cxt->lastc)
+    {
+    /* search again */
+    case -1:
+      if (cxt->search_string_index == 0)
        {
-         if (c >= 0 && strlen (mb) == 1 && ENDSRCH_CHAR (c))
+         if (last_isearch_string)
            {
-             /* This sets rl_pending_input to c; it will be picked up the next
-                time rl_read_key is called. */
-             rl_execute_next (c);
+             cxt->search_string_size = 64 + last_isearch_string_len;
+             cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+             strcpy (cxt->search_string, last_isearch_string);
+             cxt->search_string_index = last_isearch_string_len;
+             rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
              break;
            }
+         return (1);
        }
+      else if (cxt->sflags & SF_REVERSE)
+       cxt->sline_index--;
+      else if (cxt->sline_index != cxt->sline_len)
+       cxt->sline_index++;
       else
-#endif
-      if (c >= 0 && ENDSRCH_CHAR (c))
+       rl_ding ();
+      break;
+
+    /* switch directions */
+    case -2:
+      cxt->direction = -cxt->direction;
+      if (cxt->direction < 0)
+       cxt->sflags |= SF_REVERSE;
+      else
+       cxt->sflags &= ~SF_REVERSE;
+      break;
+
+    /* delete character from search string. */
+    case -3:   /* C-H, DEL */
+      /* This is tricky.  To do this right, we need to keep a
+        stack of search positions for the current search, with
+        sentinels marking the beginning and end.  But this will
+        do until we have a real isearch-undo. */
+      if (cxt->search_string_index == 0)
+       rl_ding ();
+      else
+       cxt->search_string[--cxt->search_string_index] = '\0';
+      break;
+
+    case -4:   /* C-G, abort */
+      rl_replace_line (cxt->lines[cxt->save_line], 0);
+      rl_point = cxt->save_point;
+      rl_mark = cxt->save_mark;
+      rl_restore_prompt();
+      rl_clear_message ();
+
+      return -1;
+
+    case -5:   /* C-W */
+      /* skip over portion of line we already matched and yank word */
+      wstart = rl_point + cxt->search_string_index;
+      if (wstart >= rl_end)
        {
-         /* This sets rl_pending_input to c; it will be picked up the next
-            time rl_read_key is called. */
-         rl_execute_next (c);
+         rl_ding ();
          break;
        }
 
-      switch (c)
+      /* if not in a word, move to one. */
+      cval = _rl_char_value (rl_line_buffer, wstart);
+      if (_rl_walphabetic (cval) == 0)
        {
-       case -1:
-         if (search_string_index == 0)
-           {
-             if (last_isearch_string)
-               {
-                 search_string_size = 64 + last_isearch_string_len;
-                 search_string = (char *)xrealloc (search_string, search_string_size);
-                 strcpy (search_string, last_isearch_string);
-                 search_string_index = last_isearch_string_len;
-                 rl_display_search (search_string, reverse, -1);
-                 break;
-               }
-             continue;
-           }
-         else if (reverse)
-           --line_index;
-         else if (line_index != sline_len)
-           ++line_index;
-         else
-           rl_ding ();
+         rl_ding ();
          break;
-
-         /* switch directions */
-       case -2:
-         direction = -direction;
-         reverse = direction < 0;
+       }
+      n = MB_NEXTCHAR (rl_line_buffer, wstart, 1, MB_FIND_NONZERO);;
+      while (n < rl_end)
+       {
+         cval = _rl_char_value (rl_line_buffer, n);
+         if (_rl_walphabetic (cval) == 0)
+           break;
+         n = MB_NEXTCHAR (rl_line_buffer, n, 1, MB_FIND_NONZERO);;
+       }
+      wlen = n - wstart + 1;
+      if (cxt->search_string_index + wlen + 1 >= cxt->search_string_size)
+       {
+         cxt->search_string_size += wlen + 1;
+         cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+       }
+      for (; wstart < n; wstart++)
+       cxt->search_string[cxt->search_string_index++] = rl_line_buffer[wstart];
+      cxt->search_string[cxt->search_string_index] = '\0';
+      break;
+
+    case -6:   /* C-Y */
+      /* skip over portion of line we already matched and yank rest */
+      wstart = rl_point + cxt->search_string_index;
+      if (wstart >= rl_end)
+       {
+         rl_ding ();
          break;
+       }
+      n = rl_end - wstart + 1;
+      if (cxt->search_string_index + n + 1 >= cxt->search_string_size)
+       {
+         cxt->search_string_size += n + 1;
+         cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+       }
+      for (n = wstart; n < rl_end; n++)
+       cxt->search_string[cxt->search_string_index++] = rl_line_buffer[n];
+      cxt->search_string[cxt->search_string_index] = '\0';
+      break;
+
+    /* Add character to search string and continue search. */
+    default:
+      if (cxt->search_string_index + 2 >= cxt->search_string_size)
+       {
+         cxt->search_string_size += 128;
+         cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
+       }
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         int j, l;
+         for (j = 0, l = strlen (cxt->mb); j < l; )
+           cxt->search_string[cxt->search_string_index++] = cxt->mb[j++];
+       }
+      else
+#endif
+       cxt->search_string[cxt->search_string_index++] = c;
+      cxt->search_string[cxt->search_string_index] = '\0';
+      break;
+    }
 
-       /* delete character from search string. */
-       case -3:        /* C-H, DEL */
-         /* This is tricky.  To do this right, we need to keep a
-            stack of search positions for the current search, with
-            sentinels marking the beginning and end.  But this will
-            do until we have a real isearch-undo. */
-         if (search_string_index == 0)
-           rl_ding ();
-         else
-           search_string[--search_string_index] = '\0';
-
-         break;
+  for (cxt->sflags &= ~(SF_FOUND|SF_FAILED);; )
+    {
+      limit = cxt->sline_len - cxt->search_string_index + 1;
 
-       case -4:        /* C-G */
-         rl_replace_line (lines[orig_line], 0);
-         rl_point = orig_point;
-         rl_mark = orig_mark;
-         rl_restore_prompt();
-         rl_clear_message ();
-         if (allocated_line)
-           free (allocated_line);
-         free (lines);
-         RL_UNSETSTATE(RL_STATE_ISEARCH);
-         return 0;
-
-       case -5:        /* C-W */
-         /* skip over portion of line we already matched */
-         wstart = rl_point + search_string_index;
-         if (wstart >= rl_end)
+      /* Search the current line. */
+      while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit))
+       {
+         if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index))
            {
-             rl_ding ();
+             cxt->sflags |= SF_FOUND;
              break;
            }
+         else
+           cxt->sline_index += cxt->direction;
+       }
+      if (cxt->sflags & SF_FOUND)
+       break;
 
-         /* if not in a word, move to one. */
-         if (rl_alphabetic(rl_line_buffer[wstart]) == 0)
-           {
-             rl_ding ();
-             break;
-           }
-         n = wstart;
-         while (n < rl_end && rl_alphabetic(rl_line_buffer[n]))
-           n++;
-         wlen = n - wstart + 1;
-         if (search_string_index + wlen + 1 >= search_string_size)
-           {
-             search_string_size += wlen + 1;
-             search_string = (char *)xrealloc (search_string, search_string_size);
-           }
-         for (; wstart < n; wstart++)
-           search_string[search_string_index++] = rl_line_buffer[wstart];
-         search_string[search_string_index] = '\0';
-         break;
+      /* Move to the next line, but skip new copies of the line
+        we just found and lines shorter than the string we're
+        searching for. */
+      do
+       {
+         /* Move to the next line. */
+         cxt->history_pos += cxt->direction;
 
-       case -6:        /* C-Y */
-         /* skip over portion of line we already matched */
-         wstart = rl_point + search_string_index;
-         if (wstart >= rl_end)
+         /* At limit for direction? */
+         if ((cxt->sflags & SF_REVERSE) ? (cxt->history_pos < 0) : (cxt->history_pos == cxt->hlen))
            {
-             rl_ding ();
+             cxt->sflags |= SF_FAILED;
              break;
            }
-         n = rl_end - wstart + 1;
-         if (search_string_index + n + 1 >= search_string_size)
-           {
-             search_string_size += n + 1;
-             search_string = (char *)xrealloc (search_string, search_string_size);
-           }
-         for (n = wstart; n < rl_end; n++)
-           search_string[search_string_index++] = rl_line_buffer[n];
-         search_string[search_string_index] = '\0';
-         break;
 
-       default:
-         /* Add character to search string and continue search. */
-         if (search_string_index + 2 >= search_string_size)
-           {
-             search_string_size += 128;
-             search_string = (char *)xrealloc (search_string, search_string_size);
-           }
-#if defined (HANDLE_MULTIBYTE)
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {
-             int j, l;
-             for (j = 0, l = strlen (mb); j < l; )
-               search_string[search_string_index++] = mb[j++];
-           }
-         else
-#endif
-           search_string[search_string_index++] = c;
-         search_string[search_string_index] = '\0';
-         break;
+         /* We will need these later. */
+         cxt->sline = cxt->lines[cxt->history_pos];
+         cxt->sline_len = strlen (cxt->sline);
        }
+      while ((cxt->prev_line_found && STREQ (cxt->prev_line_found, cxt->lines[cxt->history_pos])) ||
+            (cxt->search_string_index > cxt->sline_len));
 
-      for (found = failed = 0;;)
-       {
-         int limit = sline_len - search_string_index + 1;
+      if (cxt->sflags & SF_FAILED)
+       break;
 
-         /* Search the current line. */
-         while (reverse ? (line_index >= 0) : (line_index < limit))
-           {
-             if (STREQN (search_string, sline + line_index, search_string_index))
-               {
-                 found++;
-                 break;
-               }
-             else
-               line_index += direction;
-           }
-         if (found)
-           break;
+      /* Now set up the line for searching... */
+      cxt->sline_index = (cxt->sflags & SF_REVERSE) ? cxt->sline_len - cxt->search_string_index : 0;
+    }
 
-         /* Move to the next line, but skip new copies of the line
-            we just found and lines shorter than the string we're
-            searching for. */
-         do
-           {
-             /* Move to the next line. */
-             i += direction;
-
-             /* At limit for direction? */
-             if (reverse ? (i < 0) : (i == hlen))
-               {
-                 failed++;
-                 break;
-               }
-
-             /* We will need these later. */
-             sline = lines[i];
-             sline_len = strlen (sline);
-           }
-         while ((prev_line_found && STREQ (prev_line_found, lines[i])) ||
-                (search_string_index > sline_len));
+  if (cxt->sflags & SF_FAILED)
+    {
+      /* We cannot find the search string.  Ding the bell. */
+      rl_ding ();
+      cxt->history_pos = cxt->last_found_line;
+      return 1;
+    }
 
-         if (failed)
-           break;
+  /* We have found the search string.  Just display it.  But don't
+     actually move there in the history list until the user accepts
+     the location. */
+  if (cxt->sflags & SF_FOUND)
+    {
+      cxt->prev_line_found = cxt->lines[cxt->history_pos];
+      rl_replace_line (cxt->lines[cxt->history_pos], 0);
+      rl_point = cxt->sline_index;
+      cxt->last_found_line = cxt->history_pos;
+      rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos);
+    }
 
-         /* Now set up the line for searching... */
-         line_index = reverse ? sline_len - search_string_index : 0;
-       }
+  return 1;
+}
 
-      if (failed)
-       {
-         /* We cannot find the search string.  Ding the bell. */
-         rl_ding ();
-         i = last_found_line;
-         continue;             /* XXX - was break */
-       }
+static int
+_rl_isearch_cleanup (cxt, r)
+     _rl_search_cxt *cxt;
+     int r;
+{
+  if (r >= 0)
+    _rl_isearch_fini (cxt);
+  _rl_scxt_dispose (cxt, 0);
+  _rl_iscxt = 0;
 
-      /* We have found the search string.  Just display it.  But don't
-        actually move there in the history list until the user accepts
-        the location. */
-      if (found)
-       {
-         prev_line_found = lines[i];
-         rl_replace_line (lines[i], 0);
-         rl_point = line_index;
-         last_found_line = i;
-         rl_display_search (search_string, reverse, (i == orig_line) ? -1 : i);
-       }
-    }
+  RL_UNSETSTATE(RL_STATE_ISEARCH);
 
-  /* The searching is over.  The user may have found the string that she
-     was looking for, or else she may have exited a failing search.  If
-     LINE_INDEX is -1, then that shows that the string searched for was
-     not found.  We use this to determine where to place rl_point. */
+  return (r != 0);
+}
 
-  /* First put back the original state. */
-  strcpy (rl_line_buffer, lines[orig_line]);
+/* Search through the history looking for an interactively typed string.
+   This is analogous to i-search.  We start the search in the current line.
+   DIRECTION is which direction to search; >= 0 means forward, < 0 means
+   backwards. */
+static int
+rl_search_history (direction, invoking_key)
+     int direction, invoking_key;
+{
+  _rl_search_cxt *cxt;         /* local for now, but saved globally */
+  int c, r;
 
-  rl_restore_prompt ();
+  RL_SETSTATE(RL_STATE_ISEARCH);
+  cxt = _rl_isearch_init (direction);
 
-  /* Save the search string for possible later use. */
-  FREE (last_isearch_string);
-  last_isearch_string = search_string;
-  last_isearch_string_len = search_string_index;
+  rl_display_search (cxt->search_string, (cxt->sflags & SF_REVERSE), -1);
 
-  if (last_found_line < orig_line)
-    rl_get_previous_history (orig_line - last_found_line, 0);
-  else
-    rl_get_next_history (last_found_line - orig_line, 0);
+  /* If we are using the callback interface, all we do is set up here and
+      return.  The key is that we leave RL_STATE_ISEARCH set. */
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    return (0);
 
-  /* If the string was not found, put point at the end of the last matching
-     line.  If last_found_line == orig_line, we didn't find any matching
-     history lines at all, so put point back in its original position. */
-  if (line_index < 0)
+  r = -1;
+  for (;;)
     {
-      if (last_found_line == orig_line)
-       line_index = orig_point;
-      else
-       line_index = strlen (rl_line_buffer);
-      rl_mark = orig_mark;
+      c = _rl_search_getchar (cxt);
+      /* We might want to handle EOF here (c == 0) */
+      r = _rl_isearch_dispatch (cxt, cxt->lastc);
+      if (r <= 0)
+        break;
     }
 
-  rl_point = line_index;
-  /* Don't worry about where to put the mark here; rl_get_previous_history
-     and rl_get_next_history take care of it. */
-
-  rl_clear_message ();
+  /* The searching is over.  The user may have found the string that she
+     was looking for, or else she may have exited a failing search.  If
+     LINE_INDEX is -1, then that shows that the string searched for was
+     not found.  We use this to determine where to place rl_point. */
+  return (_rl_isearch_cleanup (cxt, r));
+}
 
-  FREE (allocated_line);
-  free (lines);
+#if defined (READLINE_CALLBACKS)
+/* Called from the callback functions when we are ready to read a key.  The
+   callback functions know to call this because RL_ISSTATE(RL_STATE_ISEARCH).
+   If _rl_isearch_dispatch finishes searching, this function is responsible
+   for turning off RL_STATE_ISEARCH, which it does using _rl_isearch_cleanup. */
+int
+_rl_isearch_callback (cxt)
+     _rl_search_cxt *cxt;
+{
+  int c, r;
 
-  RL_UNSETSTATE(RL_STATE_ISEARCH);
+  c = _rl_search_getchar (cxt);
+  /* We might want to handle EOF here */
+  r = _rl_isearch_dispatch (cxt, cxt->lastc);
 
-  return 0;
+  return (r <= 0) ? _rl_isearch_cleanup (cxt, r) : 0;
 }
+#endif
index b73c3af..2975bf1 100644 (file)
@@ -100,6 +100,8 @@ _rl_with_macro_input (string)
 int
 _rl_next_macro_key ()
 {
+  int c;
+
   if (rl_executing_macro == 0)
     return (0);
 
@@ -109,7 +111,14 @@ _rl_next_macro_key ()
       return (_rl_next_macro_key ());
     }
 
+#if defined (READLINE_CALLBACKS)
+  c = rl_executing_macro[executing_macro_index++];
+  if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD) && rl_executing_macro[executing_macro_index] == 0)
+      _rl_pop_executing_macro ();
+  return c;
+#else
   return (rl_executing_macro[executing_macro_index++]);
+#endif
 }
 
 /* Save the currently executing macro on a stack of saved macros. */
index 695845a..17dde53 100644 (file)
@@ -1,6 +1,6 @@
 /* mbutil.c -- readline multibyte character utility functions */
 
-/* Copyright (C) 2001-2004 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -77,18 +77,20 @@ _rl_find_next_mbchar_internal (string, seed, count, find_non_zero)
      char *string;
      int seed, count, find_non_zero;
 {
-  size_t tmp = 0;
+  size_t tmp;
   mbstate_t ps;
-  int point = 0;
+  int point;
   wchar_t wc;
 
+  tmp = 0;
+
   memset(&ps, 0, sizeof (mbstate_t));
   if (seed < 0)
     seed = 0;
   if (count <= 0)
     return seed;
 
-  point = seed + _rl_adjust_point(string, seed, &ps);
+  point = seed + _rl_adjust_point (string, seed, &ps);
   /* if this is true, means that seed was not pointed character
      started byte.  So correct the point and consume count */
   if (seed < point)
@@ -134,7 +136,8 @@ _rl_find_next_mbchar_internal (string, seed, count, find_non_zero)
            break;
        }
     }
-    return point;
+
+  return point;
 }
 
 static int
@@ -313,6 +316,28 @@ _rl_is_mbchar_matched (string, seed, end, mbchar, length)
       return 0;
   return 1;
 }
+
+wchar_t
+_rl_char_value (buf, ind)
+     char *buf;
+     int ind;
+{
+  size_t tmp;
+  wchar_t wc;
+  mbstate_t ps;
+  int l;
+
+  if (MB_LEN_MAX == 1 || rl_byte_oriented)
+    return ((wchar_t) buf[ind]);
+  l = strlen (buf);
+  if (ind >= l - 1)
+    return ((wchar_t) buf[ind]);
+  memset (&ps, 0, sizeof (mbstate_t));
+  tmp = mbrtowc (&wc, buf + ind, l - ind, &ps);
+  if (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp))  
+    return ((wchar_t) buf[ind]);
+  return wc;
+}
 #endif /* HANDLE_MULTIBYTE */
 
 /* Find next `count' characters started byte point of the specified seed.
index 403313a..d455832 100644 (file)
@@ -1,6 +1,6 @@
 /* misc.c -- miscellaneous bindable readline functions. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -63,6 +63,8 @@ void _rl_free_history_entry PARAMS((HIST_ENTRY *));
    to preserve the value of rl_point from line to line. */
 int _rl_history_preserve_point = 0;
 
+_rl_arg_cxt _rl_argcxt;
+
 /* Saved target point for when _rl_history_preserve_point is set.  Special
    value of -1 means that point is at the end of the line. */
 int _rl_history_saved_point = -1;
@@ -73,77 +75,74 @@ int _rl_history_saved_point = -1;
 /*                                                                 */
 /* **************************************************************** */
 
-/* Handle C-u style numeric args, as well as M--, and M-digits. */
-static int
-rl_digit_loop ()
+int
+_rl_arg_overflow ()
 {
-  int key, c, sawminus, sawdigits;
+  if (rl_numeric_arg > 1000000)
+    {
+      _rl_argcxt = 0;
+      rl_explicit_arg = rl_numeric_arg = 0;
+      rl_ding ();
+      rl_restore_prompt ();
+      rl_clear_message ();
+      RL_UNSETSTATE(RL_STATE_NUMERICARG);
+      return 1;
+    }
+  return 0;
+}
 
+void
+_rl_arg_init ()
+{
   rl_save_prompt ();
-
+  _rl_argcxt = 0;
   RL_SETSTATE(RL_STATE_NUMERICARG);
-  sawminus = sawdigits = 0;
-  while (1)
-    {
-      if (rl_numeric_arg > 1000000)
-       {
-         sawdigits = rl_explicit_arg = rl_numeric_arg = 0;
-         rl_ding ();
-         rl_restore_prompt ();
-         rl_clear_message ();
-         RL_UNSETSTATE(RL_STATE_NUMERICARG);
-         return 1;
-       }
-      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
-      RL_SETSTATE(RL_STATE_MOREINPUT);
-      key = c = rl_read_key ();
-      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+}
 
-      if (c < 0)
-       {
-         _rl_abort_internal ();
-         return -1;
-       }
+int
+_rl_arg_getchar ()
+{
+  int c;
 
-      /* If we see a key bound to `universal-argument' after seeing digits,
-        it ends the argument but is otherwise ignored. */
-      if (_rl_keymap[c].type == ISFUNC &&
-         _rl_keymap[c].function == rl_universal_argument)
-       {
-         if (sawdigits == 0)
-           {
-             rl_numeric_arg *= 4;
-             continue;
-           }
-         else
-           {
-             RL_SETSTATE(RL_STATE_MOREINPUT);
-             key = rl_read_key ();
-             RL_UNSETSTATE(RL_STATE_MOREINPUT);
-             rl_restore_prompt ();
-             rl_clear_message ();
-             RL_UNSETSTATE(RL_STATE_NUMERICARG);
-             return (_rl_dispatch (key, _rl_keymap));
-           }
-       }
+  rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  c = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
-      c = UNMETA (c);
+  return c;
+}
 
-      if (_rl_digit_p (c))
-       {
-         rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + c - '0' : c - '0';
-         sawdigits = rl_explicit_arg = 1;
-       }
-      else if (c == '-' && rl_explicit_arg == 0)
+/* Process C as part of the current numeric argument.  Return -1 if the
+   argument should be aborted, 0 if we should not read any more chars, and
+   1 if we should continue to read chars. */
+int
+_rl_arg_dispatch (cxt, c)
+     _rl_arg_cxt cxt;
+     int c;
+{
+  int key, r;
+
+  key = c;
+
+  /* If we see a key bound to `universal-argument' after seeing digits,
+      it ends the argument but is otherwise ignored. */
+  if (_rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)
+    {
+      if ((cxt & NUM_SAWDIGITS) == 0)
        {
-         rl_numeric_arg = sawminus = 1;
-         rl_arg_sign = -1;
+         rl_numeric_arg *= 4;
+         return 1;
        }
+      else if (RL_ISSTATE (RL_STATE_CALLBACK))
+        {
+          _rl_argcxt |= NUM_READONE;
+          return 0;    /* XXX */
+        }
       else
        {
-         /* Make M-- command equivalent to M--1 command. */
-         if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0)
-           rl_explicit_arg = 1;
+         RL_SETSTATE(RL_STATE_MOREINPUT);
+         key = rl_read_key ();
+         RL_UNSETSTATE(RL_STATE_MOREINPUT);
          rl_restore_prompt ();
          rl_clear_message ();
          RL_UNSETSTATE(RL_STATE_NUMERICARG);
@@ -151,35 +150,96 @@ rl_digit_loop ()
        }
     }
 
-  /*NOTREACHED*/
-}
+  c = UNMETA (c);
 
-/* Add the current digit to the argument in progress. */
-int
-rl_digit_argument (ignore, key)
-     int ignore, key;
-{
-  rl_execute_next (key);
-  return (rl_digit_loop ());
+  if (_rl_digit_p (c))
+    {
+      r = _rl_digit_value (c);         
+      rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) +  r : r;
+      rl_explicit_arg = 1;
+      _rl_argcxt |= NUM_SAWDIGITS;
+    }
+  else if (c == '-' && rl_explicit_arg == 0)
+    {
+      rl_numeric_arg = 1;
+      _rl_argcxt |= NUM_SAWMINUS;
+      rl_arg_sign = -1;
+    }
+  else
+    {
+      /* Make M-- command equivalent to M--1 command. */
+      if ((_rl_argcxt & NUM_SAWMINUS) && rl_numeric_arg == 1 && rl_explicit_arg == 0)
+       rl_explicit_arg = 1;
+      rl_restore_prompt ();
+      rl_clear_message ();
+      RL_UNSETSTATE(RL_STATE_NUMERICARG);
+
+      r = _rl_dispatch (key, _rl_keymap);
+      if (RL_ISSTATE (RL_STATE_CALLBACK))
+       {
+         /* At worst, this will cause an extra redisplay.  Otherwise,
+            we have to wait until the next character comes in. */
+         if (rl_done == 0)
+           (*rl_redisplay_function) ();
+         r = 0;
+       }
+      return r;
+    }
+
+  return 1;
 }
 
-/* What to do when you abort reading an argument. */
-int
-rl_discard_argument ()
+/* Handle C-u style numeric args, as well as M--, and M-digits. */
+static int
+rl_digit_loop ()
 {
-  rl_ding ();
-  rl_clear_message ();
-  _rl_init_argument ();
-  return 0;
+  int c, r;
+
+  while (1)
+    {
+      if (_rl_arg_overflow ())
+       return 1;
+
+      c = _rl_arg_getchar ();
+
+      if (c < 0)
+       {
+         _rl_abort_internal ();
+         return -1;
+       }
+
+      r = _rl_arg_dispatch (_rl_argcxt, c);
+      if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0))
+        break;
+    }
 }
 
 /* Create a default argument. */
-int
-_rl_init_argument ()
+void
+_rl_reset_argument ()
 {
   rl_numeric_arg = rl_arg_sign = 1;
   rl_explicit_arg = 0;
-  return 0;
+  _rl_argcxt = 0;
+}
+
+/* Start a numeric argument with initial value KEY */
+int
+rl_digit_argument (ignore, key)
+     int ignore, key;
+{
+  _rl_arg_init ();
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_arg_dispatch (_rl_argcxt, key);
+      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
+      return 0;
+    }
+  else
+    {
+      rl_execute_next (key);
+      return (rl_digit_loop ());
+    }
 }
 
 /* C-u, universal argument.  Multiply the current argument by 4.
@@ -189,8 +249,43 @@ int
 rl_universal_argument (count, key)
      int count, key;
 {
+  _rl_arg_init ();
   rl_numeric_arg *= 4;
-  return (rl_digit_loop ());
+
+  return (RL_ISSTATE (RL_STATE_CALLBACK) ? 0 : rl_digit_loop ());
+}
+
+int
+_rl_arg_callback (cxt)
+     _rl_arg_cxt cxt;
+{
+  int c, r;
+
+  c = _rl_arg_getchar ();
+
+  if (_rl_argcxt & NUM_READONE)
+    {
+      _rl_argcxt &= ~NUM_READONE;
+      rl_restore_prompt ();
+      rl_clear_message ();
+      RL_UNSETSTATE(RL_STATE_NUMERICARG);
+      rl_execute_next (c);
+      return 0;
+    }
+
+  r = _rl_arg_dispatch (cxt, c);
+  return (r != 1);
+}
+
+/* What to do when you abort reading an argument. */
+int
+rl_discard_argument ()
+{
+  rl_ding ();
+  rl_clear_message ();
+  _rl_reset_argument ();
+
+  return 0;
 }
 
 /* **************************************************************** */
@@ -225,8 +320,10 @@ _rl_free_history_entry (entry)
 {
   if (entry == 0)
     return;
-  if (entry->line)
-    free (entry->line);
+
+  FREE (entry->line);
+  FREE (entry->timestamp);
+
   free (entry);
 }
 
@@ -242,6 +339,7 @@ rl_maybe_replace_line ()
     {
       temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list);
       free (temp->line);
+      FREE (temp->timestamp);
       free (temp);
     }
   return 0;
@@ -274,6 +372,7 @@ rl_maybe_save_line ()
     {
       _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
       _rl_saved_line_for_history->line = savestring (rl_line_buffer);
+      _rl_saved_line_for_history->timestamp = (char *)NULL;
       _rl_saved_line_for_history->data = (char *)rl_undo_list;
     }
 
index a70d80f..5e9767a 100644 (file)
@@ -1,7 +1,7 @@
 /* readline.c -- a general facility for reading lines of input
    with emacs style editing and completion. */
 
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
 #include "xmalloc.h"
 
 #ifndef RL_LIBRARY_VERSION
-#  define RL_LIBRARY_VERSION "5.0"
+#  define RL_LIBRARY_VERSION "5.1"
 #endif
 
 #ifndef RL_READLINE_VERSION
-#  define RL_READLINE_VERSION  0x0500
+#  define RL_READLINE_VERSION  0x0501
 #endif
 
 extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
@@ -87,6 +87,9 @@ static void bind_arrow_keys PARAMS((void));
 static void readline_default_bindings PARAMS((void));
 static void reset_default_bindings PARAMS((void));
 
+static int _rl_subseq_result PARAMS((int, Keymap, int, int));
+static int _rl_subseq_getchar PARAMS((int));
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Line editing input utility                  */
@@ -104,6 +107,7 @@ int rl_gnu_readline_p = 1;
    By default, it is the standard emacs keymap. */
 Keymap _rl_keymap = emacs_standard_keymap;
 
+
 /* The current style of editing. */
 int rl_editing_mode = emacs_mode;
 
@@ -219,6 +223,9 @@ char *_rl_comment_begin;
 /* Keymap holding the function currently being executed. */
 Keymap rl_executing_keymap;
 
+/* Keymap we're currently using to dispatch. */
+Keymap _rl_dispatching_keymap;
+
 /* Non-zero means to erase entire line, including prompt, on empty input lines. */
 int rl_erase_empty_line = 0;
 
@@ -230,6 +237,9 @@ int rl_num_chars_to_read;
 char *rl_line_buffer = (char *)NULL;
 int rl_line_buffer_len = 0;
 
+/* Key sequence `contexts' */
+_rl_keyseq_cxt *_rl_kscxt = 0;
+
 /* Forward declarations used by the display, termcap, and history code. */
 
 /* **************************************************************** */
@@ -251,6 +261,10 @@ int _rl_convert_meta_chars_to_ascii = 1;
    rather than as a meta-prefixed escape sequence. */
 int _rl_output_meta_chars = 0;
 
+/* Non-zero means to look at the termios special characters and bind
+   them to equivalent readline functions at startup. */
+int _rl_bind_stty_chars = 1;
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Top Level Functions                         */
@@ -291,14 +305,16 @@ readline (prompt)
   rl_set_prompt (prompt);
 
   rl_initialize ();
-  (*rl_prep_term_function) (_rl_meta_flag);
+  if (rl_prep_term_function)
+    (*rl_prep_term_function) (_rl_meta_flag);
 
 #if defined (HANDLE_SIGNALS)
   rl_set_signals ();
 #endif
 
   value = readline_internal ();
-  (*rl_deprep_term_function) ();
+  if (rl_deprep_term_function)
+    (*rl_deprep_term_function) ();
 
 #if defined (HANDLE_SIGNALS)
   rl_clear_signals ();
@@ -388,6 +404,36 @@ readline_internal_teardown (eof)
   return (eof ? (char *)NULL : savestring (the_line));
 }
 
+void
+_rl_internal_char_cleanup ()
+{
+#if defined (VI_MODE)
+  /* In vi mode, when you exit insert mode, the cursor moves back
+     over the previous character.  We explicitly check for that here. */
+  if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
+    rl_vi_check ();
+#endif /* VI_MODE */
+
+  if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
+    {
+      (*rl_redisplay_function) ();
+      _rl_want_redisplay = 0;
+      rl_newline (1, '\n');
+    }
+
+  if (rl_done == 0)
+    {
+      (*rl_redisplay_function) ();
+      _rl_want_redisplay = 0;
+    }
+
+  /* If the application writer has told us to erase the entire line if
+     the only character typed was something bound to rl_newline, do so. */
+  if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
+      rl_point == 0 && rl_end == 0)
+    _rl_erase_entire_line ();
+}
+
 STATIC_CALLBACK int
 #if defined (READLINE_CALLBACKS)
 readline_internal_char ()
@@ -410,12 +456,21 @@ readline_internal_charloop ()
       code = setjmp (readline_top_level);
 
       if (code)
-       (*rl_redisplay_function) ();
+       {
+         (*rl_redisplay_function) ();
+         _rl_want_redisplay = 0;
+         /* If we get here, we're not being called from something dispatched
+            from _rl_callback_read_char(), which sets up its own value of
+            readline_top_level (saving and restoring the old, of course), so
+            we can just return here. */
+         if (RL_ISSTATE (RL_STATE_CALLBACK))
+           return (0);
+       }
 
       if (rl_pending_input == 0)
        {
          /* Then initialize the argument and number of keys read. */
-         _rl_init_argument ();
+         _rl_reset_argument ();
          rl_key_sequence_length = 0;
        }
 
@@ -449,27 +504,7 @@ readline_internal_charloop ()
       if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
        _rl_last_command_was_kill = 0;
 
-#if defined (VI_MODE)
-      /* In vi mode, when you exit insert mode, the cursor moves back
-        over the previous character.  We explicitly check for that here. */
-      if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap)
-       rl_vi_check ();
-#endif /* VI_MODE */
-
-      if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read)
-        {
-          (*rl_redisplay_function) ();
-          rl_newline (1, '\n');
-        }
-
-      if (rl_done == 0)
-       (*rl_redisplay_function) ();
-
-      /* If the application writer has told us to erase the entire line if
-         the only character typed was something bound to rl_newline, do so. */
-      if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline &&
-         rl_point == 0 && rl_end == 0)
-       _rl_erase_entire_line ();
+      _rl_internal_char_cleanup ();
 
 #if defined (READLINE_CALLBACKS)
       return 0;
@@ -519,6 +554,107 @@ _rl_set_the_line ()
   the_line = rl_line_buffer;
 }
 
+#if defined (READLINE_CALLBACKS)
+_rl_keyseq_cxt *
+_rl_keyseq_cxt_alloc ()
+{
+  _rl_keyseq_cxt *cxt;
+
+  cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt));
+
+  cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0;
+
+  cxt->okey = 0;
+  cxt->ocxt = _rl_kscxt;
+  cxt->childval = 42;          /* sentinel value */
+
+  return cxt;
+}
+
+void
+_rl_keyseq_cxt_dispose (cxt)
+    _rl_keyseq_cxt *cxt;
+{
+  free (cxt);
+}
+
+void
+_rl_keyseq_chain_dispose ()
+{
+  _rl_keyseq_cxt *cxt;
+
+  while (_rl_kscxt)
+    {
+      cxt = _rl_kscxt;
+      _rl_kscxt = _rl_kscxt->ocxt;
+      _rl_keyseq_cxt_dispose (cxt);
+    }
+}
+#endif
+
+static int
+_rl_subseq_getchar (key)
+     int key;
+{
+  int k;
+
+  if (key == ESC)
+    RL_SETSTATE(RL_STATE_METANEXT);
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  k = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+  if (key == ESC)
+    RL_UNSETSTATE(RL_STATE_METANEXT);
+
+  return k;
+}
+
+#if defined (READLINE_CALLBACKS)
+int
+_rl_dispatch_callback (cxt)
+     _rl_keyseq_cxt *cxt;
+{
+  int nkey, r;
+
+  /* For now */
+#if 1
+  /* The first time this context is used, we want to read input and dispatch
+     on it.  When traversing the chain of contexts back `up', we want to use
+     the value from the next context down.  We're simulating recursion using
+     a chain of contexts. */
+  if ((cxt->flags & KSEQ_DISPATCHED) == 0)
+    {
+      nkey = _rl_subseq_getchar (cxt->okey);
+      r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
+      cxt->flags |= KSEQ_DISPATCHED;
+    }
+  else
+    r = cxt->childval;
+#else
+  r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
+#endif
+
+  /* For now */
+  r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
+
+  if (r == 0)                  /* success! */
+    {
+      _rl_keyseq_chain_dispose ();
+      RL_UNSETSTATE (RL_STATE_MULTIKEY);
+      return r;
+    }
+
+  if (r != -3)                 /* magic value that says we added to the chain */
+    _rl_kscxt = cxt->ocxt;
+  if (_rl_kscxt)
+    _rl_kscxt->childval = r;
+  if (r != -3)
+    _rl_keyseq_cxt_dispose (cxt);
+
+  return r;
+}
+#endif /* READLINE_CALLBACKS */
+  
 /* Do the command associated with KEY in MAP.
    If the associated command is really a keymap, then read
    another key, and dispatch into that map. */
@@ -527,6 +663,7 @@ _rl_dispatch (key, map)
      register int key;
      Keymap map;
 {
+  _rl_dispatching_keymap = map;
   return _rl_dispatch_subseq (key, map, 0);
 }
 
@@ -539,6 +676,9 @@ _rl_dispatch_subseq (key, map, got_subseq)
   int r, newkey;
   char *macro;
   rl_command_func_t *func;
+#if defined (READLINE_CALLBACKS)
+  _rl_keyseq_cxt *cxt;
+#endif
 
   if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
     {
@@ -572,10 +712,6 @@ _rl_dispatch_subseq (key, map, got_subseq)
 
          rl_executing_keymap = map;
 
-#if 0
-         _rl_suppress_redisplay = (map[key].function == rl_insert) && _rl_input_available ();
-#endif
-
          rl_dispatching = 1;
          RL_SETSTATE(RL_STATE_DISPATCHING);
          r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
@@ -607,6 +743,10 @@ _rl_dispatch_subseq (key, map, got_subseq)
        }
       else
        {
+#if defined (READLINE_CALLBACKS)
+         RL_UNSETSTATE (RL_STATE_MULTIKEY);
+         _rl_keyseq_chain_dispose ();
+#endif
          _rl_abort_internal ();
          return -1;
        }
@@ -628,58 +768,43 @@ _rl_dispatch_subseq (key, map, got_subseq)
 #endif
 
          rl_key_sequence_length++;
+         _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key);
 
-         if (key == ESC)
-           RL_SETSTATE(RL_STATE_METANEXT);
-         RL_SETSTATE(RL_STATE_MOREINPUT);
-         newkey = rl_read_key ();
-         RL_UNSETSTATE(RL_STATE_MOREINPUT);
-         if (key == ESC)
-           RL_UNSETSTATE(RL_STATE_METANEXT);
+         /* Allocate new context here.  Use linked contexts (linked through
+            cxt->ocxt) to simulate recursion */
+#if defined (READLINE_CALLBACKS)
+         if (RL_ISSTATE (RL_STATE_CALLBACK))
+           {
+             /* Return 0 only the first time, to indicate success to
+                _rl_callback_read_char.  The rest of the time, we're called
+                from _rl_dispatch_callback, so we return 3 to indicate
+                special handling is necessary. */
+             r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0;
+             cxt = _rl_keyseq_cxt_alloc ();
+
+             if (got_subseq)
+               cxt->flags |= KSEQ_SUBSEQ;
+             cxt->okey = key;
+             cxt->oldmap = map;
+             cxt->dmap = _rl_dispatching_keymap;
+             cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function;
+
+             RL_SETSTATE (RL_STATE_MULTIKEY);
+             _rl_kscxt = cxt;
+
+             return r;         /* don't indicate immediate success */
+           }
+#endif
 
+         newkey = _rl_subseq_getchar (key);
          if (newkey < 0)
            {
              _rl_abort_internal ();
              return -1;
            }
 
-         r = _rl_dispatch_subseq (newkey, FUNCTION_TO_KEYMAP (map, key), got_subseq || map[ANYOTHERKEY].function);
-
-         if (r == -2)
-           /* We didn't match anything, and the keymap we're indexed into
-              shadowed a function previously bound to that prefix.  Call
-              the function.  The recursive call to _rl_dispatch_subseq has
-              already taken care of pushing any necessary input back onto
-              the input queue with _rl_unget_char. */
-           {
-#if 0
-             r = _rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key));
-#else
-             /* XXX - experimental code -- might never be executed.  Save
-                for later. */
-             Keymap m = FUNCTION_TO_KEYMAP (map, key);
-             int type = m[ANYOTHERKEY].type;
-             func = m[ANYOTHERKEY].function;
-             if (type == ISFUNC && func == rl_do_lowercase_version)
-               r = _rl_dispatch (_rl_to_lower (key), map);
-             else
-               r = _rl_dispatch (ANYOTHERKEY, m);
-#endif
-           }
-         else if (r && map[ANYOTHERKEY].function)
-           {
-             /* We didn't match (r is probably -1), so return something to
-                tell the caller that it should try ANYOTHERKEY for an
-                overridden function. */
-             _rl_unget_char (key);
-             return -2;
-           }
-         else if (r && got_subseq)
-           {
-             /* OK, back up the chain. */
-             _rl_unget_char (key);
-             return -1;
-           }
+         r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function);
+         return _rl_subseq_result (r, map, key, got_subseq);
        }
       else
        {
@@ -703,9 +828,69 @@ _rl_dispatch_subseq (key, map, got_subseq)
       _rl_vi_textmod_command (key))
     _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
 #endif
+
   return (r);
 }
 
+static int
+_rl_subseq_result (r, map, key, got_subseq)
+     int r;
+     Keymap map;
+     int key, got_subseq;
+{
+  Keymap m;
+  int type, nt;
+  rl_command_func_t *func, *nf;
+  
+  if (r == -2)
+    /* We didn't match anything, and the keymap we're indexed into
+       shadowed a function previously bound to that prefix.  Call
+       the function.  The recursive call to _rl_dispatch_subseq has
+       already taken care of pushing any necessary input back onto
+       the input queue with _rl_unget_char. */
+    {
+      m = _rl_dispatching_keymap;
+      type = m[ANYOTHERKEY].type;
+      func = m[ANYOTHERKEY].function;
+      if (type == ISFUNC && func == rl_do_lowercase_version)
+       r = _rl_dispatch (_rl_to_lower (key), map);
+      else if (type == ISFUNC && func == rl_insert)
+       {
+         /* If the function that was shadowed was self-insert, we
+            somehow need a keymap with map[key].func == self-insert.
+            Let's use this one. */
+         nt = m[key].type;
+         nf = m[key].function;
+
+         m[key].type = type;
+         m[key].function = func;
+         r = _rl_dispatch (key, m);
+         m[key].type = nt;
+         m[key].function = nf;
+       }
+      else
+       r = _rl_dispatch (ANYOTHERKEY, m);
+    }
+  else if (r && map[ANYOTHERKEY].function)
+    {
+      /* We didn't match (r is probably -1), so return something to
+        tell the caller that it should try ANYOTHERKEY for an
+        overridden function. */
+      _rl_unget_char (key);
+      _rl_dispatching_keymap = map;
+      return -2;
+    }
+  else if (r && got_subseq)
+    {
+      /* OK, back up the chain. */
+      _rl_unget_char (key);
+      _rl_dispatching_keymap = map;
+      return -1;
+    }
+
+  return r;
+}
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Initializations                             */
@@ -863,7 +1048,8 @@ readline_initialize_everything ()
 static void
 readline_default_bindings ()
 {
-  rl_tty_set_default_bindings (_rl_keymap);
+  if (_rl_bind_stty_chars)
+    rl_tty_set_default_bindings (_rl_keymap);
 }
 
 /* Reset the default bindings for the terminal special characters we're
@@ -871,8 +1057,11 @@ readline_default_bindings ()
 static void
 reset_default_bindings ()
 {
-  rl_tty_unset_default_bindings (_rl_keymap);
-  rl_tty_set_default_bindings (_rl_keymap);
+  if (_rl_bind_stty_chars)
+    {
+      rl_tty_unset_default_bindings (_rl_keymap);
+      rl_tty_set_default_bindings (_rl_keymap);
+    }
 }
 
 /* Bind some common arrow key sequences in MAP. */
@@ -906,6 +1095,13 @@ bind_arrow_keys_internal (map)
   rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line);
   rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line);
 
+#if defined (__MINGW32__)
+  rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history);
+  rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history);
+  rl_bind_keyseq_if_unbound ("\340M", rl_forward_char);
+  rl_bind_keyseq_if_unbound ("\340K", rl_backward_char);
+#endif
+
   _rl_keymap = xkeymap;
 }
 
index 222b317..fade6d4 100644 (file)
@@ -1,6 +1,6 @@
 /* Readline.h -- the names of functions callable from within readline. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -40,9 +40,9 @@ extern "C" {
 #endif
 
 /* Hex-encoded Readline version number. */
-#define RL_READLINE_VERSION    0x0500          /* Readline 5.0 */
+#define RL_READLINE_VERSION    0x0501          /* Readline 5.1 */
 #define RL_VERSION_MAJOR       5
-#define RL_VERSION_MINOR       0
+#define RL_VERSION_MINOR       1
 
 /* Readline data structures. */
 
@@ -241,6 +241,7 @@ extern int rl_vi_column PARAMS((int, int));
 extern int rl_vi_delete_to PARAMS((int, int));
 extern int rl_vi_change_to PARAMS((int, int));
 extern int rl_vi_yank_to PARAMS((int, int));
+extern int rl_vi_rubout PARAMS((int, int));
 extern int rl_vi_delete PARAMS((int, int));
 extern int rl_vi_back_to_indent PARAMS((int, int));
 extern int rl_vi_first_print PARAMS((int, int));
@@ -302,6 +303,8 @@ extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keym
 extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *));
 extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap));
 extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap));
+
+extern char *rl_variable_value PARAMS((const char *));
 extern int rl_variable_bind PARAMS((const char *, const char *));
 
 /* Backwards compatibility, use rl_bind_keyseq_in_map instead. */
@@ -401,6 +404,7 @@ extern int rl_reset_terminal PARAMS((const char *));
 extern void rl_resize_terminal PARAMS((void));
 extern void rl_set_screen_size PARAMS((int, int));
 extern void rl_get_screen_size PARAMS((int *, int *));
+extern void rl_reset_screen_size PARAMS((void));
 
 extern char *rl_get_termcap PARAMS((const char *));
 
@@ -528,6 +532,11 @@ extern const char *rl_terminal_name;
 extern FILE *rl_instream;
 extern FILE *rl_outstream;
 
+/* If non-zero, Readline gives values of LINES and COLUMNS from the environment
+   greater precedence than values fetched from the kernel when computing the
+   screen dimensions. */
+extern int rl_prefer_env_winsize;
+
 /* If non-zero, then this is the address of a function to call just
    before readline_internal () prints the first prompt. */
 extern rl_hook_func_t *rl_startup_hook;
@@ -759,29 +768,33 @@ extern int rl_inhibit_completion;
 #define MULT_MATCH      2
 
 /* Possible state values for rl_readline_state */
-#define RL_STATE_NONE          0x00000         /* no state; before first call */
-
-#define RL_STATE_INITIALIZING  0x00001         /* initializing */
-#define RL_STATE_INITIALIZED   0x00002         /* initialization done */
-#define RL_STATE_TERMPREPPED   0x00004         /* terminal is prepped */
-#define RL_STATE_READCMD       0x00008         /* reading a command key */
-#define RL_STATE_METANEXT      0x00010         /* reading input after ESC */
-#define RL_STATE_DISPATCHING   0x00020         /* dispatching to a command */
-#define RL_STATE_MOREINPUT     0x00040         /* reading more input in a command function */
-#define RL_STATE_ISEARCH       0x00080         /* doing incremental search */
-#define RL_STATE_NSEARCH       0x00100         /* doing non-inc search */
-#define RL_STATE_SEARCH                0x00200         /* doing a history search */
-#define RL_STATE_NUMERICARG    0x00400         /* reading numeric argument */
-#define RL_STATE_MACROINPUT    0x00800         /* getting input from a macro */
-#define RL_STATE_MACRODEF      0x01000         /* defining keyboard macro */
-#define RL_STATE_OVERWRITE     0x02000         /* overwrite mode */
-#define RL_STATE_COMPLETING    0x04000         /* doing completion */
-#define RL_STATE_SIGHANDLER    0x08000         /* in readline sighandler */
-#define RL_STATE_UNDOING       0x10000         /* doing an undo */
-#define RL_STATE_INPUTPENDING  0x20000         /* rl_execute_next called */
-#define RL_STATE_TTYCSAVED     0x40000         /* tty special chars saved */
-
-#define RL_STATE_DONE          0x80000         /* done; accepted line */
+#define RL_STATE_NONE          0x000000                /* no state; before first call */
+
+#define RL_STATE_INITIALIZING  0x000001        /* initializing */
+#define RL_STATE_INITIALIZED   0x000002        /* initialization done */
+#define RL_STATE_TERMPREPPED   0x000004        /* terminal is prepped */
+#define RL_STATE_READCMD       0x000008        /* reading a command key */
+#define RL_STATE_METANEXT      0x000010        /* reading input after ESC */
+#define RL_STATE_DISPATCHING   0x000020        /* dispatching to a command */
+#define RL_STATE_MOREINPUT     0x000040        /* reading more input in a command function */
+#define RL_STATE_ISEARCH       0x000080        /* doing incremental search */
+#define RL_STATE_NSEARCH       0x000100        /* doing non-inc search */
+#define RL_STATE_SEARCH                0x000200        /* doing a history search */
+#define RL_STATE_NUMERICARG    0x000400        /* reading numeric argument */
+#define RL_STATE_MACROINPUT    0x000800        /* getting input from a macro */
+#define RL_STATE_MACRODEF      0x001000        /* defining keyboard macro */
+#define RL_STATE_OVERWRITE     0x002000        /* overwrite mode */
+#define RL_STATE_COMPLETING    0x004000        /* doing completion */
+#define RL_STATE_SIGHANDLER    0x008000        /* in readline sighandler */
+#define RL_STATE_UNDOING       0x010000        /* doing an undo */
+#define RL_STATE_INPUTPENDING  0x020000        /* rl_execute_next called */
+#define RL_STATE_TTYCSAVED     0x040000        /* tty special chars saved */
+#define RL_STATE_CALLBACK      0x080000        /* using the callback interface */
+#define RL_STATE_VIMOTION      0x100000        /* reading vi motion arg */
+#define RL_STATE_MULTIKEY      0x200000        /* reading multiple-key command */
+#define RL_STATE_VICMDONCE     0x400000        /* entered vi command mode at least once */
+
+#define RL_STATE_DONE          0x800000        /* done; accepted line */
 
 #define RL_SETSTATE(x)         (rl_readline_state |= (x))
 #define RL_UNSETSTATE(x)       (rl_readline_state &= ~(x))
index 0d60040..0f6c874 100644 (file)
@@ -2,7 +2,7 @@
    for readline.  This should be included after any files that define
    system-specific constants like _POSIX_VERSION or USG. */
 
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file contains the Readline Library (the Library), a set of
    routines for providing Emacs style line input to programs that ask
 #  if defined (HAVE_TERMIO_H)
 #    define TERMIO_TTY_DRIVER
 #  else
-#    define NEW_TTY_DRIVER
+#    if !defined (__MINGW32__)
+#      define NEW_TTY_DRIVER
+#    else
+#      define NO_TTY_DRIVER
+#    endif
 #  endif
 #endif
 
index 77cc026..11adacb 100644 (file)
@@ -97,6 +97,21 @@ extern int _rl_read_mbstring PARAMS((int, char *, int));
 
 extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
 
+extern wchar_t _rl_char_value PARAMS((char *, int));
+extern int _rl_walphabetic PARAMS((wchar_t));
+
+#define _rl_to_wupper(wc)      (iswlower (wc) ? towupper (wc) : (wc))
+#define _rl_to_wlower(wc)      (iswupper (wc) ? towlower (wc) : (wc))
+
+#define MB_NEXTCHAR(b,s,c,f) \
+       ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
+               ? _rl_find_next_mbchar ((b), (s), (c), (f)) \
+               : ((s) + (c)))
+#define MB_PREVCHAR(b,s,f) \
+       ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
+               ? _rl_find_prev_mbchar ((b), (s), (f)) \
+               : ((s) - 1))
+
 #define MB_INVALIDCH(x)                ((x) == (size_t)-1 || (x) == (size_t)-2)
 #define MB_NULLWCH(x)          ((x) == 0)
 
@@ -111,6 +126,16 @@ extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
 #define _rl_find_prev_mbchar(b, i, f)          (((i) == 0) ? (i) : ((i) - 1))
 #define _rl_find_next_mbchar(b, i1, i2, f)     ((i1) + (i2))
 
+#define _rl_char_value(buf,ind)        ((buf)[(ind)])
+
+#define _rl_walphabetic(c)     (rl_alphabetic (c))
+
+#define _rl_to_wupper(c)       (_rl_to_upper (c))
+#define _rl_to_wlower(c)       (_rl_to_lower (c))
+
+#define MB_NEXTCHAR(b,s,c,f)   ((s) + (c))
+#define MB_PREVCHAR(b,s,f)     ((s) - 1)
+
 #define MB_INVALIDCH(x)                (0)
 #define MB_NULLWCH(x)          (0)
 
index c3cee91..1c216ea 100644 (file)
@@ -1,7 +1,7 @@
 /* rlprivate.h -- functions and variables global to the readline library,
                  but not intended for use by applications. */
 
-/* Copyright (C) 1999-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
 
 /*************************************************************************
  *                                                                      *
+ * Global structs undocumented in texinfo manual and not in readline.h   *
+ *                                                                      *
+ *************************************************************************/
+/* search types */
+#define RL_SEARCH_ISEARCH      0x01            /* incremental search */
+#define RL_SEARCH_NSEARCH      0x02            /* non-incremental search */
+#define RL_SEARCH_CSEARCH      0x04            /* intra-line char search */
+
+/* search flags */
+#define SF_REVERSE             0x01
+#define SF_FOUND               0x02
+#define SF_FAILED              0x04
+
+typedef struct  __rl_search_context
+{
+  int type;
+  int sflags;
+
+  char *search_string;
+  int search_string_index;
+  int search_string_size;
+
+  char **lines;
+  char *allocated_line;    
+  int hlen;
+  int hindex;
+
+  int save_point;
+  int save_mark;
+  int save_line;
+  int last_found_line;
+  char *prev_line_found;
+
+  UNDO_LIST *save_undo_list;
+
+  int history_pos;
+  int direction;
+
+  int lastc;
+#if defined (HANDLE_MULTIBYTE)
+  char mb[MB_LEN_MAX];
+#endif
+
+  char *sline;
+  int sline_len;
+  int sline_index;
+
+  char  *search_terminators;
+} _rl_search_cxt;
+
+/* Callback data for reading numeric arguments */
+#define NUM_SAWMINUS   0x01
+#define NUM_SAWDIGITS  0x02
+#define NUM_READONE    0x04
+
+typedef int _rl_arg_cxt;
+
+/* A context for reading key sequences longer than a single character when
+   using the callback interface. */
+#define KSEQ_DISPATCHED        0x01
+#define KSEQ_SUBSEQ    0x02
+#define KSEQ_RECURSIVE 0x04
+
+typedef struct __rl_keyseq_context
+{
+  int flags;
+  int subseq_arg;
+  int subseq_retval;           /* XXX */
+  Keymap dmap;
+
+  Keymap oldmap;
+  int okey;
+  struct __rl_keyseq_context *ocxt;
+  int childval;
+} _rl_keyseq_cxt;
+
+  /* fill in more as needed */
+/* `Generic' callback data and functions */
+typedef struct __rl_callback_generic_arg 
+{
+  int count;
+  int i1, i2;
+  /* add here as needed */
+} _rl_callback_generic_arg;
+
+typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *));
+
+/*************************************************************************
+ *                                                                      *
  * Global functions undocumented in texinfo manual and not in readline.h *
  *                                                                      *
  *************************************************************************/
@@ -54,6 +143,8 @@ extern int readline_echoing_p;
 extern int rl_key_sequence_length;
 extern int rl_byte_oriented;
 
+extern _rl_keyseq_cxt *_rl_kscxt;
+
 /* display.c */
 extern int rl_display_fixed;
 
@@ -100,6 +191,16 @@ extern void readline_internal_setup PARAMS((void));
 extern char *readline_internal_teardown PARAMS((int));
 extern int readline_internal_char PARAMS((void));
 
+extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void));
+extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *));
+extern void _rl_keyseq_chain_dispose PARAMS((void));
+
+extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *));
+     
+/* callback.c */
+extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int));
+extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *));
+
 #endif /* READLINE_CALLBACKS */
 
 /* bind.c */
@@ -132,6 +233,15 @@ extern void _rl_insert_typein PARAMS((int));
 extern int _rl_unget_char PARAMS((int));
 extern int _rl_pushed_input_available PARAMS((void));
 
+/* isearch.c */
+extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int));
+extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int));
+
+extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int));
+extern int _rl_isearch_callback PARAMS((_rl_search_cxt *));
+
+extern int _rl_search_getchar PARAMS((_rl_search_cxt *));
+
 /* macro.c */
 extern void _rl_with_macro_input PARAMS((char *));
 extern int _rl_next_macro_key PARAMS((void));
@@ -141,7 +251,12 @@ extern void _rl_add_macro_char PARAMS((int));
 extern void _rl_kill_kbd_macro PARAMS((void));
 
 /* misc.c */
-extern int _rl_init_argument PARAMS((void));
+extern int _rl_arg_overflow PARAMS((void));
+extern void _rl_arg_init PARAMS((void));
+extern int _rl_arg_getchar PARAMS((void));
+extern int _rl_arg_callback PARAMS((_rl_arg_cxt));
+extern void _rl_reset_argument PARAMS((void));
+
 extern void _rl_start_using_history PARAMS((void));
 extern int _rl_free_saved_history_line PARAMS((void));
 extern void _rl_set_insert_mode PARAMS((int, int));
@@ -157,11 +272,15 @@ extern void _rl_init_line_state PARAMS((void));
 extern void _rl_set_the_line PARAMS((void));
 extern int _rl_dispatch PARAMS((int, Keymap));
 extern int _rl_dispatch_subseq PARAMS((int, Keymap, int));
+extern void _rl_internal_char_cleanup PARAMS((void));
 
 /* rltty.c */
 extern int _rl_disable_tty_signals PARAMS((void));
 extern int _rl_restore_tty_signals PARAMS((void));
 
+/* search.c */
+extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *));
+
 /* terminal.c */
 extern void _rl_get_screen_size PARAMS((int, int));
 extern int _rl_init_terminal_io PARAMS((const char *));
@@ -217,6 +336,10 @@ extern void _rl_vi_done_inserting PARAMS((void));
 extern const char *_rl_possible_control_prefixes[];
 extern const char *_rl_possible_meta_prefixes[];
 
+/* callback.c */
+extern _rl_callback_func_t *_rl_callback_func;
+extern _rl_callback_generic_arg *_rl_callback_data;
+
 /* complete.c */
 extern int _rl_complete_show_all;
 extern int _rl_complete_show_unmodified;
@@ -231,11 +354,14 @@ extern int _rl_page_completions;
 extern int _rl_vis_botlin;
 extern int _rl_last_c_pos;
 extern int _rl_suppress_redisplay;
+extern int _rl_want_redisplay;
 extern char *rl_display_prompt;
 
 /* isearch.c */
 extern char *_rl_isearch_terminators;
 
+extern _rl_search_cxt *_rl_iscxt;
+
 /* macro.c */
 extern char *_rl_executing_macro;
 
@@ -243,6 +369,8 @@ extern char *_rl_executing_macro;
 extern int _rl_history_preserve_point;
 extern int _rl_history_saved_point;
 
+extern _rl_arg_cxt _rl_argcxt;
+
 /* readline.c */
 extern int _rl_horizontal_scroll_mode;
 extern int _rl_mark_modified_lines;
@@ -250,6 +378,7 @@ extern int _rl_bell_preference;
 extern int _rl_meta_flag;
 extern int _rl_convert_meta_chars_to_ascii;
 extern int _rl_output_meta_chars;
+extern int _rl_bind_stty_chars;
 extern char *_rl_comment_begin;
 extern unsigned char _rl_parsing_conditionalized_out;
 extern Keymap _rl_keymap;
@@ -259,6 +388,9 @@ extern int _rl_last_command_was_kill;
 extern int _rl_eof_char;
 extern procenv_t readline_top_level;
 
+/* search.c */
+extern _rl_search_cxt *_rl_nscxt;
+
 /* terminal.c */
 extern int _rl_enable_keypad;
 extern int _rl_enable_meta;
index 1a31f35..9a0326e 100644 (file)
@@ -1,7 +1,7 @@
 /* rltty.c -- functions to prepare and restore the terminal for readline's
    use. */
 
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -152,7 +152,9 @@ set_winsize (tty)
 #endif /* TIOCGWINSZ */
 }
 
-#if defined (NEW_TTY_DRIVER)
+#if defined (NO_TTY_DRIVER)
+/* Nothing */
+#elif defined (NEW_TTY_DRIVER)
 
 /* Values for the `flags' field of a struct bsdtty.  This tells which
    elements of the struct bsdtty have been fetched from the system and
@@ -233,6 +235,7 @@ get_tty_settings (tty, tiop)
 
   tiop->flags = tiop->lflag = 0;
 
+  errno = 0;
   if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0)
     return -1;
   tiop->flags |= SGTTY_SET;
@@ -518,6 +521,7 @@ get_tty_settings (tty, tiop)
 {
   set_winsize (tty);
 
+  errno = 0;
   if (_get_tty_settings (tty, tiop) < 0)
     return -1;
 
@@ -631,9 +635,23 @@ prepare_terminal_settings (meta_flag, oldtio, tiop)
 
 #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */
 }
-#endif  /* NEW_TTY_DRIVER */
+#endif  /* !NEW_TTY_DRIVER */
 
 /* Put the terminal in CBREAK mode so that we can detect key presses. */
+#if defined (NO_TTY_DRIVER)
+void
+rl_prep_terminal (meta_flag)
+     int meta_flag;
+{
+  readline_echoing_p = 1;
+}
+
+void
+rl_deprep_terminal ()
+{
+}
+
+#else /* ! NO_TTY_DRIVER */
 void
 rl_prep_terminal (meta_flag)
      int meta_flag;
@@ -651,16 +669,43 @@ rl_prep_terminal (meta_flag)
 
   if (get_tty_settings (tty, &tio) < 0)
     {
+#if defined (ENOTSUP)
+      /* MacOS X, at least, lies about the value of errno if tcgetattr fails. */
+      if (errno == ENOTTY || errno == ENOTSUP)
+#else
+      if (errno == ENOTTY)
+#endif
+       readline_echoing_p = 1;         /* XXX */
       release_sigint ();
       return;
     }
 
   otio = tio;
 
-  rl_tty_unset_default_bindings (_rl_keymap);
+  if (_rl_bind_stty_chars)
+    {
+#if defined (VI_MODE)
+      /* If editing in vi mode, make sure we restore the bindings in the
+        insertion keymap no matter what keymap we ended up in. */
+      if (rl_editing_mode == vi_mode)
+       rl_tty_unset_default_bindings (vi_insertion_keymap);
+      else
+#endif
+       rl_tty_unset_default_bindings (_rl_keymap);
+    }
   save_tty_chars (&otio);
   RL_SETSTATE(RL_STATE_TTYCSAVED);
-  _rl_bind_tty_special_chars (_rl_keymap, tio);
+  if (_rl_bind_stty_chars)
+    {
+#if defined (VI_MODE)
+      /* If editing in vi mode, make sure we set the bindings in the
+        insertion keymap no matter what keymap we ended up in. */
+      if (rl_editing_mode == vi_mode)
+       _rl_bind_tty_special_chars (vi_insertion_keymap, tio);  
+      else
+#endif
+       _rl_bind_tty_special_chars (_rl_keymap, tio);
+    }
 
   prepare_terminal_settings (meta_flag, otio, &tio);
 
@@ -710,6 +755,7 @@ rl_deprep_terminal ()
 
   release_sigint ();
 }
+#endif /* !NO_TTY_DRIVER */
 \f
 /* **************************************************************** */
 /*                                                                 */
@@ -721,6 +767,10 @@ int
 rl_restart_output (count, key)
      int count, key;
 {
+#if defined (__MINGW32__)
+  return 0;
+#else /* !__MING32__ */
+
   int fildes = fileno (rl_outstream);
 #if defined (TIOCSTART)
 #if defined (apollo)
@@ -748,12 +798,17 @@ rl_restart_output (count, key)
 #endif /* !TIOCSTART */
 
   return 0;
+#endif /* !__MINGW32__ */
 }
 
 int
 rl_stop_output (count, key)
      int count, key;
 {
+#if defined (__MINGW32__)
+  return 0;
+#else
+
   int fildes = fileno (rl_instream);
 
 #if defined (TIOCSTOP)
@@ -776,6 +831,7 @@ rl_stop_output (count, key)
 #endif /* !TIOCSTOP */
 
   return 0;
+#endif /* !__MINGW32__ */
 }
 
 /* **************************************************************** */
@@ -784,9 +840,16 @@ rl_stop_output (count, key)
 /*                                                                 */
 /* **************************************************************** */
 
+#if !defined (NO_TTY_DRIVER)
 #define SET_SPECIAL(sc, func)  set_special_char(kmap, &ttybuff, sc, func)
+#endif
 
-#if defined (NEW_TTY_DRIVER)
+#if defined (NO_TTY_DRIVER)
+
+#define SET_SPECIAL(sc, func)
+#define RESET_SPECIAL(c)
+
+#elif defined (NEW_TTY_DRIVER)
 static void
 set_special_char (kmap, tiop, sc, func)
      Keymap kmap;
@@ -867,6 +930,7 @@ void
 rltty_set_default_bindings (kmap)
      Keymap kmap;
 {
+#if !defined (NO_TTY_DRIVER)
   TIOTYPE ttybuff;
   int tty;
   static int called = 0;
@@ -875,6 +939,7 @@ rltty_set_default_bindings (kmap)
 
   if (get_tty_settings (tty, &ttybuff) == 0)
     _rl_bind_tty_special_chars (kmap, ttybuff);
+#endif
 }
 
 /* New public way to set the system default editing chars to their readline
@@ -912,7 +977,7 @@ rl_tty_unset_default_bindings (kmap)
 
 #if defined (HANDLE_SIGNALS)
 
-#if defined (NEW_TTY_DRIVER)
+#if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER)
 int
 _rl_disable_tty_signals ()
 {
index ce7d54e..8013916 100644 (file)
@@ -1,6 +1,6 @@
 /* search.c - code for non-incremental searching in emacs and vi modes. */
 
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2005 Free Software Foundation, Inc.
 
    This file is part of the Readline Library (the Library), a set of
    routines for providing Emacs style line input to programs that ask
@@ -53,6 +53,8 @@
 #endif
 #define abs(x)         (((x) >= 0) ? (x) : -(x))
 
+_rl_search_cxt *_rl_nscxt = 0;
+
 extern HIST_ENTRY *_rl_saved_line_for_history;
 
 /* Functions imported from the rest of the library. */
@@ -68,13 +70,19 @@ static int rl_history_search_pos;
 static char *history_search_string;
 static int history_string_size;
 
+static UNDO_LIST *noninc_saved_undo_list;
 static void make_history_line_current PARAMS((HIST_ENTRY *));
 static int noninc_search_from_pos PARAMS((char *, int, int));
-static void noninc_dosearch PARAMS((char *, int));
-static void noninc_search PARAMS((int, int));
+static int noninc_dosearch PARAMS((char *, int));
+static int noninc_search PARAMS((int, int));
 static int rl_history_search_internal PARAMS((int, int));
 static void rl_history_search_reinit PARAMS((void));
 
+static _rl_search_cxt *_rl_nsearch_init PARAMS((int, int));
+static int _rl_nsearch_cleanup PARAMS((_rl_search_cxt *, int));
+static void _rl_nsearch_abort PARAMS((_rl_search_cxt *));
+static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int));
+
 /* Make the data from the history entry ENTRY be the contents of the
    current line.  This doesn't do anything with rl_point; the caller
    must set it. */
@@ -82,12 +90,15 @@ static void
 make_history_line_current (entry)
      HIST_ENTRY *entry;
 {
-#if 0
-  rl_replace_line (entry->line, 1);
-  rl_undo_list = (UNDO_LIST *)entry->data;
-#else
   _rl_replace_text (entry->line, 0, rl_end);
   _rl_fix_point (1);
+#if defined (VI_MODE)
+  if (rl_editing_mode == vi_mode)
+    /* POSIX.2 says that the `U' command doesn't affect the copy of any
+       command lines to the edit line.  We're going to implement that by
+       making the undo list start after the matching line is copied to the
+       current editing buffer. */
+    rl_free_undo_list ();
 #endif
 
   if (_rl_saved_line_for_history)
@@ -130,8 +141,8 @@ noninc_search_from_pos (string, pos, dir)
 
 /* Search for a line in the history containing STRING.  If DIR is < 0, the
    search is backwards through previous entries, else through subsequent
-   entries. */
-static void
+   entries.  Returns 1 if the search was successful, 0 otherwise. */
+static int
 noninc_dosearch (string, dir)
      char *string;
      int dir;
@@ -142,7 +153,7 @@ noninc_dosearch (string, dir)
   if (string == 0 || *string == '\0' || noninc_history_pos < 0)
     {
       rl_ding ();
-      return;
+      return 0;
     }
 
   pos = noninc_search_from_pos (string, noninc_history_pos + dir, dir);
@@ -153,7 +164,7 @@ noninc_dosearch (string, dir)
       rl_clear_message ();
       rl_point = 0;
       rl_ding ();
-      return;
+      return 0;
     }
 
   noninc_history_pos = pos;
@@ -164,7 +175,7 @@ noninc_dosearch (string, dir)
 #if defined (VI_MODE)
   if (rl_editing_mode != vi_mode)
 #endif
-  history_set_pos (oldpos);
+    history_set_pos (oldpos);
 
   make_history_line_current (entry);
 
@@ -172,27 +183,24 @@ noninc_dosearch (string, dir)
   rl_mark = rl_end;
 
   rl_clear_message ();
+  return 1;
 }
 
-/* Search non-interactively through the history list.  DIR < 0 means to
-   search backwards through the history of previous commands; otherwise
-   the search is for commands subsequent to the current position in the
-   history list.  PCHAR is the character to use for prompting when reading
-   the search string; if not specified (0), it defaults to `:'. */
-static void
-noninc_search (dir, pchar)
-     int dir;
-     int pchar;
+static _rl_search_cxt *
+_rl_nsearch_init (dir, pchar)
+     int dir, pchar;
 {
-  int saved_point, saved_mark, c;
+  _rl_search_cxt *cxt;
   char *p;
-#if defined (HANDLE_MULTIBYTE)
-  char mb[MB_LEN_MAX];
-#endif
+
+  cxt = _rl_scxt_alloc (RL_SEARCH_NSEARCH, 0);
+  if (dir < 0)
+    cxt->sflags |= SF_REVERSE;         /* not strictly needed */
+
+  cxt->direction = dir;
+  cxt->history_pos = cxt->save_line;
 
   rl_maybe_save_line ();
-  saved_point = rl_point;
-  saved_mark = rl_mark;
 
   /* Clear the undo list, since reading the search string should create its
      own undo list, and the whole list will end up being freed when we
@@ -207,99 +215,169 @@ noninc_search (dir, pchar)
   rl_message (p, 0, 0);
   free (p);
 
-#define SEARCH_RETURN rl_restore_prompt (); RL_UNSETSTATE(RL_STATE_NSEARCH); return
-
   RL_SETSTATE(RL_STATE_NSEARCH);
-  /* Read the search string. */
-  while (1)
+
+  _rl_nscxt = cxt;
+
+  return cxt;
+}
+
+static int
+_rl_nsearch_cleanup (cxt, r)
+     _rl_search_cxt *cxt;
+     int r;
+{
+  _rl_scxt_dispose (cxt, 0);
+  _rl_nscxt = 0;
+
+  RL_UNSETSTATE(RL_STATE_NSEARCH);
+
+  return (r != 1);
+}
+
+static void
+_rl_nsearch_abort (cxt)
+     _rl_search_cxt *cxt;
+{
+  rl_maybe_unsave_line ();
+  rl_clear_message ();
+  rl_point = cxt->save_point;
+  rl_mark = cxt->save_mark;
+  rl_restore_prompt ();
+
+  RL_UNSETSTATE (RL_STATE_NSEARCH);
+}
+
+/* Process just-read character C according to search context CXT.  Return -1
+   if the caller should abort the search, 0 if we should break out of the
+   loop, and 1 if we should continue to read characters. */
+static int
+_rl_nsearch_dispatch (cxt, c)
+     _rl_search_cxt *cxt;
+     int c;
+{
+  switch (c)
     {
-      RL_SETSTATE(RL_STATE_MOREINPUT);
-      c = rl_read_key ();
-      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+    case CTRL('W'):
+      rl_unix_word_rubout (1, c);
+      break;
 
-#if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       c = _rl_read_mbstring (c, mb, MB_LEN_MAX);
-#endif
+    case CTRL('U'):
+      rl_unix_line_discard (1, c);
+      break;
 
-      if (c == 0)
-       break;
+    case RETURN:
+    case NEWLINE:
+      return 0;
 
-      switch (c)
+    case CTRL('H'):
+    case RUBOUT:
+      if (rl_point == 0)
        {
-       case CTRL('H'):
-       case RUBOUT:
-         if (rl_point == 0)
-           {
-             rl_maybe_unsave_line ();
-             rl_clear_message ();
-             rl_point = saved_point;
-             rl_mark = saved_mark;
-             SEARCH_RETURN;
-           }
-         _rl_rubout_char (1, c);
-         break;
-
-       case CTRL('W'):
-         rl_unix_word_rubout (1, c);
-         break;
-
-       case CTRL('U'):
-         rl_unix_line_discard (1, c);
-         break;
-
-       case RETURN:
-       case NEWLINE:
-         goto dosearch;
-         /* NOTREACHED */
-         break;
-
-       case CTRL('C'):
-       case CTRL('G'):
-         rl_maybe_unsave_line ();
-         rl_clear_message ();
-         rl_point = saved_point;
-         rl_mark = saved_mark;
-         rl_ding ();
-         SEARCH_RETURN;
+         _rl_nsearch_abort (cxt);
+         return -1;
+       }
+      _rl_rubout_char (1, c);
+      break;
+
+    case CTRL('C'):
+    case CTRL('G'):
+      rl_ding ();
+      _rl_nsearch_abort (cxt);
+      return -1;
 
-       default:
+    default:
 #if defined (HANDLE_MULTIBYTE)
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           rl_insert_text (mb);
-         else
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       rl_insert_text (cxt->mb);
+      else
 #endif
-           _rl_insert_char (1, c);
-         break;
-       }
-      (*rl_redisplay_function) ();
+       _rl_insert_char (1, c);
+      break;
     }
 
- dosearch:
-  rl_mark = saved_mark;
+  (*rl_redisplay_function) ();
+  return 1;
+}
+
+/* Perform one search according to CXT, using NONINC_SEARCH_STRING.  Return
+   -1 if the search should be aborted, any other value means to clean up
+   using _rl_nsearch_cleanup ().  Returns 1 if the search was successful,
+   0 otherwise. */
+static int
+_rl_nsearch_dosearch (cxt)
+     _rl_search_cxt *cxt;
+{
+  rl_mark = cxt->save_mark;
 
   /* If rl_point == 0, we want to re-use the previous search string and
      start from the saved history position.  If there's no previous search
      string, punt. */
   if (rl_point == 0)
     {
-      if (!noninc_search_string)
+      if (noninc_search_string == 0)
        {
          rl_ding ();
-         SEARCH_RETURN;
+         rl_restore_prompt ();
+         RL_UNSETSTATE (RL_STATE_NSEARCH);
+         return -1;
        }
     }
   else
     {
       /* We want to start the search from the current history position. */
-      noninc_history_pos = where_history ();
+      noninc_history_pos = cxt->save_line;
       FREE (noninc_search_string);
       noninc_search_string = savestring (rl_line_buffer);
+
+      /* If we don't want the subsequent undo list generated by the search
+        matching a history line to include the contents of the search string,
+        we need to clear rl_line_buffer here.  For now, we just clear the
+        undo list generated by reading the search string.  (If the search
+        fails, the old undo list will be restored by rl_maybe_unsave_line.) */
+      rl_free_undo_list ();
     }
 
   rl_restore_prompt ();
-  noninc_dosearch (noninc_search_string, dir);
-  RL_UNSETSTATE(RL_STATE_NSEARCH);
+  return (noninc_dosearch (noninc_search_string, cxt->direction));
+}
+
+/* Search non-interactively through the history list.  DIR < 0 means to
+   search backwards through the history of previous commands; otherwise
+   the search is for commands subsequent to the current position in the
+   history list.  PCHAR is the character to use for prompting when reading
+   the search string; if not specified (0), it defaults to `:'. */
+static int
+noninc_search (dir, pchar)
+     int dir;
+     int pchar;
+{
+  _rl_search_cxt *cxt;
+  int c, r;
+
+  cxt = _rl_nsearch_init (dir, pchar);
+
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    return (0);
+
+  /* Read the search string. */
+  r = 0;
+  while (1)
+    {
+      c = _rl_search_getchar (cxt);
+
+      if (c == 0)
+       break;
+
+      r = _rl_nsearch_dispatch (cxt, c);
+      if (r < 0)
+        return 1;
+      else if (r == 0)
+       break;        
+    }
+
+  r = _rl_nsearch_dosearch (cxt);
+  return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1));
 }
 
 /* Search forward through the history list for a string.  If the vi-mode
@@ -308,8 +386,7 @@ int
 rl_noninc_forward_search (count, key)
      int count, key;
 {
-  noninc_search (1, (key == '?') ? '?' : 0);
-  return 0;
+  return noninc_search (1, (key == '?') ? '?' : 0);
 }
 
 /* Reverse search the history list for a string.  If the vi-mode code
@@ -318,8 +395,7 @@ int
 rl_noninc_reverse_search (count, key)
      int count, key;
 {
-  noninc_search (-1, (key == '/') ? '/' : 0);
-  return 0;
+  return noninc_search (-1, (key == '/') ? '/' : 0);
 }
 
 /* Search forward through the history list for the last string searched
@@ -328,13 +404,15 @@ int
 rl_noninc_forward_search_again (count, key)
      int count, key;
 {
+  int r;
+
   if (!noninc_search_string)
     {
       rl_ding ();
       return (-1);
     }
-  noninc_dosearch (noninc_search_string, 1);
-  return 0;
+  r = noninc_dosearch (noninc_search_string, 1);
+  return (r != 1);
 }
 
 /* Reverse search in the history list for the last string searched
@@ -343,15 +421,34 @@ int
 rl_noninc_reverse_search_again (count, key)
      int count, key;
 {
+  int r;
+
   if (!noninc_search_string)
     {
       rl_ding ();
       return (-1);
     }
-  noninc_dosearch (noninc_search_string, -1);
-  return 0;
+  r = noninc_dosearch (noninc_search_string, -1);
+  return (r != 1);
 }
 
+#if defined (READLINE_CALLBACKS)
+int
+_rl_nsearch_callback (cxt)
+     _rl_search_cxt *cxt;
+{
+  int c, r;
+
+  c = _rl_search_getchar (cxt);
+  r = _rl_nsearch_dispatch (cxt, c);
+  if (r != 0)
+    return 1;
+
+  r = _rl_nsearch_dosearch (cxt);
+  return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1));
+}
+#endif
+  
 static int
 rl_history_search_internal (count, dir)
      int count, dir;
index a07e2b9..346f811 100644 (file)
 #  include <limits.h>
 #endif
 
+#if defined (HAVE_FCNTL_H)
 #include <fcntl.h>
+#endif
+#if defined (HAVE_PWD_H)
 #include <pwd.h>
+#endif
 
 #include <stdio.h>
 
@@ -57,9 +61,9 @@
 #include "rlshell.h"
 #include "xmalloc.h"
 
-#if !defined (HAVE_GETPW_DECLS)
+#if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)
 extern struct passwd *getpwuid PARAMS((uid_t));
-#endif /* !HAVE_GETPW_DECLS */
+#endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */
 
 #ifndef NULL
 #  define NULL 0
@@ -122,16 +126,7 @@ sh_set_lines_and_columns (lines, cols)
 {
   char *b;
 
-#if defined (HAVE_PUTENV)
-  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
-  sprintf (b, "LINES=%d", lines);
-  putenv (b);
-
-  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
-  sprintf (b, "COLUMNS=%d", cols);
-  putenv (b);
-#else /* !HAVE_PUTENV */
-#  if defined (HAVE_SETENV)
+#if defined (HAVE_SETENV)
   b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
   sprintf (b, "%d", lines);
   setenv ("LINES", b, 1);
@@ -141,8 +136,17 @@ sh_set_lines_and_columns (lines, cols)
   sprintf (b, "%d", cols);
   setenv ("COLUMNS", b, 1);
   free (b);
-#  endif /* HAVE_SETENV */
-#endif /* !HAVE_PUTENV */
+#else /* !HAVE_SETENV */
+#  if defined (HAVE_PUTENV)
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
+  sprintf (b, "LINES=%d", lines);
+  putenv (b);
+
+  b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
+  sprintf (b, "COLUMNS=%d", cols);
+  putenv (b);
+#  endif /* HAVE_PUTENV */
+#endif /* !HAVE_SETENV */
 }
 
 char *
@@ -159,9 +163,11 @@ sh_get_home_dir ()
   struct passwd *entry;
 
   home_dir = (char *)NULL;
+#if defined (HAVE_GETPWUID)
   entry = getpwuid (getuid ());
   if (entry)
     home_dir = entry->pw_dir;
+#endif
   return (home_dir);
 }
 
@@ -175,6 +181,7 @@ int
 sh_unset_nodelay_mode (fd)
      int fd;
 {
+#if defined (HAVE_FCNTL)
   int flags, bflags;
 
   if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
@@ -195,6 +202,7 @@ sh_unset_nodelay_mode (fd)
       flags &= ~bflags;
       return (fcntl (fd, F_SETFL, flags));
     }
+#endif
 
   return 0;
 }
index 8e9c0ae..f344ed8 100644 (file)
@@ -1,6 +1,6 @@
 /* signals.c -- signal handling support for readline. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -131,7 +131,11 @@ rl_signal_handler (sig)
 #if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS)
   /* Since the signal will not be blocked while we are in the signal
      handler, ignore it until rl_clear_signals resets the catcher. */
+#  if defined (SIGALRM)
   if (sig == SIGINT || sig == SIGALRM)
+#  else
+  if (sig == SIGINT)
+#  endif
     rl_set_sighandler (sig, SIG_IGN, &dummy_cxt);
 #endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */
 
@@ -141,14 +145,18 @@ rl_signal_handler (sig)
       rl_free_line_state ();
       /* FALLTHROUGH */
 
+    case SIGTERM:
 #if defined (SIGTSTP)
     case SIGTSTP:
     case SIGTTOU:
     case SIGTTIN:
 #endif /* SIGTSTP */
+#if defined (SIGALRM)
     case SIGALRM:
-    case SIGTERM:
+#endif
+#if defined (SIGQUIT)
     case SIGQUIT:
+#endif
       rl_cleanup_after_signal ();
 
 #if defined (HAVE_POSIX_SIGNALS)
@@ -164,7 +172,11 @@ rl_signal_handler (sig)
       signal (sig, SIG_ACK);
 #endif
 
+#if defined (HAVE_KILL)
       kill (getpid (), sig);
+#else
+      raise (sig);             /* assume we have raise */
+#endif
 
       /* Let the signal that we just sent through.  */
 #if defined (HAVE_POSIX_SIGNALS)
@@ -281,8 +293,11 @@ rl_set_signals ()
     {
       rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int);
       rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term);
+#if defined (SIGQUIT)
       rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit);
+#endif
 
+#if defined (SIGALRM)
       oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm);
       if (oh == (SigHandler *)SIG_IGN)
        rl_sigaction (SIGALRM, &old_alrm, &dummy);
@@ -294,6 +309,7 @@ rl_set_signals ()
       if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART))
        rl_sigaction (SIGALRM, &old_alrm, &dummy);
 #endif /* HAVE_POSIX_SIGNALS */
+#endif /* SIGALRM */
 
 #if defined (SIGTSTP)
       rl_maybe_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp);
@@ -332,8 +348,12 @@ rl_clear_signals ()
 
       rl_sigaction (SIGINT, &old_int, &dummy);
       rl_sigaction (SIGTERM, &old_term, &dummy);
+#if defined (SIGQUIT)
       rl_sigaction (SIGQUIT, &old_quit, &dummy);
+#endif
+#if defined (SIGALRM)
       rl_sigaction (SIGALRM, &old_alrm, &dummy);
+#endif
 
 #if defined (SIGTSTP)
       rl_sigaction (SIGTSTP, &old_tstp, &dummy);
@@ -368,7 +388,8 @@ void
 rl_cleanup_after_signal ()
 {
   _rl_clean_up_for_exit ();
-  (*rl_deprep_term_function) ();
+  if (rl_deprep_term_function)
+    (*rl_deprep_term_function) ();
   rl_clear_signals ();
   rl_clear_pending_input ();
 }
@@ -377,7 +398,8 @@ rl_cleanup_after_signal ()
 void
 rl_reset_after_signal ()
 {
-  (*rl_prep_term_function) (_rl_meta_flag);
+  if (rl_prep_term_function)
+    (*rl_prep_term_function) (_rl_meta_flag);
   rl_set_signals ();
 }
 
@@ -398,7 +420,7 @@ rl_free_line_state ()
 
   _rl_kill_kbd_macro ();
   rl_clear_message ();
-  _rl_init_argument ();
+  _rl_reset_argument ();
 }
 
 #endif  /* HANDLE_SIGNALS */
index b95aea8..cc61388 100644 (file)
@@ -1,6 +1,6 @@
 /* terminal.c -- controlling the terminal with termcap. */
 
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -69,6 +69,8 @@
 #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay)
 #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc)
 
+int rl_prefer_env_winsize;
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Terminal and Termcap                        */
@@ -145,6 +147,9 @@ static char *_rl_term_kh;
 static char *_rl_term_kH;
 static char *_rl_term_at7;     /* @7 */
 
+/* Delete key */
+static char *_rl_term_kD;
+
 /* Insert key */
 static char *_rl_term_kI;
 
@@ -191,12 +196,14 @@ _rl_get_screen_size (tty, ignore_env)
 #if defined (TIOCGWINSZ)
   struct winsize window_size;
 #endif /* TIOCGWINSZ */
+  int wr, wc;
 
+  wr = wc = -1;
 #if defined (TIOCGWINSZ)
   if (ioctl (tty, TIOCGWINSZ, &window_size) == 0)
     {
-      _rl_screenwidth = (int) window_size.ws_col;
-      _rl_screenheight = (int) window_size.ws_row;
+      wc = (int) window_size.ws_col;
+      wr = (int) window_size.ws_row;
     }
 #endif /* TIOCGWINSZ */
 
@@ -204,13 +211,25 @@ _rl_get_screen_size (tty, ignore_env)
   _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
 #endif
 
+  if (ignore_env || rl_prefer_env_winsize == 0)
+    {
+      _rl_screenwidth = wc;
+      _rl_screenheight = wr;
+    }
+  else
+    _rl_screenwidth = _rl_screenheight = -1;
+
   /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV
-     is unset. */
+     is unset.  If we prefer the environment, check it first before
+     assigning the value returned by the kernel. */
   if (_rl_screenwidth <= 0)
     {
       if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS")))
        _rl_screenwidth = atoi (ss);
 
+      if (_rl_screenwidth <= 0)
+        _rl_screenwidth = wc;
+
 #if !defined (__DJGPP__)
       if (_rl_screenwidth <= 0 && term_string_buffer)
        _rl_screenwidth = tgetnum ("co");
@@ -224,6 +243,9 @@ _rl_get_screen_size (tty, ignore_env)
       if (ignore_env == 0 && (ss = sh_get_env_value ("LINES")))
        _rl_screenheight = atoi (ss);
 
+      if (_rl_screenheight <= 0)
+        _rl_screenheight = wr;
+
 #if !defined (__DJGPP__)
       if (_rl_screenheight <= 0 && term_string_buffer)
        _rl_screenheight = tgetnum ("li");
@@ -252,16 +274,17 @@ void
 _rl_set_screen_size (rows, cols)
      int rows, cols;
 {
-  if (rows == 0 || cols == 0)
-    return;
-
-  _rl_screenheight = rows;
-  _rl_screenwidth = cols;
-
-  if (_rl_term_autowrap == 0)
-    _rl_screenwidth--;
+  if (rows > 0)
+    _rl_screenheight = rows;
+  if (cols > 0)
+    {
+      _rl_screenwidth = cols;
+      if (_rl_term_autowrap == 0)
+       _rl_screenwidth--;
+    }
 
-  _rl_screenchars = _rl_screenwidth * _rl_screenheight;
+  if (rows > 0 || cols > 0)
+    _rl_screenchars = _rl_screenwidth * _rl_screenheight;
 }
 
 void
@@ -280,6 +303,12 @@ rl_get_screen_size (rows, cols)
   if (cols)
     *cols = _rl_screenwidth;
 }
+
+void
+rl_reset_screen_size ()
+{
+  _rl_get_screen_size (fileno (rl_instream), 0);
+}
      
 void
 rl_resize_terminal ()
@@ -313,6 +342,7 @@ static struct _tc_string tc_strings[] =
   { "ei", &_rl_term_ei },
   { "ic", &_rl_term_ic },
   { "im", &_rl_term_im },
+  { "kD", &_rl_term_kD },      /* delete */
   { "kH", &_rl_term_kH },      /* home down ?? */
   { "kI", &_rl_term_kI },      /* insert */
   { "kd", &_rl_term_kd },
@@ -363,7 +393,6 @@ _rl_init_terminal_io (terminal_name)
   term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
   _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL;
   tty = rl_instream ? fileno (rl_instream) : 0;
-  _rl_screenwidth = _rl_screenheight = 0;
 
   if (term == 0)
     term = "dumb";
@@ -396,12 +425,17 @@ _rl_init_terminal_io (terminal_name)
 
       _rl_term_autowrap = 0;   /* used by _rl_get_screen_size */
 
+      /* Allow calling application to set default height and width, using
+        rl_set_screen_size */
+      if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
+       {
 #if defined (__EMX__)
-      _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
-      _rl_screenwidth--;
+         _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight);
+         _rl_screenwidth--;
 #else /* !__EMX__ */
-      _rl_get_screen_size (tty, 0);
+         _rl_get_screen_size (tty, 0);
 #endif /* !__EMX__ */
+       }
 
       /* Defaults. */
       if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
@@ -416,7 +450,7 @@ _rl_init_terminal_io (terminal_name)
       _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
       _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
       _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;
-      _rl_term_kh = _rl_term_kH = _rl_term_kI = (char *)NULL;
+      _rl_term_kh = _rl_term_kH = _rl_term_kI = _rl_term_kD = (char *)NULL;
       _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL;
       _rl_term_mm = _rl_term_mo = (char *)NULL;
       _rl_term_ve = _rl_term_vs = (char *)NULL;
@@ -448,7 +482,10 @@ _rl_init_terminal_io (terminal_name)
 
   _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn");
 
-  _rl_get_screen_size (tty, 0);
+  /* Allow calling application to set default height and width, using
+     rl_set_screen_size */
+  if (_rl_screenwidth <= 0 || _rl_screenheight <= 0)
+    _rl_get_screen_size (tty, 0);
 
   /* "An application program can assume that the terminal can do
       character insertion if *any one of* the capabilities `IC',
@@ -493,6 +530,8 @@ bind_termcap_arrow_keys (map)
   rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line);     /* Home */
   rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line);    /* End */
 
+  rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete);
+
   _rl_keymap = xkeymap;
 }
 
@@ -518,6 +557,7 @@ int
 rl_reset_terminal (terminal_name)
      const char *terminal_name;
 {
+  _rl_screenwidth = _rl_screenheight = 0;
   _rl_init_terminal_io (terminal_name);
   return 0;
 }
index d917e99..9053e96 100644 (file)
@@ -1,6 +1,6 @@
 /* text.c -- text handling commands for readline. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
 static int rl_change_case PARAMS((int, int));
 static int _rl_char_search PARAMS((int, int, int));
 
+#if defined (READLINE_CALLBACKS)
+static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *));
+static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *));
+#endif
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Insert and Delete                           */
@@ -420,8 +425,7 @@ rl_end_of_line (count, key)
   return 0;
 }
 
-/* XXX - these might need changes for multibyte characters */
-/* Move forward a word.  We do what Emacs does. */
+/* Move forward a word.  We do what Emacs does.  Handles multibyte chars. */
 int
 rl_forward_word (count, key)
      int count, key;
@@ -438,68 +442,80 @@ rl_forward_word (count, key)
 
       /* If we are not in a word, move forward until we are in one.
         Then, move forward until we hit a non-alphabetic character. */
-      c = rl_line_buffer[rl_point];
-      if (rl_alphabetic (c) == 0)
+      c = _rl_char_value (rl_line_buffer, rl_point);
+
+      if (_rl_walphabetic (c) == 0)
        {
-         while (++rl_point < rl_end)
+         rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+         while (rl_point < rl_end)
            {
-             c = rl_line_buffer[rl_point];
-             if (rl_alphabetic (c))
+             c = _rl_char_value (rl_line_buffer, rl_point);
+             if (_rl_walphabetic (c))
                break;
+             rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
            }
        }
 
       if (rl_point == rl_end)
        return 0;
 
-      while (++rl_point < rl_end)
+      rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
+      while (rl_point < rl_end)
        {
-         c = rl_line_buffer[rl_point];
-         if (rl_alphabetic (c) == 0)
+         c = _rl_char_value (rl_line_buffer, rl_point);
+         if (_rl_walphabetic (c) == 0)
            break;
+         rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
        }
+
       --count;
     }
 
   return 0;
 }
 
-/* Move backward a word.  We do what Emacs does. */
+/* Move backward a word.  We do what Emacs does.  Handles multibyte chars. */
 int
 rl_backward_word (count, key)
      int count, key;
 {
-  int c;
+  int c, p;
 
   if (count < 0)
     return (rl_forward_word (-count, key));
 
   while (count)
     {
-      if (!rl_point)
+      if (rl_point == 0)
        return 0;
 
       /* Like rl_forward_word (), except that we look at the characters
         just before point. */
 
-      c = rl_line_buffer[rl_point - 1];
-      if (rl_alphabetic (c) == 0)
+      p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+      c = _rl_char_value (rl_line_buffer, p);
+
+      if (_rl_walphabetic (c) == 0)
        {
-         while (--rl_point)
+         rl_point = p;
+         while (rl_point > 0)
            {
-             c = rl_line_buffer[rl_point - 1];
-             if (rl_alphabetic (c))
+             p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+             c = _rl_char_value (rl_line_buffer, p);
+             if (_rl_walphabetic (c))
                break;
+             rl_point = p;
            }
        }
 
       while (rl_point)
        {
-         c = rl_line_buffer[rl_point - 1];
-         if (rl_alphabetic (c) == 0)
+         p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+         c = _rl_char_value (rl_line_buffer, p);         
+         if (_rl_walphabetic (c) == 0)
            break;
          else
-           --rl_point;
+           rl_point = p;
        }
 
       --count;
@@ -756,10 +772,8 @@ _rl_insert_char (count, c)
       return 0;
     }
 
-#if defined (HANDLE_MULTIBYTE)
   if (MB_CUR_MAX == 1 || rl_byte_oriented)
     {
-#endif
       /* We are inserting a single character.
         If there is pending input, then make a string of all of the
         pending characters that are bound to rl_insert, and insert
@@ -775,8 +789,8 @@ _rl_insert_char (count, c)
          str[0] = c;
          rl_insert_text (str);
        }
-#if defined (HANDLE_MULTIBYTE)
     }
+#if defined (HANDLE_MULTIBYTE)
   else
     {
       rl_insert_text (incoming);
@@ -833,27 +847,63 @@ rl_insert (count, c)
 }
 
 /* Insert the next typed character verbatim. */
-int
-rl_quoted_insert (count, key)
-     int count, key;
+static int
+_rl_insert_next (count)
+     int count;
 {
   int c;
 
-#if defined (HANDLE_SIGNALS)
-  _rl_disable_tty_signals ();
-#endif
-
   RL_SETSTATE(RL_STATE_MOREINPUT);
   c = rl_read_key ();
   RL_UNSETSTATE(RL_STATE_MOREINPUT);
 
 #if defined (HANDLE_SIGNALS)
-  _rl_restore_tty_signals ();
+  if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
+    _rl_restore_tty_signals ();
 #endif
 
   return (_rl_insert_char (count, c));  
 }
 
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_insert_next_callback (data)
+     _rl_callback_generic_arg *data;
+{
+  int count;
+
+  count = data->count;
+
+  /* Deregister function, let rl_callback_read_char deallocate data */
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+  return _rl_insert_next (count);
+}
+#endif
+  
+int
+rl_quoted_insert (count, key)
+     int count, key;
+{
+  /* Let's see...should the callback interface futz with signal handling? */
+#if defined (HANDLE_SIGNALS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
+    _rl_disable_tty_signals ();
+#endif
+
+#if defined (READLINE_CALLBACKS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = _rl_callback_data_alloc (count);
+      _rl_callback_func = _rl_insert_next_callback;
+      return (0);
+    }
+#endif
+      
+  return _rl_insert_next (count);
+}
+
 /* Insert a tab character. */
 int
 rl_tab_insert (count, key)
@@ -988,43 +1038,17 @@ _rl_rubout_char (count, key)
       return -1;
     }
 
+  orig_point = rl_point;
   if (count > 1 || rl_explicit_arg)
     {
-      orig_point = rl_point;
-#if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       rl_backward_char (count, key);
-      else
-#endif
-        rl_backward_byte (count, key);
+      rl_backward_char (count, key);
       rl_kill_text (orig_point, rl_point);
     }
-  else
+  else if (MB_CUR_MAX == 1 || rl_byte_oriented)
     {
-#if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX == 1 || rl_byte_oriented)
-       {
-#endif
-         c = rl_line_buffer[--rl_point];
-         rl_delete_text (rl_point, rl_point + 1);
-#if defined (HANDLE_MULTIBYTE)
-       }
-      else
-       {
-         int orig_point;
-
-         orig_point = rl_point;
-         rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
-         c = rl_line_buffer[rl_point];
-         rl_delete_text (rl_point, orig_point);
-       }
-#endif /* HANDLE_MULTIBYTE */
-
-      /* I don't think that the hack for end of line is needed for
-        multibyte chars. */
-#if defined (HANDLE_MULTIBYTE)
-      if (MB_CUR_MAX == 1 || rl_byte_oriented)
-#endif
+      c = rl_line_buffer[--rl_point];
+      rl_delete_text (rl_point, orig_point);
+      /* The erase-at-end-of-line hack is of questionable merit now. */
       if (rl_point == rl_end && ISPRINT (c) && _rl_last_c_pos)
        {
          int l;
@@ -1032,6 +1056,11 @@ _rl_rubout_char (count, key)
          _rl_erase_at_end_of_line (l);
        }
     }
+  else
+    {
+      rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+      rl_delete_text (rl_point, orig_point);
+    }
 
   return 0;
 }
@@ -1056,11 +1085,9 @@ rl_delete (count, key)
   if (count > 1 || rl_explicit_arg)
     {
       int orig_point = rl_point;
-#if defined (HANDLE_MULTIBYTE)
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        rl_forward_char (count, key);
       else
-#endif
        rl_forward_byte (count, key);
 
       r = rl_kill_text (orig_point, rl_point);
@@ -1070,11 +1097,8 @@ rl_delete (count, key)
   else
     {
       int new_point;
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       new_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
-      else
-       new_point = rl_point + 1;
-       
+
+      new_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
       return (rl_delete_text (rl_point, new_point));
     }
 }
@@ -1113,6 +1137,10 @@ rl_delete_horizontal_space (count, ignore)
       rl_delete_text (start, rl_point);
       rl_point = start;
     }
+
+  if (rl_point < 0)
+    rl_point = 0;
+
   return 0;
 }
 
@@ -1206,42 +1234,80 @@ static int
 rl_change_case (count, op)
      int count, op;
 {
-  register int start, end;
-  int inword, c;
+  int start, next, end;
+  int inword, c, nc, nop;
+#if defined (HANDLE_MULTIBYTE)
+  wchar_t wc, nwc;
+  char mb[MB_LEN_MAX+1];
+  int mblen, p;
+  mbstate_t ps;
+#endif
 
   start = rl_point;
   rl_forward_word (count, 0);
   end = rl_point;
 
+  if (op != UpCase && op != DownCase && op != CapCase)
+    {
+      rl_ding ();
+      return -1;
+    }
+
   if (count < 0)
     SWAP (start, end);
 
+#if defined (HANDLE_MULTIBYTE)
+  memset (&ps, 0, sizeof (mbstate_t));
+#endif
+
   /* We are going to modify some text, so let's prepare to undo it. */
   rl_modifying (start, end);
 
-  for (inword = 0; start < end; start++)
+  inword = 0;
+  while (start < end)
     {
-      c = rl_line_buffer[start];
-      switch (op)
-       {
-       case UpCase:
-         rl_line_buffer[start] = _rl_to_upper (c);
-         break;
+      c = _rl_char_value (rl_line_buffer, start);
+      /*  This assumes that the upper and lower case versions are the same width. */
+      next = MB_NEXTCHAR (rl_line_buffer, start, 1, MB_FIND_NONZERO);
 
-       case DownCase:
-         rl_line_buffer[start] = _rl_to_lower (c);
-         break;
-
-       case CapCase:
-         rl_line_buffer[start] = (inword == 0) ? _rl_to_upper (c) : _rl_to_lower (c);
-         inword = rl_alphabetic (rl_line_buffer[start]);
-         break;
+      if (_rl_walphabetic (c) == 0)
+       {
+         inword = 0;
+         start = next;
+         continue;
+       }
 
-       default:
-         rl_ding ();
-         return -1;
+      if (op == CapCase)
+       {
+         nop = inword ? DownCase : UpCase;
+         inword = 1;
+       }
+      else
+       nop = op;
+      if (MB_CUR_MAX == 1 || rl_byte_oriented || isascii (c))
+       {
+         nc = (nop == UpCase) ? _rl_to_upper (c) : _rl_to_lower (c);
+         rl_line_buffer[start] = nc;
+       }
+#if defined (HANDLE_MULTIBYTE)
+      else
+       {
+         mbrtowc (&wc, rl_line_buffer + start, end - start, &ps);
+         nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc);
+         if  (nwc != wc)       /*  just skip unchanged characters */
+           {
+             mblen = wcrtomb (mb, nwc, &ps);
+             if (mblen > 0)
+               mb[mblen] = '\0';
+             /* Assume the same width */
+             strncpy (rl_line_buffer + start, mb, mblen);
+           }
        }
+#endif
+
+      start = next;
     }
+
   rl_point = end;
   return 0;
 }
@@ -1321,11 +1387,11 @@ rl_transpose_chars (count, key)
 {
 #if defined (HANDLE_MULTIBYTE)
   char *dummy;
-  int i, prev_point;
+  int i;
 #else
   char dummy[2];
 #endif
-  int char_length;
+  int char_length, prev_point;
 
   if (count == 0)
     return 0;
@@ -1340,20 +1406,12 @@ rl_transpose_chars (count, key)
 
   if (rl_point == rl_end)
     {
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
-      else
-       --rl_point;
+      rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
       count = 1;
     }
 
-#if defined (HANDLE_MULTIBYTE)
   prev_point = rl_point;
-  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
-  else
-#endif
-    rl_point--;
+  rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO);
 
 #if defined (HANDLE_MULTIBYTE)
   char_length = prev_point - rl_point;
@@ -1487,10 +1545,33 @@ _rl_char_search (count, fdir, bdir)
 }
 #endif /* !HANDLE_MULTIBYTE */
 
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_char_search_callback (data)
+     _rl_callback_generic_arg *data;
+{
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+
+  return (_rl_char_search (data->count, data->i1, data->i2));
+}
+#endif
+
 int
 rl_char_search (count, key)
      int count, key;
 {
+#if defined (READLINE_CALLBACKS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = _rl_callback_data_alloc (count);
+      _rl_callback_data->i1 = FFIND;
+      _rl_callback_data->i2 = BFIND;
+      _rl_callback_func = _rl_char_search_callback;
+      return (0);
+    }
+#endif
+  
   return (_rl_char_search (count, FFIND, BFIND));
 }
 
@@ -1498,6 +1579,17 @@ int
 rl_backward_char_search (count, key)
      int count, key;
 {
+#if defined (READLINE_CALLBACKS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = _rl_callback_data_alloc (count);
+      _rl_callback_data->i1 = BFIND;
+      _rl_callback_data->i2 = FFIND;
+      _rl_callback_func = _rl_char_search_callback;
+      return (0);
+    }
+#endif
+
   return (_rl_char_search (count, BFIND, FFIND));
 }
 
index 154f7f8..d757f7a 100644 (file)
@@ -43,7 +43,9 @@
 #endif /* HAVE_STDLIB_H */
 
 #include <sys/types.h>
+#if defined (HAVE_PWD_H)
 #include <pwd.h>
+#endif
 
 #include "tilde.h"
 
@@ -54,8 +56,12 @@ static void *xmalloc (), *xrealloc ();
 #endif /* TEST || STATIC_MALLOC */
 
 #if !defined (HAVE_GETPW_DECLS)
+#  if defined (HAVE_GETPWUID)
 extern struct passwd *getpwuid PARAMS((uid_t));
+#  endif
+#  if defined (HAVE_GETPWNAM)
 extern struct passwd *getpwnam PARAMS((const char *));
+#  endif
 #endif /* !HAVE_GETPW_DECLS */
 
 #if !defined (savestring)
@@ -277,6 +283,39 @@ isolate_tilde_prefix (fname, lenp)
   return ret;
 }
 
+#if 0
+/* Public function to scan a string (FNAME) beginning with a tilde and find
+   the portion of the string that should be passed to the tilde expansion
+   function.  Right now, it just calls tilde_find_suffix and allocates new
+   memory, but it can be expanded to do different things later. */
+char *
+tilde_find_word (fname, flags, lenp)
+     const char *fname;
+     int flags, *lenp;
+{
+  int x;
+  char *r;
+
+  x = tilde_find_suffix (fname);
+  if (x == 0)
+    {
+      r = savestring (fname);
+      if (lenp)
+       *lenp = 0;
+    }
+  else
+    {
+      r = (char *)xmalloc (1 + x);
+      strncpy (r, fname, x);
+      r[x] = '\0';
+      if (lenp)
+       *lenp = x;
+    }
+
+  return r;
+}
+#endif
+
 /* Return a string that is PREFIX concatenated with SUFFIX starting at
    SUFFIND. */
 static char *
@@ -347,7 +386,11 @@ tilde_expand_word (filename)
   /* No preexpansion hook, or the preexpansion hook failed.  Look in the
      password database. */
   dirname = (char *)NULL;
+#if defined (HAVE_GETPWNAM)
   user_entry = getpwnam (username);
+#else
+  user_entry = 0;
+#endif
   if (user_entry == 0)
     {
       /* If the calling program has a special syntax for expanding tildes,
@@ -372,8 +415,9 @@ tilde_expand_word (filename)
       free (username);
       dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
     }
-
+#if defined (HAVE_GETPWENT)
   endpwent ();
+#endif
   return (dirname);
 }
 
index f8182c9..c58ce20 100644 (file)
@@ -71,6 +71,9 @@ extern char *tilde_expand PARAMS((const char *));
    tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
 extern char *tilde_expand_word PARAMS((const char *));
 
+/* Find the portion of the string beginning with ~ that should be expanded. */
+extern char *tilde_find_word PARAMS((const char *, int, int *));
+
 #ifdef __cplusplus
 }
 #endif
index 25c287b..fedfa12 100644 (file)
@@ -237,7 +237,12 @@ rl_revert_line (count, key)
     {
       while (rl_undo_list)
        rl_do_undo ();
+#if defined (VI_MODE)
+      if (rl_editing_mode == vi_mode)
+       rl_point = rl_mark = 0;         /* rl_end should be set correctly */
+#endif
     }
+    
   return 0;
 }
 
index a632d81..e44ef64 100644 (file)
@@ -1,6 +1,6 @@
 /* util.c -- readline utility functions */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -44,6 +44,7 @@
 
 /* System-specific feature definitions and include files. */
 #include "rldefs.h"
+#include "rlmbutil.h"
 
 #if defined (TIOCSTAT_IN_SYS_IOCTL)
 #  include <sys/ioctl.h>
@@ -78,13 +79,29 @@ rl_alphabetic (c)
            strchr (pathname_alphabetic_chars, c) != NULL);
 }
 
+#if defined (HANDLE_MULTIBYTE)
+int
+_rl_walphabetic (wc)
+     wchar_t wc;
+{
+  int c;
+
+  if (iswalnum (wc))
+    return (1);     
+
+  c = wc & 0177;
+  return (_rl_allow_pathname_alphabetic_chars &&
+           strchr (pathname_alphabetic_chars, c) != NULL);
+}
+#endif
+
 /* How to abort things. */
 int
 _rl_abort_internal ()
 {
   rl_ding ();
   rl_clear_message ();
-  _rl_init_argument ();
+  _rl_reset_argument ();
   rl_clear_pending_input ();
 
   RL_UNSETSTATE (RL_STATE_MACRODEF);
index 53a67c6..4b48c75 100644 (file)
@@ -130,7 +130,7 @@ KEYMAP_ENTRY_ARRAY vi_movement_keymap = {
   { ISFUNC, rl_revert_line },                  /* U */
   { ISFUNC, (rl_command_func_t *)0x0 },                /* V */
   { ISFUNC, rl_vi_next_word },                 /* W */
-  { ISFUNC, rl_rubout },                       /* X */
+  { ISFUNC, rl_vi_rubout },                    /* X */
   { ISFUNC, rl_vi_yank_to },                   /* Y */
   { ISFUNC, (rl_command_func_t *)0x0 },                /* Z */
 
index de723a1..ac5fd74 100644 (file)
@@ -1,7 +1,7 @@
 /* vi_mode.c -- A vi emulation mode for Bash.
    Derived from code written by Jeff Sparkes (jsparkes@bnr.ca).  */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -90,6 +90,7 @@ static int _rl_vi_last_arg_sign = 1;
 static int _rl_vi_last_motion;
 #if defined (HANDLE_MULTIBYTE)
 static char _rl_vi_last_search_mbchar[MB_LEN_MAX];
+static int _rl_vi_last_search_mblen;
 #else
 static int _rl_vi_last_search_char;
 #endif
@@ -107,8 +108,22 @@ static int vi_mark_chars['z' - 'a' + 1];
 
 static void _rl_vi_stuff_insert PARAMS((int));
 static void _rl_vi_save_insert PARAMS((UNDO_LIST *));
+
+static int _rl_vi_arg_dispatch PARAMS((int));
 static int rl_digit_loop1 PARAMS((void));
 
+static int _rl_vi_set_mark PARAMS((void));
+static int _rl_vi_goto_mark PARAMS((void));
+
+static int _rl_vi_callback_getchar PARAMS((char *, int));
+
+#if defined (READLINE_CALLBACKS)
+static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *));
+#endif
+
 void
 _rl_vi_initialize_line ()
 {
@@ -116,6 +131,8 @@ _rl_vi_initialize_line ()
 
   for (i = 0; i < sizeof (vi_mark_chars) / sizeof (int); i++)
     vi_mark_chars[i] = -1;
+
+  RL_UNSETSTATE(RL_STATE_VICMDONCE);
 }
 
 void
@@ -671,6 +688,13 @@ rl_vi_movement_mode (count, key)
 
   _rl_keymap = vi_movement_keymap;
   _rl_vi_done_inserting ();
+
+  /* This is how POSIX.2 says `U' should behave -- everything up until the
+     first time you go into command mode should not be undone. */
+  if (RL_ISSTATE (RL_STATE_VICMDONCE) == 0)
+    rl_free_undo_list ();
+
+  RL_SETSTATE (RL_STATE_VICMDONCE);
   return (0);
 }
 
@@ -840,7 +864,9 @@ rl_vi_domove (key, nextkey)
          save = rl_numeric_arg;
          rl_numeric_arg = _rl_digit_value (c);
          rl_explicit_arg = 1;
+         RL_SETSTATE (RL_STATE_NUMERICARG|RL_STATE_VIMOTION);
          rl_digit_loop1 ();
+         RL_UNSETSTATE (RL_STATE_VIMOTION);
          rl_numeric_arg *= save;
          RL_SETSTATE(RL_STATE_MOREINPUT);
          c = rl_read_key ();   /* real command */
@@ -913,52 +939,59 @@ rl_vi_domove (key, nextkey)
   return (0);
 }
 
+/* Process C as part of the current numeric argument.  Return -1 if the
+   argument should be aborted, 0 if we should not read any more chars, and
+   1 if we should continue to read chars. */
+static int
+_rl_vi_arg_dispatch (c)
+     int c;
+{
+  int key;
+
+  key = c;
+  if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument)
+    {
+      rl_numeric_arg *= 4;
+      return 1;
+    }
+
+  c = UNMETA (c);
+
+  if (_rl_digit_p (c))
+    {
+      if (rl_explicit_arg)
+       rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
+      else
+       rl_numeric_arg = _rl_digit_value (c);
+      rl_explicit_arg = 1;
+      return 1;
+    }
+  else
+    {
+      rl_clear_message ();
+      rl_stuff_char (key);
+      return 0;
+    }
+}
+
 /* A simplified loop for vi. Don't dispatch key at end.
    Don't recognize minus sign?
    Should this do rl_save_prompt/rl_restore_prompt? */
 static int
 rl_digit_loop1 ()
 {
-  int key, c;
+  int c, r;
 
-  RL_SETSTATE(RL_STATE_NUMERICARG);
   while (1)
     {
-      if (rl_numeric_arg > 1000000)
-       {
-         rl_explicit_arg = rl_numeric_arg = 0;
-         rl_ding ();
-         rl_clear_message ();
-         RL_UNSETSTATE(RL_STATE_NUMERICARG);
-         return 1;
-       }
-      rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
-      RL_SETSTATE(RL_STATE_MOREINPUT);
-      key = c = rl_read_key ();
-      RL_UNSETSTATE(RL_STATE_MOREINPUT);
+      if (_rl_arg_overflow ())
+       return 1;
 
-      if (c >= 0 && _rl_keymap[c].type == ISFUNC &&
-         _rl_keymap[c].function == rl_universal_argument)
-       {
-         rl_numeric_arg *= 4;
-         continue;
-       }
+      c = _rl_arg_getchar ();
 
-      c = UNMETA (c);
-      if (_rl_digit_p (c))
-       {
-         if (rl_explicit_arg)
-           rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c);
-         else
-           rl_numeric_arg = _rl_digit_value (c);
-         rl_explicit_arg = 1;
-       }
-      else
-       {
-         rl_clear_message ();
-         rl_stuff_char (key);
-         break;
-       }
+      r = _rl_vi_arg_dispatch (c);
+      if (r <= 0)
+       break;
     }
 
   RL_UNSETSTATE(RL_STATE_NUMERICARG);
@@ -1048,8 +1081,9 @@ int
 rl_vi_yank_to (count, key)
      int count, key;
 {
-  int c, save = rl_point;
+  int c, save;
 
+  save = rl_point;
   if (_rl_uppercase_p (key))
     rl_stuff_char ('$');
 
@@ -1074,11 +1108,45 @@ rl_vi_yank_to (count, key)
 }
 
 int
+rl_vi_rubout (count, key)
+     int count, key;
+{
+  int p, opoint;
+
+  if (count < 0)
+    return (rl_vi_delete (-count, key));
+
+  if (rl_point == 0)
+    {
+      rl_ding ();
+      return -1;
+    }
+
+  opoint = rl_point;
+  if (count > 1 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    rl_backward_char (count, key);
+  else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
+  else
+    rl_point -= count;
+
+  if (rl_point < 0)
+    rl_point = 0;
+
+  rl_kill_text (rl_point, opoint);
+  
+  return (0);
+}
+
+int
 rl_vi_delete (count, key)
      int count, key;
 {
   int end;
 
+  if (count < 0)
+    return (rl_vi_rubout (-count, key));
+
   if (rl_end == 0)
     {
       rl_ding ();
@@ -1097,6 +1165,7 @@ rl_vi_delete (count, key)
   
   if (rl_point > 0 && rl_point == rl_end)
     rl_backward_char (1, key);
+
   return (0);
 }
 
@@ -1117,64 +1186,102 @@ rl_vi_first_print (count, key)
   return (rl_vi_back_to_indent (1, key));
 }
 
+static int _rl_cs_dir, _rl_cs_orig_dir;
+
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_char_search (data)
+     _rl_callback_generic_arg *data;
+{
+#if defined (HANDLE_MULTIBYTE)
+  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+#else
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  _rl_vi_last_search_char = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+#endif
+
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+
+#if defined (HANDLE_MULTIBYTE)
+  return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen));
+#else
+  return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_char));
+#endif  
+}
+#endif
+
 int
 rl_vi_char_search (count, key)
      int count, key;
 {
 #if defined (HANDLE_MULTIBYTE)
   static char *target;
-  static int mb_len;
+  static int tlen;
 #else
   static char target;
 #endif
-  static int orig_dir, dir;
 
   if (key == ';' || key == ',')
-    dir = key == ';' ? orig_dir : -orig_dir;
+    _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir;
   else
     {
-      if (vi_redoing)
-#if defined (HANDLE_MULTIBYTE)
-       target = _rl_vi_last_search_mbchar;
-#else
-       target = _rl_vi_last_search_char;
-#endif
-      else
-       {
-#if defined (HANDLE_MULTIBYTE)
-         mb_len = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
-         target = _rl_vi_last_search_mbchar;
-#else
-         RL_SETSTATE(RL_STATE_MOREINPUT);
-         _rl_vi_last_search_char = target = rl_read_key ();
-         RL_UNSETSTATE(RL_STATE_MOREINPUT);
-#endif
-       }
-
       switch (key)
         {
         case 't':
-          orig_dir = dir = FTO;
+          _rl_cs_orig_dir = _rl_cs_dir = FTO;
           break;
 
         case 'T':
-          orig_dir = dir = BTO;
+          _rl_cs_orig_dir = _rl_cs_dir = BTO;
           break;
 
         case 'f':
-          orig_dir = dir = FFIND;
+          _rl_cs_orig_dir = _rl_cs_dir = FFIND;
           break;
 
         case 'F':
-          orig_dir = dir = BFIND;
+          _rl_cs_orig_dir = _rl_cs_dir = BFIND;
           break;
         }
+
+      if (vi_redoing)
+       {
+         /* set target and tlen below */
+       }
+#if defined (READLINE_CALLBACKS)
+      else if (RL_ISSTATE (RL_STATE_CALLBACK))
+        {
+          _rl_callback_data = _rl_callback_data_alloc (count);
+          _rl_callback_data->i1 = _rl_cs_dir;
+          _rl_callback_func = _rl_vi_callback_char_search;
+          return (0);
+        }
+#endif
+      else
+       {
+#if defined (HANDLE_MULTIBYTE)
+         _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
+#else
+         RL_SETSTATE(RL_STATE_MOREINPUT);
+         _rl_vi_last_search_char = rl_read_key ();
+         RL_UNSETSTATE(RL_STATE_MOREINPUT);
+#endif
+       }
     }
 
 #if defined (HANDLE_MULTIBYTE)
-   return (_rl_char_search_internal (count, dir, target, mb_len));
+  target = _rl_vi_last_search_mbchar;
+  tlen = _rl_vi_last_search_mblen;
 #else
-  return (_rl_char_search_internal (count, dir, target));
+  target = _rl_vi_last_search_char;
+#endif
+
+#if defined (HANDLE_MULTIBYTE)
+  return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen));
+#else
+  return (_rl_char_search_internal (count, _rl_cs_dir, target));
 #endif
 }
 
@@ -1285,25 +1392,12 @@ rl_vi_bracktype (c)
     }
 }
 
-/* XXX - think about reading an entire mbchar with _rl_read_mbchar and
-   inserting it in one bunch instead of the loop below (like in
-   rl_vi_char_search or _rl_vi_change_mbchar_case).  Set c to mbchar[0]
-   for test against 033 or ^C.  Make sure that _rl_read_mbchar does
-   this right. */
-int
-rl_vi_change_char (count, key)
-     int count, key;
+static int
+_rl_vi_change_char (count, c, mb)
+     int count, c;
+     char *mb;
 {
-  int c, p;
-
-  if (vi_redoing)
-    c = _rl_vi_last_replacement;
-  else
-    {
-      RL_SETSTATE(RL_STATE_MOREINPUT);
-      _rl_vi_last_replacement = c = rl_read_key ();
-      RL_UNSETSTATE(RL_STATE_MOREINPUT);
-    }
+  int p;
 
   if (c == '\033' || c == CTRL ('C'))
     return -1;
@@ -1313,31 +1407,87 @@ rl_vi_change_char (count, key)
     {
       p = rl_point;
       rl_vi_delete (1, c);
+      if (rl_point < p)                /* Did we retreat at EOL? */
+       rl_point++;
 #if defined (HANDLE_MULTIBYTE)
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       {
-         if (rl_point < p)             /* Did we retreat at EOL? */
-           rl_point++;
-         while (_rl_insert_char (1, c))
-           {
-             RL_SETSTATE (RL_STATE_MOREINPUT);
-             c = rl_read_key ();
-             RL_UNSETSTATE (RL_STATE_MOREINPUT);
-           }
-       }
+       rl_insert_text (mb);
       else
 #endif
-       {
-         if (rl_point < p)             /* Did we retreat at EOL? */
-           rl_point++;
-         _rl_insert_char (1, c);
-       }
+       _rl_insert_char (1, c);
     }
+
+  /* The cursor shall be left on the last character changed. */
+  rl_backward_char (1, c);
+
   rl_end_undo_group ();
 
   return (0);
 }
 
+static int
+_rl_vi_callback_getchar (mb, mblen)
+     char *mb;
+     int mblen;
+{
+  int c;
+
+  RL_SETSTATE(RL_STATE_MOREINPUT);
+  c = rl_read_key ();
+  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    c = _rl_read_mbstring (c, mb, mblen);
+#endif
+
+  return c;
+}
+
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_change_char (data)
+     _rl_callback_generic_arg *data;
+{
+  int c;
+  char mb[MB_LEN_MAX];
+
+  _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+
+  return (_rl_vi_change_char (data->count, c, mb));
+}
+#endif
+
+int
+rl_vi_change_char (count, key)
+     int count, key;
+{
+  int c;
+  char mb[MB_LEN_MAX];
+
+  if (vi_redoing)
+    {
+      c = _rl_vi_last_replacement;
+      mb[0] = c;
+      mb[1] = '\0';
+    }
+#if defined (READLINE_CALLBACKS)
+  else if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = _rl_callback_data_alloc (count);
+      _rl_callback_func = _rl_vi_callback_change_char;
+      return (0);
+    }
+#endif
+  else
+    _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+
+  return (_rl_vi_change_char (count, c, mb));
+}
+
 int
 rl_vi_subst (count, key)
      int count, key;
@@ -1460,9 +1610,8 @@ rl_vi_possible_completions()
 #endif
 
 /* Functions to save and restore marks. */
-int
-rl_vi_set_mark (count, key)
-     int count, key;
+static int
+_rl_vi_set_mark ()
 {
   int ch;
 
@@ -1480,10 +1629,37 @@ rl_vi_set_mark (count, key)
   return 0;
 }
 
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_set_mark (data)
+     _rl_callback_generic_arg *data;
+{
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+
+  return (_rl_vi_set_mark ());
+}
+#endif
+
 int
-rl_vi_goto_mark (count, key)
+rl_vi_set_mark (count, key)
      int count, key;
 {
+#if defined (READLINE_CALLBACKS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = 0;
+      _rl_callback_func = _rl_vi_callback_set_mark;
+      return (0);
+    }
+#endif
+
+  return (_rl_vi_set_mark ());
+}
+
+static int
+_rl_vi_goto_mark ()
+{
   int ch;
 
   RL_SETSTATE(RL_STATE_MOREINPUT);
@@ -1511,4 +1687,31 @@ rl_vi_goto_mark (count, key)
   return 0;
 }
 
+#if defined (READLINE_CALLBACKS)
+static int
+_rl_vi_callback_goto_mark (data)
+     _rl_callback_generic_arg *data;
+{
+  _rl_callback_func = 0;
+  _rl_want_redisplay = 1;
+
+  return (_rl_vi_goto_mark ());
+}
+#endif
+
+int
+rl_vi_goto_mark (count, key)
+     int count, key;
+{
+#if defined (READLINE_CALLBACKS)
+  if (RL_ISSTATE (RL_STATE_CALLBACK))
+    {
+      _rl_callback_data = 0;
+      _rl_callback_func = _rl_vi_callback_goto_mark;
+      return (0);
+    }
+#endif
+
+  return (_rl_vi_goto_mark ());
+}
 #endif /* VI_MODE */
index c375c1d..32e2b31 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for the Bash library
 #
 #
-# Copyright (C) 1998-2002 Free Software Foundation, Inc.
+# Copyright (C) 1998-2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -86,21 +86,21 @@ CSOURCES = clktck.c clock.c getcwd.c getenv.c oslib.c setlinebuf.c \
           inet_aton.c netconn.c netopen.c strpbrk.c timeval.c makepath.c \
           pathcanon.c pathphys.c tmpfile.c stringlist.c stringvec.c spell.c \
           shquote.c strtrans.c strindex.c snprintf.c mailstat.c \
-          fmtulong.c fmtullong.c fmtumax.c shmatch.c \
+          fmtulong.c fmtullong.c fmtumax.c shmatch.c strnlen.c \
           strtoll.c strtoull.c strtoimax.c strtoumax.c memset.c strstr.c \
-          mktime.c strftime.c xstrchr.c zcatfd.c 
+          mktime.c strftime.c xstrchr.c zcatfd.c winsize.c
 
 # The header files for this library.
 HSOURCES = 
 
 # The object files contained in $(LIBRARY_NAME)
 LIBOBJS = @LIBOBJS@
-OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o \
+OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.o \
          itos.o zread.o zwrite.o shtty.o shmatch.o \
          netconn.o netopen.o timeval.o makepath.o pathcanon.o \
          pathphys.o tmpfile.o stringlist.o stringvec.o spell.o shquote.o \
          strtrans.o strindex.o snprintf.o mailstat.o fmtulong.o \
-         fmtullong.o fmtumax.o xstrchr.o zcatfd.o ${LIBOBJS}
+         fmtullong.o fmtumax.o xstrchr.o zcatfd.o winsize.o ${LIBOBJS}
 
 SUPPORT = Makefile
 
@@ -162,6 +162,7 @@ strftime.o: strftime.c
 strindex.o: strindex.c
 stringlist.o: stringlist.c
 stringvec.o: stringvec.c
+strnlen.o: strnlen.c
 strpbrk.o: strpbrk.c
 strtod.o: strtod.c
 strtoimax.o: strtoimax.c
@@ -218,6 +219,7 @@ strftime.o: ${BUILD_DIR}/config.h
 strindex.o: ${BUILD_DIR}/config.h
 stringlist.o: ${BUILD_DIR}/config.h
 stringvec.o: ${BUILD_DIR}/config.h
+strnlen.o: ${BUILD_DIR}/config.h
 strpbrk.o: ${BUILD_DIR}/config.h
 strtod.o: ${BUILD_DIR}/config.h
 strtoimax.o: ${BUILD_DIR}/config.h
@@ -372,6 +374,8 @@ stringvec.o: ${topdir}/unwind_prot.h ${topdir}/dispose_cmd.h
 stringvec.o: ${topdir}/make_cmd.h ${topdir}/subst.h ${topdir}/sig.h
 stringvec.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h ${BUILD_DIR}/version.h
 
+strnlen.o: ${BASHINCDIR}/stdc.h
+
 strpbrk.o: ${BASHINCDIR}/stdc.h
 
 strtod.o: ${topdir}/bashansi.h
index a7dfb18..c3fbf75 100644 (file)
@@ -127,7 +127,7 @@ putenv (str)
   value = name + offset + 1;
 
   /* XXX - should we worry about readonly here? */
-  var = bind_variable (name, value);
+  var = bind_variable (name, value, 0);
   if (var == 0)
     {
       errno = EINVAL;
@@ -175,7 +175,7 @@ setenv (name, value, rewrite)
     var = find_variable (name);
 
   if (var == 0)
-    var = bind_variable (name, v);
+    var = bind_variable (name, v, 0);
 
   if (var == 0)
     return -1;
index d05aef5..ae7c249 100644 (file)
@@ -1,6 +1,6 @@
 /* netconn.c -- is a particular file descriptor a network connection?. */
 
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -52,8 +52,8 @@ isnetconn (fd)
 
   l = sizeof(sa);
   rv = getpeername(fd, &sa, &l);
-  /* Solaris 2.5 getpeername() returns EINVAL if the fd is not a socket. */
-  return ((rv < 0 && (errno == ENOTSOCK || errno == EINVAL)) ? 0 : 1);
+  /* Posix.2 says getpeername can return these errors. */
+  return ((rv < 0 && (errno == ENOTSOCK || errno == ENOTCONN || errno == EINVAL)) ? 0 : 1);
 #else /* !HAVE_GETPEERNAME || SVR4_2 || __BEOS__ */
 #  if defined (SVR4) || defined (SVR4_2)
   /* Sockets on SVR4 and SVR4.2 are character special (streams) devices. */
index 8892954..3b427a8 100644 (file)
@@ -75,10 +75,11 @@ static int
 _path_isdir (path)
      char *path;
 {
-  int l, x;
+  int l;
   struct stat sb;
 
   /* This should leave errno set to the correct value. */
+  errno = 0;
   l = stat (path, &sb) == 0 && S_ISDIR (sb.st_mode);
 #if defined (__CYGWIN__)
   if (l == 0)
index 4d6304c..1f73944 100644 (file)
@@ -285,6 +285,7 @@ sh_realpath (pathname, resolved)
     {
       strncpy (resolved, wd, PATH_MAX - 1);
       resolved[PATH_MAX - 1] = '\0';
+      free (wd);
       return resolved;
     }
   else
index 18292ae..4508ed0 100644 (file)
@@ -39,7 +39,7 @@
 #include "variables.h"
 #include "externs.h"
 
-extern int glob_ignore_case;
+extern int glob_ignore_case, match_ignore_case;
 
 int
 sh_regmatch (string, pattern, flags)
@@ -65,7 +65,7 @@ sh_regmatch (string, pattern, flags)
 #endif
   
   rflags = REG_EXTENDED;
-  if (glob_ignore_case)
+  if (glob_ignore_case || match_ignore_case)
     rflags |= REG_ICASE;
 #if !defined (ARRAY_VARS)
   rflags |= REG_NOSUB;
index aac2d34..e992a66 100644 (file)
@@ -81,7 +81,8 @@ sh_double_quote (string)
 
   for (s = string; s && (c = *s); s++)
     {
-      if (sh_syntaxtab[c] & CBSDQUOTE)
+      /* Backslash-newline disappears within double quotes, so don't add one. */
+      if ((sh_syntaxtab[c] & CBSDQUOTE) && c != '\n')
        *r++ = '\\';
       else if (c == CTLESC || c == CTLNUL)
        *r++ = CTLESC;          /* could be '\\'? */
@@ -95,6 +96,32 @@ sh_double_quote (string)
   return (result);
 }
 
+/* Turn S into a simple double-quoted string.  If FLAGS is non-zero, quote
+   double quote characters in S with backslashes. */
+char *
+sh_mkdoublequoted (s, slen, flags)
+     const char *s;
+     int slen, flags;
+{
+  char *r, *ret;
+  int rlen;
+
+  rlen = (flags == 0) ? slen + 3 : (2 * slen) + 1;
+  ret = r = (char *)xmalloc (rlen);
+  
+  *r++ = '"';
+  while (*s)
+    {
+      if (flags && *s == '"')
+       *r++ = '\\';
+      *r++ = *s++;
+    }
+  *r++ = '"';
+  *r = '\0';
+
+  return ret;
+}
+
 /* Remove backslashes that are quoting characters that are special between
    double quotes.  Return a new string.  XXX - should this handle CTLESC
    and CTLNUL? */
@@ -128,7 +155,11 @@ sh_un_double_quote (string)
 }
 
 /* Quote special characters in STRING using backslashes.  Return a new
-   string. */
+   string.  NOTE:  if the string is to be further expanded, we need a
+   way to protect the CTLESC and CTLNUL characters.  As I write this,
+   the current callers will never cause the string to be expanded without
+   going through the shell parser, which will protect the internal
+   quoting characters. */
 char *
 sh_backslash_quote (string)
      char *string;
@@ -160,11 +191,12 @@ sh_backslash_quote (string)
            *r++ = '\\';
          *r++ = c;
          break;
-#endif
+
        case CTLESC: case CTLNUL:               /* internal quoting characters */
          *r++ = CTLESC;                        /* could be '\\'? */
          *r++ = c;
          break;
+#endif
 
        case '#':                               /* comment char */
          if (s == string)
index b79b41f..114135f 100644 (file)
@@ -372,10 +372,27 @@ static void xfree __P((void *));
 
 /* if width and prec. in the args */
 #define STAR_ARGS(p) \
+       do { \
            if ((p)->flags & PF_STAR_W) \
-             (p)->width = GETARG (int); \
+             { \
+               (p)->width = GETARG (int); \
+               if ((p)->width < 0) \
+                 { \
+                   (p)->flags |= PF_LADJUST; \
+                   (p)->justify = LEFT; \
+                   (p)->width = -(p)->width; \
+                 } \
+             } \
            if ((p)->flags & PF_STAR_P) \
-             (p)->precision = GETARG (int)
+             { \
+               (p)->precision = GETARG (int); \
+               if ((p)->precision < 0) \
+                 { \
+                   (p)->flags &= ~PF_STAR_P; \
+                   (p)->precision = NOT_FOUND; \
+                 } \
+             } \
+       } while (0)
 
 #if defined (HAVE_LOCALE_H)
 #  define GETLOCALEDATA(d, t, g) \
@@ -915,7 +932,7 @@ floating(p, d)
   char *tmp, *tmp2, *t;
   int i;
 
-  if (chkinfnan(p, d, 1) || chkinfnan(p, d, 2))
+  if (d != 0 && (chkinfnan(p, d, 1) || chkinfnan(p, d, 2)))
     return;    /* already printed nan or inf */
 
   GETLOCALEDATA(decpoint, thoussep, grouping);
@@ -936,8 +953,8 @@ floating(p, d)
   PUT_SPACE(d, p, 0.);
 
   while (*tmp)
-    { /* the integral */
-      PUT_CHAR(*tmp, p);
+    {
+      PUT_CHAR(*tmp, p);       /* the integral */
       tmp++;
     }
   FREE (t);
@@ -1010,7 +1027,7 @@ exponent(p, d)
     PUT_CHAR('E', p);
 
   /* the sign of the exp */
-  if (j > 0)
+  if (j >= 0)
     PUT_CHAR('+', p);
   else
     {
@@ -1150,6 +1167,7 @@ vsnprintf_internal(data, string, length, format, args)
   wint_t wc;
 #endif
   const char *convstart;
+  int negprec;
 
   /* Sanity check, the string length must be >= 0.  C99 actually says that
      LENGTH can be zero here, in the case of snprintf/vsnprintf (it's never
@@ -1165,6 +1183,7 @@ vsnprintf_internal(data, string, length, format, args)
   decpoint = thoussep = 0;
   grouping = 0;
 
+  negprec = 0;
   for (; c = *(data->pf); data->pf++)
     {
       if (c != '%')
@@ -1221,16 +1240,24 @@ vsnprintf_internal(data, string, length, format, args)
                  data->flags |= PF_STAR_W;
                continue;
              case '-':
-               data->flags |= PF_LADJUST;
-               data->justify = LEFT;
+               if ((data->flags & PF_DOT) == 0)
+                 {
+                   data->flags |= PF_LADJUST;
+                   data->justify = LEFT;
+                 }
+               else
+                 negprec = 1;
                continue;
              case ' ':
                if ((data->flags & PF_PLUS) == 0)
                  data->flags |= PF_SPACE;
                continue;
              case '+':
-               data->flags |= PF_PLUS;
-               data->justify = RIGHT;
+               if ((data->flags & PF_DOT) == 0)
+                 {
+                   data->flags |= PF_PLUS;
+                   data->justify = RIGHT;
+                 }
                continue;
              case '\'':
                data->flags |= PF_THOUSANDS;
@@ -1250,7 +1277,7 @@ vsnprintf_internal(data, string, length, format, args)
                if (n < 0)
                  n = 0;
                if (data->flags & PF_DOT)
-                 data->precision = n;
+                 data->precision = negprec ? NOT_FOUND : n;
                else
                  data->width = n;
                continue;
@@ -1507,11 +1534,21 @@ ldfallback (data, fs, fe, ld)
   char fmtbuf[FALLBACK_FMTSIZE], *obuf;
   int fl;
 
-  obuf = (char *)xmalloc(LFALLBACK_BASE + (data->precision < 6 ? 6 : data->precision) + 2);
+  fl = LFALLBACK_BASE + (data->precision < 6 ? 6 : data->precision) + 2;
+  obuf = (char *)xmalloc (fl);
   fl = fe - fs + 1;
   strncpy (fmtbuf, fs, fl);
   fmtbuf[fl] = '\0';
-  sprintf (obuf, fmtbuf, ld);
+
+  if ((data->flags & PF_STAR_W) && (data->flags & PF_STAR_P))
+    sprintf (obuf, fmtbuf, data->width, data->precision, ld);
+  else if (data->flags & PF_STAR_W)
+    sprintf (obuf, fmtbuf, data->width, ld);
+  else if (data->flags & PF_STAR_P)
+    sprintf (obuf, fmtbuf, data->precision, ld);
+  else
+    sprintf (obuf, fmtbuf, ld);
+
   for (x = obuf; *x; x++)
     PUT_CHAR (*x, data);    
   xfree (obuf);
@@ -1533,7 +1570,16 @@ dfallback (data, fs, fe, d)
   fl = fe - fs + 1;
   strncpy (fmtbuf, fs, fl);
   fmtbuf[fl] = '\0';
-  sprintf (obuf, fmtbuf, d);
+
+  if ((data->flags & PF_STAR_W) && (data->flags & PF_STAR_P))
+    sprintf (obuf, fmtbuf, data->width, data->precision, d);
+  else if (data->flags & PF_STAR_W)
+    sprintf (obuf, fmtbuf, data->width, d);
+  else if (data->flags & PF_STAR_P)
+    sprintf (obuf, fmtbuf, data->precision, d);
+  else
+    sprintf (obuf, fmtbuf, d);
+
   for (x = obuf; *x; x++)
     PUT_CHAR (*x, data);    
 }
index 4cb542f..0783d28 100644 (file)
 
 #undef strchr  /* avoid AIX weirdness */
 
+#if defined (SHELL)
+extern char *get_string_value (const char *);
+#endif
+
 extern void tzset(void);
 static int weeknumber(const struct tm *timeptr, int firstweekday);
 static int iso8601wknum(const struct tm *timeptr);
 
+#ifndef inline
 #ifdef __GNUC__
 #define inline __inline__
 #else
 #define inline /**/
 #endif
+#endif
 
 #define range(low, item, hi)   max(low, min(item, hi))
 
@@ -98,8 +104,12 @@ extern int daylight;
 #if defined(SOLARIS) || defined(mips) || defined (M_UNIX)
 extern long int timezone, altzone;
 #else
+#  if defined (HPUX)
+extern long int timezone;
+#  else
 extern int timezone, altzone;
-#endif
+#  endif /* !HPUX */
+#endif /* !SOLARIS && !mips && !M_UNIX */
 #endif
 
 #undef min     /* just in case */
@@ -480,8 +490,13 @@ strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr)
                         * Systems with tzname[] probably have timezone as
                         * secs west of GMT.  Convert to mins east of GMT.
                         */
+#  ifdef HPUX
+                       off = -timezone / 60;
+#  else
                        off = -(daylight ? timezone : altzone) / 60;
+#  endif /* !HPUX */
 #else /* !HAVE_TZNAME */
+                       gettimeofday(& tv, & zone);
                        off = -zone.tz_minuteswest;
 #endif /* !HAVE_TZNAME */
 #endif /* !HAVE_TM_ZONE */
diff --git a/lib/sh/strnlen.c b/lib/sh/strnlen.c
new file mode 100644 (file)
index 0000000..da8feec
--- /dev/null
@@ -0,0 +1,45 @@
+/* Copyright (C) 2004 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if !defined (HAVE_STRNLEN)
+
+#include <sys/types.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <stdc.h>
+
+/* Find the length of S, but scan at most MAXLEN characters.  If no '\0'
+   terminator is found within the first MAXLEN characters, return MAXLEN. */
+size_t
+strnlen (s, maxlen)
+     register const char *s;
+     size_t maxlen;
+{
+  register const char *e;
+  size_t n;
+
+  for (e = s, n = 0; *e && n < maxlen; e++, n++)
+    ;
+  return n;
+}
+#endif
index 30075ce..e20c4cc 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert string representation of a number into an intmax_t value.
-   Copyright 1999, 2001 Free Software Foundation, Inc.
+   Copyright 1999-2005 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -48,6 +48,10 @@ extern long strtol __P((const char *, char **, int));
 extern long long strtoll __P((const char *, char **, int));
 #endif
 
+#ifdef strtoimax
+#undef strtoimax
+#endif
+
 intmax_t
 strtoimax (ptr, endptr, base)
      const char *ptr;
index c35461a..e723d49 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert string representation of a number into an uintmax_t value.
-   Copyright 1999, 2001 Free Software Foundation, Inc.
+   Copyright 1999-2005 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -48,6 +48,10 @@ extern unsigned long strtoul __P((const char *, char **, int));
 extern unsigned long long strtoull __P((const char *, char **, int));
 #endif
 
+#ifdef strtoumax
+#undef strtoumax
+#endif
+
 uintmax_t
 strtoumax (ptr, endptr, base)
      const char *ptr;
index e264e3d..acf9d69 100644 (file)
@@ -44,7 +44,8 @@
    that we're translating a string for `echo -e', and therefore should not
    treat a single quote as a character that may be escaped with a backslash.
    If (FLAGS&2) is non-zero, we're expanding for the parser and want to
-   quote CTLESC and CTLNUL with CTLESC */
+   quote CTLESC and CTLNUL with CTLESC.  If (flags&4) is non-zero, we want
+   to remove the backslash before any unrecognized escape sequence. */
 char *
 ansicstr (string, len, flags, sawc, rlen)
      char *string;
@@ -141,7 +142,10 @@ ansicstr (string, len, flags, sawc, rlen)
                  break;
                }
                /*FALLTHROUGH*/
-           default:  *r++ = '\\'; break;
+           default:
+               if ((flags & 4) == 0)
+                 *r++ = '\\';
+               break;
            }
          if ((flags & 2) && (c == CTLESC || c == CTLNUL))
            *r++ = CTLESC;
diff --git a/lib/sh/winsize.c b/lib/sh/winsize.c
new file mode 100644 (file)
index 0000000..8b39c99
--- /dev/null
@@ -0,0 +1,82 @@
+/* Handle window size changes and information. */
+
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 2, or (at your option) any later
+   version.
+
+   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Bash; see the file COPYING.  If not, write to the Free Software
+   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+
+#include "config.h"
+
+#include <stdc.h>
+
+#include "bashtypes.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include <sys/ioctl.h>
+
+#if !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
+/* For struct winsize on SCO */
+/*   sys/ptem.h has winsize but needs mblk_t from sys/stream.h */
+#  if defined (HAVE_SYS_PTEM_H) && defined (TIOCGWINSZ) && defined (SIGWINCH)
+#    if defined (HAVE_SYS_STREAM_H)
+#      include <sys/stream.h>
+#    endif
+#    include <sys/ptem.h>
+#  endif /* HAVE_SYS_PTEM_H && TIOCGWINSZ && SIGWINCH */
+#endif /* !STRUCT_WINSIZE_IN_SYS_IOCTL */
+
+#include <stdio.h>
+
+/* Return the fd from which we are actually getting input. */
+#define input_tty() (shell_tty != -1) ? shell_tty : fileno (stderr)
+
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+extern int shell_tty;
+
+#if defined (READLINE)
+extern void rl_set_screen_size __P((int, int));
+#endif
+
+void
+get_new_window_size (from_sig, rp, cp)
+     int from_sig;
+     int *rp, *cp;
+{
+#if defined (TIOCGWINSZ)
+  struct winsize win;
+  int tty;
+
+  tty = input_tty ();
+  if (tty >= 0 && (ioctl (tty, TIOCGWINSZ, &win) == 0) &&
+      win.ws_row > 0 && win.ws_col > 0)
+    {
+      sh_set_lines_and_columns (win.ws_row, win.ws_col);
+#if defined (READLINE)
+      rl_set_screen_size (win.ws_row, win.ws_col);
+      if (rp)
+       *rp = win.ws_row;
+      if (cp)
+       *cp = win.ws_col;
+#endif
+    }
+#endif
+}
index b515548..460234b 100644 (file)
@@ -124,9 +124,13 @@ zsyncfd (fd)
      int fd;
 {
   off_t off;
+  int r;
 
   off = lused - lind;
+  r = 0;
   if (off > 0)
-    lseek (fd, -off, SEEK_CUR);
-  lused = lind = 0;
+    r = lseek (fd, -off, SEEK_CUR);
+
+  if (r >= 0)
+    lused = lind = 0;
 }
index 2f17bce..bf5639f 100644 (file)
@@ -4,7 +4,7 @@
 #                                                                 #
 ####################################################################
 
-# Copyright (C) 1996 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.     
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index aa7bbf0..a9d3741 100644 (file)
@@ -4,7 +4,7 @@
 #                                                                 #
 ####################################################################
 
-# Copyright (C) 1996 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2005 Free Software Foundation, Inc.     
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/lib/tilde/doc/Makefile b/lib/tilde/doc/Makefile
deleted file mode 100644 (file)
index a2246db..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-clean distclean mostlyclean maintainer-clean:
-       rm -f tilde.??
-
-all:
-       cp tilde.texi tilde.info
diff --git a/lib/tilde/doc/tilde.texi b/lib/tilde/doc/tilde.texi
deleted file mode 100644 (file)
index e69de29..0000000
index 154f7f8..d757f7a 100644 (file)
@@ -43,7 +43,9 @@
 #endif /* HAVE_STDLIB_H */
 
 #include <sys/types.h>
+#if defined (HAVE_PWD_H)
 #include <pwd.h>
+#endif
 
 #include "tilde.h"
 
@@ -54,8 +56,12 @@ static void *xmalloc (), *xrealloc ();
 #endif /* TEST || STATIC_MALLOC */
 
 #if !defined (HAVE_GETPW_DECLS)
+#  if defined (HAVE_GETPWUID)
 extern struct passwd *getpwuid PARAMS((uid_t));
+#  endif
+#  if defined (HAVE_GETPWNAM)
 extern struct passwd *getpwnam PARAMS((const char *));
+#  endif
 #endif /* !HAVE_GETPW_DECLS */
 
 #if !defined (savestring)
@@ -277,6 +283,39 @@ isolate_tilde_prefix (fname, lenp)
   return ret;
 }
 
+#if 0
+/* Public function to scan a string (FNAME) beginning with a tilde and find
+   the portion of the string that should be passed to the tilde expansion
+   function.  Right now, it just calls tilde_find_suffix and allocates new
+   memory, but it can be expanded to do different things later. */
+char *
+tilde_find_word (fname, flags, lenp)
+     const char *fname;
+     int flags, *lenp;
+{
+  int x;
+  char *r;
+
+  x = tilde_find_suffix (fname);
+  if (x == 0)
+    {
+      r = savestring (fname);
+      if (lenp)
+       *lenp = 0;
+    }
+  else
+    {
+      r = (char *)xmalloc (1 + x);
+      strncpy (r, fname, x);
+      r[x] = '\0';
+      if (lenp)
+       *lenp = x;
+    }
+
+  return r;
+}
+#endif
+
 /* Return a string that is PREFIX concatenated with SUFFIX starting at
    SUFFIND. */
 static char *
@@ -347,7 +386,11 @@ tilde_expand_word (filename)
   /* No preexpansion hook, or the preexpansion hook failed.  Look in the
      password database. */
   dirname = (char *)NULL;
+#if defined (HAVE_GETPWNAM)
   user_entry = getpwnam (username);
+#else
+  user_entry = 0;
+#endif
   if (user_entry == 0)
     {
       /* If the calling program has a special syntax for expanding tildes,
@@ -372,8 +415,9 @@ tilde_expand_word (filename)
       free (username);
       dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
     }
-
+#if defined (HAVE_GETPWENT)
   endpwent ();
+#endif
   return (dirname);
 }
 
index f8182c9..c58ce20 100644 (file)
@@ -71,6 +71,9 @@ extern char *tilde_expand PARAMS((const char *));
    tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
 extern char *tilde_expand_word PARAMS((const char *));
 
+/* Find the portion of the string beginning with ~ that should be expanded. */
+extern char *tilde_find_word PARAMS((const char *, int, int *));
+
 #ifdef __cplusplus
 }
 #endif
index 0c4772a..48e44ec 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -71,8 +71,8 @@ set_default_locale ()
   textdomain (PACKAGE);
 }
 
-/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES and LC_NUMERIC
-   if they are not specified in the environment, but LC_ALL is.  This
+/* Set default values for LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_NUMERIC and
+   LC_TIME if they are not specified in the environment, but LC_ALL is.  This
    should be called from main() after parsing the environment. */
 void
 set_default_locale_vars ()
@@ -109,6 +109,12 @@ set_default_locale_vars ()
     setlocale (LC_NUMERIC, lc_all);
 #  endif /* LC_NUMERIC */
 
+#  if defined (LC_TIME)
+  val = get_string_value ("LC_TIME");
+  if (val == 0 && lc_all && *lc_all)
+    setlocale (LC_TIME, lc_all);
+#  endif /* LC_TIME */
+
 #endif /* HAVE_SETLOCALE */
 
   val = get_string_value ("TEXTDOMAIN");
@@ -213,7 +219,15 @@ set_locale_var (var, value)
        return (setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC")) != 0);
 #  endif /* LC_NUMERIC */
     }
+  else if (var[3] == 'T' && var[4] == 'I')     /* LC_TIME */
+    {
+#  if defined (LC_TIME)
+      if (lc_all == 0 || *lc_all == '\0')
+       return (setlocale (LC_TIME, get_locale_var ("LC_TIME")) != 0);
+#  endif /* LC_TIME */
+    }
 #endif /* HAVE_SETLOCALE */
+  
 
   return (0);
 }
@@ -285,6 +299,9 @@ reset_locale_vars ()
 #  if defined (LC_NUMERIC)
   setlocale (LC_NUMERIC, get_locale_var ("LC_NUMERIC"));
 #  endif
+#  if defined (LC_TIME)
+  setlocale (LC_TIME, get_locale_var ("LC_TIME"));
+#  endif
 
   locale_setblanks ();  
 
index f23a7f8..4b7e207 100644 (file)
@@ -1,6 +1,6 @@
 /* mailcheck.c -- The check is in the mail... */
 
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -122,6 +122,15 @@ find_mail_file (file)
     } \
   while (0)
 
+#define UPDATE_MAIL_FILE(i, finfo) \
+  do \
+    { \
+      mailfiles[i]->access_time = finfo.st_atime; \
+      mailfiles[i]->mod_time = finfo.st_mtime; \
+      mailfiles[i]->file_size = finfo.st_size; \
+    } \
+  while (0)
+
 static void
 update_mail_file (i)
      int i;
@@ -131,11 +140,7 @@ update_mail_file (i)
 
   file = mailfiles[i]->name;
   if (mailstat (file, &finfo) == 0)
-    {
-      mailfiles[i]->access_time = finfo.st_atime;
-      mailfiles[i]->mod_time = finfo.st_mtime;
-      mailfiles[i]->file_size = finfo.st_size;
-    }
+    UPDATE_MAIL_FILE (i, finfo);
   else
     RESET_MAIL_FILE (i);
 }
@@ -155,11 +160,8 @@ add_mail_file (file, msg)
   if (i >= 0)
     {
       if (mailstat (filename, &finfo) == 0)
-       {
-         mailfiles[i]->mod_time = finfo.st_mtime;
-         mailfiles[i]->access_time = finfo.st_atime;
-         mailfiles[i]->file_size = finfo.st_size;
-       }
+       UPDATE_MAIL_FILE (i, finfo);
+
       free (filename);
       return i;
     }
@@ -182,9 +184,7 @@ reset_mail_files ()
   register int i;
 
   for (i = 0; i < mailfiles_count; i++)
-    {
-      RESET_MAIL_FILE (i);
-    }
+    RESET_MAIL_FILE (i);
 }
 
 /* Free the information that we have about the remembered mail files. */
@@ -208,7 +208,8 @@ free_mail_files ()
 }
 
 /* Return non-zero if FILE's mod date has changed and it has not been
-   accessed since modified. */
+   accessed since modified.  If the size has dropped to zero, reset
+   the cached mail file info. */
 static int
 file_mod_date_changed (i)
      int i;
@@ -223,6 +224,9 @@ file_mod_date_changed (i)
   if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
     return (mtime != finfo.st_mtime);
 
+  if (finfo.st_size == 0 && mailfiles[i]->file_size > 0)
+    UPDATE_MAIL_FILE (i, finfo);
+
   return (0);
 }
 
@@ -381,7 +385,7 @@ check_mail ()
          use_user_notification = mailfiles[i]->msg != (char *)NULL;
          message = mailfiles[i]->msg ? mailfiles[i]->msg : _("You have mail in $_");
 
-         bind_variable ("_", current_mail_file);
+         bind_variable ("_", current_mail_file, 0);
 
 #define atime mailfiles[i]->access_time
 #define mtime mailfiles[i]->mod_time
@@ -426,7 +430,7 @@ check_mail ()
 
   if (dollar_underscore)
     {
-      bind_variable ("_", dollar_underscore);
+      bind_variable ("_", dollar_underscore, 0);
       free (dollar_underscore);
     }
   else
index 479d9c3..df20010 100644 (file)
@@ -1,7 +1,7 @@
 /* make_cmd.c -- Functions for making instances of the various
    parser constructs. */
 
-/* Copyright (C) 1989-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -77,15 +77,23 @@ cmd_init ()
 }
 
 WORD_DESC *
+alloc_word_desc ()
+{
+  WORD_DESC *temp;
+
+  ocache_alloc (wdcache, WORD_DESC, temp);
+  temp->flags = 0;
+  temp->word = 0;
+  return temp;
+}
+
+WORD_DESC *
 make_bare_word (string)
      const char *string;
 {
   WORD_DESC *temp;
-#if 0
-  temp = (WORD_DESC *)xmalloc (sizeof (WORD_DESC));
-#else
-  ocache_alloc (wdcache, WORD_DESC, temp);
-#endif
+
+  temp = alloc_word_desc ();
 
   if (*string)
     temp->word = savestring (string);
@@ -95,7 +103,6 @@ make_bare_word (string)
       temp->word[0] = '\0';
     }
 
-  temp->flags = 0;
   return (temp);
 }
 
@@ -161,11 +168,8 @@ make_word_list (word, wlink)
 {
   WORD_LIST *temp;
 
-#if 0
-  temp = (WORD_LIST *)xmalloc (sizeof (WORD_LIST));
-#else
   ocache_alloc (wlcache, WORD_LIST, temp);
-#endif
+
   temp->word = word;
   temp->next = wlink;
   return (temp);
@@ -255,7 +259,7 @@ make_arith_for_expr (s)
   if (s == 0 || *s == '\0')
     return ((WORD_LIST *)NULL);
   wd = make_word (s);
-  wd->flags |= W_NOGLOB|W_NOSPLIT|W_QUOTED   /* no word splitting or globbing */
+  wd->flags |= W_NOGLOB|W_NOSPLIT|W_QUOTED|W_DQUOTE;   /* no word splitting or globbing */
   result = make_word_list (wd, (WORD_LIST *)NULL);
   return result;
 }
@@ -355,6 +359,7 @@ COMMAND *
 make_case_command (word, clauses, lineno)
      WORD_DESC *word;
      PATTERN_LIST *clauses;
+     int lineno;
 {
   CASE_COM *temp;
 
@@ -377,6 +382,7 @@ make_pattern_list (patterns, action)
   temp->patterns = REVERSE_LIST (patterns, WORD_LIST *);
   temp->action = action;
   temp->next = NULL;
+  temp->flags = 0;
   return (temp);
 }
 
index 286cc0d..fe5dc15 100644 (file)
@@ -1,6 +1,6 @@
 /* make_cmd.h -- Declarations of functions found in make_cmd.c */
 
-/* Copyright (C) 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,6 +25,7 @@
 
 extern void cmd_init __P((void));
 
+extern WORD_DESC *alloc_word_desc __P((void));
 extern WORD_DESC *make_bare_word __P((const char *));
 extern WORD_DESC *make_word_flags __P((WORD_DESC *, const char *));
 extern WORD_DESC *make_word __P((const char *));
index df543ac..9aaa741 100644 (file)
--- a/nojobs.c
+++ b/nojobs.c
@@ -3,7 +3,7 @@
 /* This file works under BSD, System V, minix, and Posix systems.  It does
    not implement job control. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 /* Need to include this up here for *_TTY_DRIVER definitions. */
 #include "shtty.h"
 
-#if !defined (STRUCT_WINSIZE_IN_SYS_IOCTL)
-/* For struct winsize on SCO */
-/*   sys/ptem.h has winsize but needs mblk_t from sys/stream.h */
-#  if defined (HAVE_SYS_PTEM_H) && defined (TIOCGWINSZ) && defined (SIGWINCH)
-#    if defined (HAVE_SYS_STREAM_H)
-#      include <sys/stream.h>
-#    endif
-#    include <sys/ptem.h>
-#  endif /* HAVE_SYS_PTEM_H && TIOCGWINSZ && SIGWINCH */
-#endif /* !STRUCT_WINSIZE_IN_SYS_IOCTL */
-
 #include "bashintl.h"
 
 #include "shell.h"
 extern int errno;
 #endif /* !errno */
 
-#if defined (READLINE)
-extern void rl_set_screen_size __P((int, int));
-#endif
-
 extern int interactive, interactive_shell, login_shell;
 extern int subshell_environment;
 extern int last_command_exit_value, last_command_exit_signal;
@@ -148,8 +133,6 @@ static int get_pid_flags __P((pid_t));
 static void add_pid __P((pid_t, int));
 static void mark_dead_jobs_as_notified __P((int));
 
-static void get_new_window_size __P((int));
-static sighandler sigwinch_sighandler __P((int));
 static sighandler wait_sigint_handler __P((int));
 static char *j_strsignal __P((int));
 
@@ -424,69 +407,11 @@ initialize_job_control (force)
     get_tty_state ();
 }
 
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-static SigHandler *old_winch = (SigHandler *)SIG_DFL;
-
-static void
-get_new_window_size (from_sig)
-     int from_sig;
-{
-  struct winsize win;
-  int tty;
-
-  tty = input_tty ();
-  if (tty >= 0 && (ioctl (tty, TIOCGWINSZ, &win) == 0) &&
-      win.ws_row > 0 && win.ws_col > 0)
-    {
-#if defined (aixpc)
-      shell_tty_info.c_winsize = win;  /* structure copying */
-#endif
-      sh_set_lines_and_columns (win.ws_row, win.ws_col);
-#if defined (READLINE)
-      rl_set_screen_size (win.ws_row, win.ws_col);
-#endif
-    }
-}
-
-static sighandler
-sigwinch_sighandler (sig)
-     int sig;
-{
-#if defined (MUST_REINSTALL_SIGHANDLERS)
-  set_signal_handler (SIGWINCH, sigwinch_sighandler);
-#endif /* MUST_REINSTALL_SIGHANDLERS */
-  get_new_window_size (1);
-}
-#else
-static void
-get_new_window_size (from_sig)
-     int from_sig;
-{
-}
-#endif /* TIOCGWINSZ && SIGWINCH */
-
-void
-set_sigwinch_handler ()
-{
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-  old_winch = set_signal_handler (SIGWINCH, sigwinch_sighandler);
-#endif
-}
-
-void
-unset_sigwinch_handler ()
-{
-#if defined (TIOCGWINSZ) && defined (SIGWINCH)
-  set_signal_handler (SIGWINCH, old_winch);
-#endif
-}
-
 /* Setup this shell to handle C-C, etc. */
 void
 initialize_job_signals ()
 {
   set_signal_handler (SIGINT, sigint_sighandler);
-  set_sigwinch_handler ();
 
   /* If this is a login shell we don't wish to be disturbed by
      stop signals. */
@@ -887,10 +812,8 @@ wait_for (pid)
   return (return_val);
 }
 
-/* Give PID SIGNAL.  This determines what job the pid belongs to (if any).
-   If PID does belong to a job, and the job is stopped, then CONTinue the
-   job after giving it SIGNAL.  Returns -1 on failure.  If GROUP is non-null,
-   then kill the process group associated with PID. */
+/* Send PID SIGNAL.  Returns -1 on failure, 0 on success.  If GROUP is non-zero,
+   or PID is less than -1, then kill the process group associated with PID. */
 int
 kill_pid (pid, signal, group)
      pid_t pid;
@@ -898,6 +821,11 @@ kill_pid (pid, signal, group)
 {
   int result;
 
+  if (pid < -1)
+    {
+      pid = -pid;
+      group = 1;
+    }
   result = group ? killpg (pid, signal) : kill (pid, signal);
   return (result);
 }
@@ -916,7 +844,7 @@ get_tty_state ()
       ttgetattr (tty, &shell_tty_info);
       got_tty_state = 1;
       if (check_window_size)
-       get_new_window_size (0);
+       get_new_window_size (0, (int *)0, (int *)0);
     }
 }
 
diff --git a/parse.y b/parse.y
index 363430e..1e7bd27 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -1,6 +1,6 @@
 /* Yacc grammar for bash. */
 
-/* Copyright (C) 1989-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -50,6 +50,7 @@
 #include "parser.h"
 #include "mailcheck.h"
 #include "test.h"
+#include "builtins.h"
 #include "builtins/common.h"
 #include "builtins/builtext.h"
 
@@ -961,22 +962,26 @@ pipeline_command: pipeline
                        { $$ = $1; }
        |       BANG pipeline
                        {
-                         $2->flags |= CMD_INVERT_RETURN;
+                         if ($2)
+                           $2->flags |= CMD_INVERT_RETURN;
                          $$ = $2;
                        }
        |       timespec pipeline
                        {
-                         $2->flags |= $1;
+                         if ($2)
+                           $2->flags |= $1;
                          $$ = $2;
                        }
        |       timespec BANG pipeline
                        {
-                         $3->flags |= $1|CMD_INVERT_RETURN;
+                         if ($3)
+                           $3->flags |= $1|CMD_INVERT_RETURN;
                          $$ = $3;
                        }
        |       BANG timespec pipeline
                        {
-                         $3->flags |= $2|CMD_INVERT_RETURN;
+                         if ($3)
+                           $3->flags |= $2|CMD_INVERT_RETURN;
                          $$ = $3;
                        }
        |       timespec list_terminator
@@ -1028,6 +1033,7 @@ timespec: TIME
 #define PST_ALEXPAND   0x0800          /* OK to expand aliases - unused */
 #define PST_CMDTOKEN   0x1000          /* command token OK - unused */
 #define PST_COMPASSIGN 0x2000          /* parsing x=(...) compound assignment */
+#define PST_ASSIGNOK   0x4000          /* assignment statement ok in this context */
 
 /* Initial size to allocate for tokens, and the
    amount to grow them by. */
@@ -1339,8 +1345,13 @@ yy_stream_get ()
 
   result = EOF;
   if (bash_input.location.file)
-    result = getc_with_restart (bash_input.location.file);
-
+    {
+      if (interactive)
+       interrupt_immediately++;
+      result = getc_with_restart (bash_input.location.file);
+      if (interactive)
+       interrupt_immediately--;
+    }
   return (result);
 }
 
@@ -1653,11 +1664,11 @@ read_a_line (remove_quoted_newline)
   pass_next = 0;
   while (1)
     {
-      c = yy_getc ();
-
       /* Allow immediate exit if interrupted during input. */
       QUIT;
 
+      c = yy_getc ();
+
       /* Ignore null bytes in input. */
       if (c == 0)
        {
@@ -1862,6 +1873,12 @@ shell_getc (remove_quoted_newline)
 
   QUIT;
 
+  if (sigwinch_received)
+    {
+      sigwinch_received = 0;
+      get_new_window_size (0, (int *)0, (int *)0);
+    }
+      
   if (eol_ungetc_lookahead)
     {
       c = eol_ungetc_lookahead;
@@ -2055,14 +2072,6 @@ shell_getc (remove_quoted_newline)
   if (uc)
     shell_input_line_index++;
 
-  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
-    {
-       if (SHOULD_PROMPT ())
-         prompt_again ();
-       line_number++;
-       goto restart_read;
-    }
-
 #if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
   /* If UC is NULL, we have reached the end of the current input string.  If
      pushed_string_list is non-empty, it's time to pop to the previous string
@@ -2078,6 +2087,14 @@ shell_getc (remove_quoted_newline)
     }
 #endif /* ALIAS || DPAREN_ARITHMETIC */
 
+  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
+    {
+       if (SHOULD_PROMPT ())
+         prompt_again ();
+       line_number++;
+       goto restart_read;
+    }
+
   if (!uc && shell_input_line_terminator == EOF)
     return ((shell_input_line_index != 0) ? '\n' : EOF);
 
@@ -2139,7 +2156,7 @@ execute_prompt_command (command)
   parse_and_execute (savestring (command), "PROMPT_COMMAND", SEVAL_NONINT|SEVAL_NOHIST);
 
   restore_parser_state (&ps);
-  bind_variable ("_", last_lastarg);
+  bind_variable ("_", last_lastarg, 0);
   FREE (last_lastarg);
 
   if (token_to_read == '\n')   /* reset_parser was called */
@@ -2567,6 +2584,8 @@ read_token (command)
       parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
 
+      parser_state &= ~PST_ASSIGNOK;
+
       return (character);
     }
 
@@ -2580,6 +2599,8 @@ read_token (command)
        parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
 
+      parser_state &= ~PST_ASSIGNOK;
+
       peek_char = shell_getc (1);
       if (character == peek_char)
        {
@@ -2607,6 +2628,7 @@ read_token (command)
 #if defined (ALIAS)
              parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
+
              return (SEMI_SEMI);
 
            case '&':
@@ -2687,13 +2709,13 @@ read_token (command)
 /*
  * Match a $(...) or other grouping construct.  This has to handle embedded
  * quoted strings ('', ``, "") and nested constructs.  It also must handle
- * reprompting the user, if necessary, after reading a newline (unless the
- * P_NONL flag is passed), and returning correct error values if it reads
- * EOF.
+ * reprompting the user, if necessary, after reading a newline, and returning
+ * correct error values if it reads EOF.
  */
 #define P_FIRSTCLOSE   0x01
 #define P_ALLOWESC     0x02
 #define P_DQUOTE       0x04
+#define P_COMMAND      0x08    /* parsing a command, so look for comments */
 
 static char matched_pair_error;
 static char *
@@ -2702,13 +2724,14 @@ parse_matched_pair (qc, open, close, lenp, flags)
      int open, close;
      int *lenp, flags;
 {
-  int count, ch, was_dollar;
+  int count, ch, was_dollar, in_comment, check_comment;
   int pass_next_character, nestlen, ttranslen, start_lineno;
   char *ret, *nestret, *ttrans;
   int retind, retsize, rflags;
 
   count = 1;
-  pass_next_character = was_dollar = 0;
+  pass_next_character = was_dollar = in_comment = 0;
+  check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
 
   /* RFLAGS is the set of flags we want to pass to recursive calls. */
   rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
@@ -2719,7 +2742,11 @@ parse_matched_pair (qc, open, close, lenp, flags)
   start_lineno = line_number;
   while (count)
     {
+#if 0
       ch = shell_getc ((qc != '\'' || (flags & P_ALLOWESC)) && pass_next_character == 0);
+#else
+      ch = shell_getc (qc != '\'' && pass_next_character == 0);
+#endif
       if (ch == EOF)
        {
          free (ret);
@@ -2732,6 +2759,21 @@ parse_matched_pair (qc, open, close, lenp, flags)
       if (ch == '\n' && SHOULD_PROMPT ())
        prompt_again ();
 
+      if (in_comment)
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+
+         if (ch == '\n')
+           in_comment = 0;
+
+         continue;
+       }
+      /* Not exactly right yet */
+      else if (check_comment && in_comment == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || whitespace (ret[retind -1])))
+       in_comment = 1;
+
       if (pass_next_character)         /* last char was backslash */
        {
          pass_next_character = 0;
@@ -2799,9 +2841,18 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  /* Translate $'...' here. */
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  xfree (nestret);
-                 nestret = sh_single_quote (ttrans);
-                 free (ttrans);
-                 nestlen = strlen (nestret);
+
+                 if ((rflags & P_DQUOTE) == 0)
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else
+                   {
+                     nestret = ttrans;
+                     nestlen = ttranslen;
+                   }
                  retind -= 2;          /* back up before the $' */
                }
              else if MBTEST(was_dollar && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
@@ -2809,13 +2860,10 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  /* Locale expand $"..." here. */
                  ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
                  xfree (nestret);
-                 nestret = (char *)xmalloc (ttranslen + 3);
-                 nestret[0] = '"';
-                 strcpy (nestret + 1, ttrans);
-                 nestret[ttranslen + 1] = '"';
-                 nestret[ttranslen += 2] = '\0';
+
+                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
-                 nestlen = ttranslen;
+                 nestlen = ttranslen + 2;
                  retind -= 2;          /* back up before the $" */
                }
 
@@ -2834,6 +2882,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
       else if MBTEST(open == '"' && ch == '`')
        {
          nestret = parse_matched_pair (0, '`', '`', &nestlen, rflags);
+add_nestret:
          if (nestret == &matched_pair_error)
            {
              free (ret);
@@ -2847,6 +2896,11 @@ parse_matched_pair (qc, open, close, lenp, flags)
            }
          FREE (nestret);
        }
+      else if MBTEST(qc == '`' && (ch == '"' || ch == '\'') && in_comment == 0)
+       {
+         nestret = parse_matched_pair (0, ch, ch, &nestlen, rflags);
+         goto add_nestret;
+       }
       else if MBTEST(was_dollar && (ch == '(' || ch == '{' || ch == '['))      /* ) } ] */
        /* check for $(), $[], or ${} inside quoted string. */
        {
@@ -2858,18 +2912,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
            nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
          else if (ch == '[')           /* ] */
            nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
-         if (nestret == &matched_pair_error)
-           {
-             free (ret);
-             return &matched_pair_error;
-           }
-         if (nestlen)
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, nestlen, retsize, 64);
-             strcpy (ret + retind, nestret);
-             retind += nestlen;
-           }
-         FREE (nestret);
+
+         goto add_nestret;
        }
       was_dollar = MBTEST(ch == '$');
     }
@@ -2900,9 +2944,10 @@ parse_dparen (c)
       cmdtyp = parse_arith_cmd (&wval, 0);
       if (cmdtyp == 1)
        {
+         wd = alloc_word_desc ();
+         wd->word = wval;
          wd = make_word (wval);
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         free (wval);
          return (ARITH_FOR_EXPRS);
        }
       else
@@ -2914,21 +2959,14 @@ parse_dparen (c)
   if (reserved_word_acceptable (last_read_token))
     {
       sline = line_number;
-#if 0
-      cmdtyp = parse_arith_cmd (&wval, 1);
-#else
+
       cmdtyp = parse_arith_cmd (&wval, 0);
-#endif
       if (cmdtyp == 1) /* arithmetic command */
        {
-         wd = make_word (wval);
-#if 0
-         wd->flags = W_QUOTED;
-#else
-         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB;
-#endif
+         wd = alloc_word_desc ();
+         wd->word = wval;
+         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         free (wval);  /* make_word copies it */
          return (ARITH_CMD);
        }
       else if (cmdtyp == 0)    /* nested subshell */
@@ -3246,6 +3284,7 @@ token_is_assignment (t, i)
   return r;
 }
 
+/* XXX - possible changes here for `+=' */
 static int
 token_is_ident (t, i)
      char *t;
@@ -3278,6 +3317,10 @@ read_token_word (character)
   /* DOLLAR_PRESENT becomes non-zero if we see a `$'. */
   int dollar_present;
 
+  /* COMPOUND_ASSIGNMENT becomes non-zero if we are parsing a compound
+     assignment. */
+  int compound_assignment;
+
   /* QUOTED becomes non-zero if we see one of ("), ('), (`), or (\). */
   int quoted;
 
@@ -3297,7 +3340,7 @@ read_token_word (character)
 
   token_index = 0;
   all_digit_token = DIGIT (character);
-  dollar_present = quoted = pass_next_character = 0;
+  dollar_present = quoted = pass_next_character = compound_assignment = 0;
 
   for (;;)
     {
@@ -3343,7 +3386,7 @@ read_token_word (character)
       if MBTEST(shellquote (character))
        {
          push_delimiter (dstack, character);
-         ttok = parse_matched_pair (character, character, character, &ttoklen, 0);
+         ttok = parse_matched_pair (character, character, character, &ttoklen, (character == '`') ? P_COMMAND : 0);
          pop_delimiter (dstack);
          if (ttok == &matched_pair_error)
            return -1;          /* Bail immediately. */
@@ -3406,7 +3449,7 @@ read_token_word (character)
                     history literally rather than causing a possibly-
                     incorrect `;' to be added. ) */
                  push_delimiter (dstack, peek_char);
-                 ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
+                 ttok = parse_matched_pair (cd, '(', ')', &ttoklen, P_COMMAND);
                  pop_delimiter (dstack);
                }
              else
@@ -3442,27 +3485,25 @@ read_token_word (character)
                {
                  ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
                  free (ttok);
+
                  /* Insert the single quotes and correctly quote any
                     embedded single quotes (allowed because P_ALLOWESC was
                     passed to parse_matched_pair). */
                  ttok = sh_single_quote (ttrans);
                  free (ttrans);
+                 ttranslen = strlen (ttok);
                  ttrans = ttok;
-                 ttranslen = strlen (ttrans);
                }
              else
                {
-                 /* Try to locale-expand the converted string. */
+                 /* Try to locale)-expand the converted string. */
                  ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
                  free (ttok);
 
                  /* Add the double quotes back */
-                 ttok = (char *)xmalloc (ttranslen + 3);
-                 ttok[0] = '"';
-                 strcpy (ttok + 1, ttrans);
-                 ttok[ttranslen + 1] = '"';
-                 ttok[ttranslen += 2] = '\0';
+                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
+                 ttranslen += 2;
                  ttrans = ttok;
                }
 
@@ -3515,7 +3556,7 @@ read_token_word (character)
          goto next_character;
         }
       /* Identify possible compound array variable assignment. */
-      else if MBTEST(character == '=' && token_index > 0 && token_is_assignment (token, token_index))
+      else if MBTEST(character == '=' && token_index > 0 && (assignment_acceptable (last_read_token) || (parser_state & PST_ASSIGNOK)) && token_is_assignment (token, token_index))
        {
          peek_char = shell_getc (1);
          if MBTEST(peek_char == '(')           /* ) */
@@ -3536,7 +3577,12 @@ read_token_word (character)
              token[token_index++] = ')';
              FREE (ttok);
              all_digit_token = 0;
+             compound_assignment = 1;
+#if 0
              goto next_character;
+#else
+             goto got_token;           /* ksh93 seems to do this */
+#endif
            }
          else
            shell_ungetc (peek_char);
@@ -3631,6 +3677,8 @@ got_token:
     the_word->flags |= W_HASDOLLAR;
   if (quoted)
     the_word->flags |= W_QUOTED;
+  if (compound_assignment)
+    the_word->flags |= W_COMPASSIGN;
   /* A word is an assignment if it appears at the beginning of a
      simple command, or after another assignment word.  This is
      context-dependent, so it cannot be handled in the grammar. */
@@ -3642,6 +3690,14 @@ got_token:
        the_word->flags |= W_NOSPLIT;
     }
 
+  if (command_token_position (last_read_token))
+    {
+      struct builtin *b;
+      b = builtin_address_internal (token, 0);
+      if (b && (b->flags & ASSIGNMENT_BUILTIN))
+        parser_state |= PST_ASSIGNOK;
+    }
+
   yylval.word = the_word;
 
   result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT))
@@ -3799,6 +3855,8 @@ history_delimiting_chars ()
        return " ";
       return ";";
     }
+  else if (two_tokens_ago == CASE && token_before_that == WORD && (parser_state & PST_CASESTMT))
+    return " ";
 
   for (i = 0; no_semi_successors[i]; i++)
     {
@@ -4103,7 +4161,7 @@ decode_prompt_string (string)
 #define ROOT_PATH(x)   ((x)[0] == '/' && (x)[1] == 0)
 #define DOUBLE_SLASH_ROOT(x)   ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
                /* Abbreviate \W as ~ if $PWD == $HOME */
-               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, temp) == 0))
+               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
                  {
                    if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
                      {
@@ -4582,7 +4640,7 @@ parse_string_to_word_list (s, flags, whom)
          line_number = orig_line_number + line_number - 1;
          orig_current_token = current_token;
          current_token = tok;
-         yyerror ((char *)NULL);       /* does the right thing */
+         yyerror (NULL);       /* does the right thing */
          current_token = orig_current_token;
          if (wl)
            dispose_words (wl);
@@ -4657,7 +4715,7 @@ parse_compound_assignment (retlenp)
          if (tok == yacc_EOF)  /* ( */
            parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'"));
          else
-           yyerror ((char *)NULL);     /* does the right thing */
+           yyerror(NULL);      /* does the right thing */
          if (wl)
            dispose_words (wl);
          wl = &parse_string_error;
@@ -4712,7 +4770,7 @@ save_parser_state (ps)
 #endif
 
   if (ps == 0)
-    ps = xmalloc (sizeof (sh_parser_state_t));
+    ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t));
   if (ps == 0)
     return ((sh_parser_state_t *)NULL);
 
index 3527227..e69de29 100644 (file)
@@ -1,52 +0,0 @@
-typedef union {
-  WORD_DESC *word;             /* the word that we read. */
-  int number;                  /* the number that we read. */
-  WORD_LIST *word_list;
-  COMMAND *command;
-  REDIRECT *redirect;
-  ELEMENT element;
-  PATTERN_LIST *pattern;
-} YYSTYPE;
-#define        IF      257
-#define        THEN    258
-#define        ELSE    259
-#define        ELIF    260
-#define        FI      261
-#define        CASE    262
-#define        ESAC    263
-#define        FOR     264
-#define        SELECT  265
-#define        WHILE   266
-#define        UNTIL   267
-#define        DO      268
-#define        DONE    269
-#define        FUNCTION        270
-#define        COND_START      271
-#define        COND_END        272
-#define        COND_ERROR      273
-#define        IN      274
-#define        BANG    275
-#define        TIME    276
-#define        TIMEOPT 277
-#define        WORD    278
-#define        ASSIGNMENT_WORD 279
-#define        NUMBER  280
-#define        ARITH_CMD       281
-#define        ARITH_FOR_EXPRS 282
-#define        COND_CMD        283
-#define        AND_AND 284
-#define        OR_OR   285
-#define        GREATER_GREATER 286
-#define        LESS_LESS       287
-#define        LESS_AND        288
-#define        LESS_LESS_LESS  289
-#define        GREATER_AND     290
-#define        SEMI_SEMI       291
-#define        LESS_LESS_MINUS 292
-#define        AND_GREATER     293
-#define        LESS_GREATER    294
-#define        GREATER_BAR     295
-#define        yacc_EOF        296
-
-
-extern YYSTYPE yylval;
index 728aaf7..b11fc16 100644 (file)
@@ -1,6 +1,6 @@
 /* patchlevel.h -- current bash patch level */
 
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 16
+#define PATCHLEVEL 0
 
 #endif /* _PATCHLEVEL_H_ */
index 6c41eba..5f1731a 100644 (file)
--- a/pathexp.h
+++ b/pathexp.h
@@ -1,6 +1,6 @@
 /* pathexp.h -- The shell interface to the globbing library. */
 
-/* Copyright (C) 1987,1989 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -41,8 +41,11 @@ extern char *glob_error_return;
 #  define FNMATCH_EXTFLAG      0
 #endif /* !EXTENDED_GLOB */
 
+#define FNMATCH_IGNCASE                (match_ignore_case ? FNM_CASEFOLD : 0)
+
 extern int glob_dot_filenames;
 extern int extended_glob;
+extern int match_ignore_case;  /* doesn't really belong here */
 
 extern int unquoted_glob_pattern_p __P((char *));
 
index 2462bd6..ee462dc 100644 (file)
@@ -1,7 +1,7 @@
 /* pcomplete.c - functions to generate lists of matches for programmable
                 completion. */
 
-/* Copyright (C) 1999-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -513,20 +513,22 @@ it_init_joblist (itp, jstate)
   register int i;
   register PROCESS *p;
   char *s, *t;
-  JOB_STATE js;
+  JOB *j;
+  JOB_STATE ws;                /* wanted state */
 
   if (jstate == 0)
-    js = JRUNNING;
+    ws = JRUNNING;
   else if (jstate == 1)
-    js = JSTOPPED;
+    ws = JSTOPPED;
 
-  sl = strlist_create (job_slots);
-  for (i = job_slots - 1; i >= 0; i--)
+  sl = strlist_create (js.j_jobslots);
+  for (i = js.j_jobslots - 1; i >= 0; i--)
     {
-      if (jobs[i] == 0)
+      j = get_job_by_jid (i);
+      if (j == 0)
        continue;
-      p = jobs[i]->pipe;
-      if (jstate == -1 || JOBSTATE(i) == js)
+      p = j->pipe;
+      if (jstate == -1 || JOBSTATE(i) == ws)
        {
          s = savestring (p->command);
          t = strpbrk (s, " \t\n");
@@ -843,6 +845,7 @@ gen_wordlist_matches (cs, text)
     }
   sl->list[sl->list_len = nw] = (char *)NULL;
 
+  dispose_words (l2);
   FREE (ntxt);
   return sl;
 }
@@ -862,7 +865,7 @@ bind_comp_words (lwords)
     VUNSETATTR (v, att_readonly);
   if (array_p (v) == 0)
     v = convert_var_to_array (v);
-  v = assign_array_var_from_word_list (v, lwords);
+  v = assign_array_var_from_word_list (v, lwords, 0);
 
   VUNSETATTR (v, att_invisible);
   return v;
@@ -882,7 +885,7 @@ bind_compfunc_variables (line, ind, lwords, cw, exported)
 
   /* Set the variables that the function expects while it executes.  Maybe
      these should be in the function environment (temporary_env). */
-  v = bind_variable ("COMP_LINE", line);
+  v = bind_variable ("COMP_LINE", line, 0);
   if (v && exported)
     VSETATTR(v, att_exported);
 
@@ -987,6 +990,7 @@ gen_shell_function_matches (cs, text, line, ind, lwords, nw, cw)
   SHELL_VAR *f, *v;
   WORD_LIST *cmdlist;
   int fval;
+  sh_parser_state_t ps;
 #if defined (ARRAY_VARS)
   ARRAY *a;
 #endif
@@ -1010,8 +1014,10 @@ gen_shell_function_matches (cs, text, line, ind, lwords, nw, cw)
   bind_compfunc_variables (line, ind, lwords, cw - 1, 0);
 
   cmdlist = build_arg_list (funcname, text, lwords, cw);
-  
+
+  save_parser_state (&ps);  
   fval = execute_shell_function (f, cmdlist);  
+  restore_parser_state (&ps);
 
   /* Now clean up and destroy everything. */
   dispose_words (cmdlist);
index c28f1ce..a290415 100644 (file)
@@ -104,8 +104,7 @@ $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
        $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
          --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
          --files-from=$(srcdir)/POTFILES.in \
-         --copyright-holder='$(COPYRIGHT_HOLDER)' \
-         --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)'
+         --copyright-holder='$(COPYRIGHT_HOLDER)'
        $(MAKE) $(MFLAGS) builtins.pot-update
        test ! -f $(DOMAIN).po || { \
          if test -f $(srcdir)/$(DOMAIN).pot; then \
index 3340d22..c96e866 100644 (file)
@@ -3,30 +3,11 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
-#: builtins/caller.def:128 builtins/caller.def:132 builtins/pushd.def:655
-#: builtins/pushd.def:663 builtins/pushd.def:666 builtins/pushd.def:676
-#: builtins/pushd.def:680 builtins/pushd.def:684 builtins/pushd.def:687
-#: builtins/pushd.def:690 builtins/pushd.def:699 builtins/pushd.def:703
-#: builtins/pushd.def:707 builtins/pushd.def:710 builtins.c:321 builtins.c:325
-#: builtins.c:390 builtins.c:392 builtins.c:401 builtins.c:404 builtins.c:408
-#: builtins.c:445 builtins.c:487 builtins.c:491 builtins.c:498 builtins.c:509
-#: builtins.c:513 builtins.c:552 builtins.c:555 builtins.c:559 builtins.c:562
-#: builtins.c:630 builtins.c:637 builtins.c:692 builtins.c:713 builtins.c:718
-#: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921
-#: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952
-#: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973
-#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028
-#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062
-#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309
-#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331
-#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354
-#: builtins.c:1362 builtins.c:1365
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: bug-bash@gnu.org\n"
-"POT-Creation-Date: 2003-12-22 15:34-0500\n"
+"POT-Creation-Date: 2005-10-03 17:31-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -34,44 +15,39 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: arrayfunc.c:45
+#: arrayfunc.c:48
 msgid "bad array subscript"
 msgstr ""
 
-#: arrayfunc.c:306
+#: arrayfunc.c:360
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr ""
 
-#: bashhist.c:321
+#: bashhist.c:328
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr ""
 
-#: bashline.c:2791
+#: bashline.c:2947
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 
-#: bashline.c:2840
+#: bashline.c:2996
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr ""
 
-#: bashline.c:2869
+#: bashline.c:3025
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr ""
 
-#: bashline.c:2903
+#: bashline.c:3059
 #, c-format
 msgid "%s: missing colon separator"
 msgstr ""
 
-#: builtins/alias.def:123
-#, c-format
-msgid "`%s': invalid alias name"
-msgstr ""
-
 #: builtins/bind.def:194
 #, c-format
 msgid "`%s': invalid keymap name"
@@ -106,48 +82,51 @@ msgstr ""
 msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr ""
 
-#: builtins/caller.def:127 builtins.c:320
+#: builtins/caller.def:132
 msgid "Returns the context of the current subroutine call."
 msgstr ""
 
-#: builtins/caller.def:129 builtins.c:322
+#: builtins/caller.def:133 builtins/caller.def:137 builtins/pushd.def:660
+#: builtins/pushd.def:668 builtins/pushd.def:671 builtins/pushd.def:681
+#: builtins/pushd.def:685 builtins/pushd.def:689 builtins/pushd.def:692
+#: builtins/pushd.def:695 builtins/pushd.def:704 builtins/pushd.def:708
+#: builtins/pushd.def:712 builtins/pushd.def:715
+msgid " "
+msgstr ""
+
+#: builtins/caller.def:134
 msgid "Without EXPR, returns returns \"$line $filename\".  With EXPR,"
 msgstr ""
 
-#: builtins/caller.def:130 builtins.c:323
+#: builtins/caller.def:135
 msgid "returns \"$line $subroutine $filename\"; this extra information"
 msgstr ""
 
-#: builtins/caller.def:131 builtins.c:324
+#: builtins/caller.def:136
 msgid "can be used used to provide a stack trace."
 msgstr ""
 
-#: builtins/caller.def:133 builtins.c:326
+#: builtins/caller.def:138
 msgid "The value of EXPR indicates how many call frames to go back before the"
 msgstr ""
 
-#: builtins/caller.def:134 builtins.c:327
+#: builtins/caller.def:139
 msgid "current one; the top frame is frame 0."
 msgstr ""
 
-#: builtins/cd.def:188
+#: builtins/cd.def:203
 msgid "HOME not set"
 msgstr ""
 
-#: builtins/cd.def:200
+#: builtins/cd.def:215
 msgid "OLDPWD not set"
 msgstr ""
 
-#: builtins/cd.def:357
-#, c-format
-msgid "write error: %s"
-msgstr ""
-
 #: builtins/common.c:133 test.c:921
 msgid "too many arguments"
 msgstr ""
 
-#: builtins/common.c:157 shell.c:465 shell.c:737
+#: builtins/common.c:157 shell.c:474 shell.c:747
 #, c-format
 msgid "%s: option requires an argument"
 msgstr ""
@@ -162,7 +141,7 @@ msgstr ""
 msgid "%s: not found"
 msgstr ""
 
-#: builtins/common.c:180 shell.c:750
+#: builtins/common.c:180 shell.c:760
 #, c-format
 msgid "%s: invalid option"
 msgstr ""
@@ -172,7 +151,7 @@ msgstr ""
 msgid "%s: invalid option name"
 msgstr ""
 
-#: builtins/common.c:194 general.c:229 general.c:234
+#: builtins/common.c:194 general.c:231 general.c:236
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr ""
@@ -239,12 +218,17 @@ msgstr ""
 msgid "%s: not a shell builtin"
 msgstr ""
 
-#: builtins/common.c:486
+#: builtins/common.c:276
+#, c-format
+msgid "write error: %s"
+msgstr ""
+
+#: builtins/common.c:484
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr ""
 
-#: builtins/common.c:553 builtins/common.c:555
+#: builtins/common.c:550 builtins/common.c:552
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr ""
@@ -271,16 +255,16 @@ msgstr ""
 msgid "can only be used in a function"
 msgstr ""
 
-#: builtins/declare.def:295
+#: builtins/declare.def:301
 msgid "cannot use `-f' to make functions"
 msgstr ""
 
-#: builtins/declare.def:307 execute_cmd.c:3949
+#: builtins/declare.def:313 execute_cmd.c:3986
 #, c-format
 msgid "%s: readonly function"
 msgstr ""
 
-#: builtins/declare.def:389
+#: builtins/declare.def:401
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr ""
@@ -309,17 +293,17 @@ msgstr ""
 msgid "%s: cannot delete: %s"
 msgstr ""
 
-#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395
+#: builtins/evalfile.c:129 execute_cmd.c:3852 shell.c:1408
 #, c-format
 msgid "%s: is a directory"
 msgstr ""
 
-#: builtins/evalfile.c:133
+#: builtins/evalfile.c:134
 #, c-format
 msgid "%s: not a regular file"
 msgstr ""
 
-#: builtins/evalfile.c:141
+#: builtins/evalfile.c:142
 #, c-format
 msgid "%s: file is too large"
 msgstr ""
@@ -337,20 +321,20 @@ msgstr ""
 msgid "There are stopped jobs.\n"
 msgstr ""
 
-#: builtins/fc.def:252
+#: builtins/fc.def:259
 msgid "no command found"
 msgstr ""
 
-#: builtins/fc.def:317
+#: builtins/fc.def:329
 msgid "history specification"
 msgstr ""
 
-#: builtins/fc.def:338
+#: builtins/fc.def:350
 #, c-format
 msgid "%s: cannot open temp file: %s"
 msgstr ""
 
-#: builtins/fg_bg.def:133
+#: builtins/fg_bg.def:149
 #, c-format
 msgid "job %d started without job control"
 msgstr ""
@@ -404,15 +388,15 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtins/history.def:148
+#: builtins/history.def:150
 msgid "cannot use more than one of -anrw"
 msgstr ""
 
-#: builtins/history.def:180
+#: builtins/history.def:182
 msgid "history position"
 msgstr ""
 
-#: builtins/history.def:390
+#: builtins/history.def:400
 #, c-format
 msgid "%s: history expansion failed"
 msgstr ""
@@ -426,202 +410,201 @@ msgstr ""
 msgid "%s: arguments must be process or job IDs"
 msgstr ""
 
-#: builtins/kill.def:248
+#: builtins/kill.def:250
 msgid "Unknown error"
 msgstr ""
 
-#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511
+#: builtins/let.def:94 builtins/let.def:119 expr.c:497 expr.c:512
 msgid "expression expected"
 msgstr ""
 
-#: builtins/printf.def:249
+#: builtins/printf.def:327
 #, c-format
 msgid "`%s': missing format character"
 msgstr ""
 
-#: builtins/printf.def:408
+#: builtins/printf.def:502
 #, c-format
 msgid "`%c': invalid format character"
 msgstr ""
 
-#: builtins/printf.def:601
+#: builtins/printf.def:708
 msgid "missing hex digit for \\x"
 msgstr ""
 
-#: builtins/pushd.def:168
+#: builtins/pushd.def:173
 msgid "no other directory"
 msgstr ""
 
-#: builtins/pushd.def:435
+#: builtins/pushd.def:440
 msgid "<no current directory>"
 msgstr ""
 
-#: builtins/pushd.def:652 builtins.c:1351
+#: builtins/pushd.def:657
 msgid "Display the list of currently remembered directories.  Directories"
 msgstr ""
 
-#: builtins/pushd.def:653 builtins.c:1352
+#: builtins/pushd.def:658
 msgid "find their way onto the list with the `pushd' command; you can get"
 msgstr ""
 
-#: builtins/pushd.def:654 builtins.c:1353
+#: builtins/pushd.def:659
 msgid "back up through the list with the `popd' command."
 msgstr ""
 
-#: builtins/pushd.def:656 builtins.c:1355
+#: builtins/pushd.def:661
 msgid "The -l flag specifies that `dirs' should not print shorthand versions"
 msgstr ""
 
-#: builtins/pushd.def:657 builtins.c:1356
+#: builtins/pushd.def:662
 msgid "of directories which are relative to your home directory.  This means"
 msgstr ""
 
-#: builtins/pushd.def:658 builtins.c:1357
+#: builtins/pushd.def:663
 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
 msgstr ""
 
-#: builtins/pushd.def:659 builtins.c:1358
+#: builtins/pushd.def:664
 msgid "causes `dirs' to print the directory stack with one entry per line,"
 msgstr ""
 
-#: builtins/pushd.def:660 builtins.c:1359
+#: builtins/pushd.def:665
 msgid "prepending the directory name with its position in the stack.  The -p"
 msgstr ""
 
-#: builtins/pushd.def:661 builtins.c:1360
+#: builtins/pushd.def:666
 msgid "flag does the same thing, but the stack position is not prepended."
 msgstr ""
 
-#: builtins/pushd.def:662 builtins.c:1361
+#: builtins/pushd.def:667
 msgid "The -c flag clears the directory stack by deleting all of the elements."
 msgstr ""
 
-#: builtins/pushd.def:664
+#: builtins/pushd.def:669
 msgid "+N   displays the Nth entry counting from the left of the list shown by"
 msgstr ""
 
-#: builtins/pushd.def:665 builtins/pushd.def:668
+#: builtins/pushd.def:670 builtins/pushd.def:673
 msgid "     dirs when invoked without options, starting with zero."
 msgstr ""
 
-#: builtins/pushd.def:667
+#: builtins/pushd.def:672
 msgid ""
 "-N   displays the Nth entry counting from the right of the list shown by"
 msgstr ""
 
-#: builtins/pushd.def:673 builtins.c:1302
+#: builtins/pushd.def:678
 msgid "Adds a directory to the top of the directory stack, or rotates"
 msgstr ""
 
-#: builtins/pushd.def:674 builtins.c:1303
+#: builtins/pushd.def:679
 msgid "the stack, making the new top of the stack the current working"
 msgstr ""
 
-#: builtins/pushd.def:675 builtins.c:1304
+#: builtins/pushd.def:680
 msgid "directory.  With no arguments, exchanges the top two directories."
 msgstr ""
 
-#: builtins/pushd.def:677
+#: builtins/pushd.def:682
 msgid "+N   Rotates the stack so that the Nth directory (counting"
 msgstr ""
 
-#: builtins/pushd.def:678
+#: builtins/pushd.def:683
 msgid "     from the left of the list shown by `dirs', starting with"
 msgstr ""
 
-#: builtins/pushd.def:679 builtins/pushd.def:683
+#: builtins/pushd.def:684 builtins/pushd.def:688
 msgid "     zero) is at the top."
 msgstr ""
 
-#: builtins/pushd.def:681
+#: builtins/pushd.def:686
 msgid "-N   Rotates the stack so that the Nth directory (counting"
 msgstr ""
 
-#: builtins/pushd.def:682
+#: builtins/pushd.def:687
 msgid "     from the right of the list shown by `dirs', starting with"
 msgstr ""
 
-#: builtins/pushd.def:685
+#: builtins/pushd.def:690
 msgid "-n   suppress the normal change of directory when adding directories"
 msgstr ""
 
-#: builtins/pushd.def:686
+#: builtins/pushd.def:691
 msgid "     to the stack, so only the stack is manipulated."
 msgstr ""
 
-#: builtins/pushd.def:688
+#: builtins/pushd.def:693
 msgid "dir  adds DIR to the directory stack at the top, making it the"
 msgstr ""
 
-#: builtins/pushd.def:689
+#: builtins/pushd.def:694
 msgid "     new current working directory."
 msgstr ""
 
-#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320
-#: builtins.c:1343
+#: builtins/pushd.def:696 builtins/pushd.def:716
 msgid "You can see the directory stack with the `dirs' command."
 msgstr ""
 
-#: builtins/pushd.def:696 builtins.c:1328
+#: builtins/pushd.def:701
 msgid "Removes entries from the directory stack.  With no arguments,"
 msgstr ""
 
-#: builtins/pushd.def:697 builtins.c:1329
+#: builtins/pushd.def:702
 msgid "removes the top directory from the stack, and cd's to the new"
 msgstr ""
 
-#: builtins/pushd.def:698 builtins.c:1330
+#: builtins/pushd.def:703
 msgid "top directory."
 msgstr ""
 
-#: builtins/pushd.def:700
+#: builtins/pushd.def:705
 msgid "+N   removes the Nth entry counting from the left of the list"
 msgstr ""
 
-#: builtins/pushd.def:701
+#: builtins/pushd.def:706
 msgid "     shown by `dirs', starting with zero.  For example: `popd +0'"
 msgstr ""
 
-#: builtins/pushd.def:702
+#: builtins/pushd.def:707
 msgid "     removes the first directory, `popd +1' the second."
 msgstr ""
 
-#: builtins/pushd.def:704
+#: builtins/pushd.def:709
 msgid "-N   removes the Nth entry counting from the right of the list"
 msgstr ""
 
-#: builtins/pushd.def:705
+#: builtins/pushd.def:710
 msgid "     shown by `dirs', starting with zero.  For example: `popd -0'"
 msgstr ""
 
-#: builtins/pushd.def:706
+#: builtins/pushd.def:711
 msgid "     removes the last directory, `popd -1' the next to last."
 msgstr ""
 
-#: builtins/pushd.def:708
+#: builtins/pushd.def:713
 msgid "-n   suppress the normal change of directory when removing directories"
 msgstr ""
 
-#: builtins/pushd.def:709
+#: builtins/pushd.def:714
 msgid "     from the stack, so only the stack is manipulated."
 msgstr ""
 
-#: builtins/read.def:207
+#: builtins/read.def:211
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr ""
 
-#: builtins/read.def:230
+#: builtins/read.def:234
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr ""
 
-#: builtins/read.def:237
+#: builtins/read.def:241
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr ""
 
-#: builtins/read.def:463
+#: builtins/read.def:474
 #, c-format
 msgid "read error: %d: %s"
 msgstr ""
@@ -630,26 +613,26 @@ msgstr ""
 msgid "can only `return' from a function or sourced script"
 msgstr ""
 
-#: builtins/set.def:743
+#: builtins/set.def:745
 msgid "cannot simultaneously unset a function and a variable"
 msgstr ""
 
-#: builtins/set.def:780
+#: builtins/set.def:782
 #, c-format
 msgid "%s: cannot unset"
 msgstr ""
 
-#: builtins/set.def:787
+#: builtins/set.def:789
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr ""
 
-#: builtins/set.def:798
+#: builtins/set.def:800
 #, c-format
 msgid "%s: not an array variable"
 msgstr ""
 
-#: builtins/setattr.def:165
+#: builtins/setattr.def:166
 #, c-format
 msgid "%s: not a function"
 msgstr ""
@@ -658,11 +641,11 @@ msgstr ""
 msgid "shift count"
 msgstr ""
 
-#: builtins/shopt.def:226
+#: builtins/shopt.def:227
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 
-#: builtins/shopt.def:291
+#: builtins/shopt.def:292
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr ""
@@ -684,52 +667,52 @@ msgstr ""
 msgid "cannot suspend a login shell"
 msgstr ""
 
-#: builtins/type.def:231
+#: builtins/type.def:232
 #, c-format
 msgid "%s is aliased to `%s'\n"
 msgstr ""
 
-#: builtins/type.def:252
+#: builtins/type.def:253
 #, c-format
 msgid "%s is a shell keyword\n"
 msgstr ""
 
-#: builtins/type.def:272
+#: builtins/type.def:273
 #, c-format
 msgid "%s is a function\n"
 msgstr ""
 
-#: builtins/type.def:297
+#: builtins/type.def:298
 #, c-format
 msgid "%s is a shell builtin\n"
 msgstr ""
 
-#: builtins/type.def:318
+#: builtins/type.def:319
 #, c-format
 msgid "%s is %s\n"
 msgstr ""
 
-#: builtins/type.def:338
+#: builtins/type.def:339
 #, c-format
 msgid "%s is hashed (%s)\n"
 msgstr ""
 
-#: builtins/ulimit.def:332
+#: builtins/ulimit.def:344
 #, c-format
 msgid "%s: invalid limit argument"
 msgstr ""
 
-#: builtins/ulimit.def:358
+#: builtins/ulimit.def:370
 #, c-format
 msgid "`%c': bad command"
 msgstr ""
 
-#: builtins/ulimit.def:387
+#: builtins/ulimit.def:399
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr ""
 
-#: builtins/ulimit.def:425
+#: builtins/ulimit.def:437
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr ""
@@ -743,7 +726,7 @@ msgstr ""
 msgid "`%c': invalid symbolic mode operator"
 msgstr ""
 
-#: builtins/umask.def:279
+#: builtins/umask.def:281
 #, c-format
 msgid "`%c': invalid symbolic mode character"
 msgstr ""
@@ -783,11 +766,11 @@ msgstr ""
 msgid "%s: unbound variable"
 msgstr ""
 
-#: eval.c:175
+#: eval.c:176
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr ""
 
-#: execute_cmd.c:466
+#: execute_cmd.c:471
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr ""
@@ -797,88 +780,88 @@ msgstr ""
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr ""
 
-#: execute_cmd.c:3521
+#: execute_cmd.c:3551
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr ""
 
-#: execute_cmd.c:3609
+#: execute_cmd.c:3639
 #, c-format
 msgid "%s: command not found"
 msgstr ""
 
-#: execute_cmd.c:3839
+#: execute_cmd.c:3876
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr ""
 
-#: execute_cmd.c:3876
+#: execute_cmd.c:3913
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr ""
 
-#: execute_cmd.c:3988
+#: execute_cmd.c:4025
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr ""
 
-#: expr.c:239
+#: expr.c:240
 msgid "expression recursion level exceeded"
 msgstr ""
 
-#: expr.c:263
+#: expr.c:264
 msgid "recursion stack underflow"
 msgstr ""
 
-#: expr.c:374
+#: expr.c:375
 msgid "syntax error in expression"
 msgstr ""
 
-#: expr.c:414
+#: expr.c:415
 msgid "attempted assignment to non-variable"
 msgstr ""
 
-#: expr.c:435 expr.c:440 expr.c:750
+#: expr.c:436 expr.c:441 expr.c:751
 msgid "division by 0"
 msgstr ""
 
-#: expr.c:466
+#: expr.c:467
 msgid "bug: bad expassign token"
 msgstr ""
 
-#: expr.c:508
+#: expr.c:509
 msgid "`:' expected for conditional expression"
 msgstr ""
 
-#: expr.c:775
+#: expr.c:776
 msgid "exponent less than 0"
 msgstr ""
 
-#: expr.c:819
+#: expr.c:821
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 
-#: expr.c:847
+#: expr.c:849
 msgid "missing `)'"
 msgstr ""
 
-#: expr.c:871
+#: expr.c:892
 msgid "syntax error: operand expected"
 msgstr ""
 
-#: expr.c:1146
+#: expr.c:1178
 msgid "invalid number"
 msgstr ""
 
-#: expr.c:1150
+#: expr.c:1182
 msgid "invalid arithmetic base"
 msgstr ""
 
-#: expr.c:1170
+#: expr.c:1202
 msgid "value too great for base"
 msgstr ""
 
-#: general.c:60
+#: general.c:62
 msgid "getcwd: cannot access parent directories"
 msgstr ""
 
@@ -892,42 +875,42 @@ msgstr ""
 msgid "save_bash_input: buffer already exists for new fd %d"
 msgstr ""
 
-#: jobs.c:693
+#: jobs.c:923
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr ""
 
-#: jobs.c:1001
+#: jobs.c:1308
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr ""
 
-#: jobs.c:1632 nojobs.c:648
+#: jobs.c:1981 nojobs.c:648
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr ""
 
-#: jobs.c:1815
+#: jobs.c:2180
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr ""
 
-#: jobs.c:2062
+#: jobs.c:2435
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr ""
 
-#: jobs.c:2284
+#: jobs.c:2657
 #, c-format
 msgid "%s: job has terminated"
 msgstr ""
 
-#: jobs.c:2293
+#: jobs.c:2666
 #, c-format
 msgid "%s: job %d already in background"
 msgstr ""
 
-#: jobs.c:3037
+#: jobs.c:3452
 msgid "no job control in this shell"
 msgstr ""
 
@@ -1037,139 +1020,139 @@ msgstr ""
 msgid "network operations not supported"
 msgstr ""
 
-#: mailcheck.c:382
+#: mailcheck.c:386
 msgid "You have mail in $_"
 msgstr ""
 
-#: mailcheck.c:407
+#: mailcheck.c:411
 msgid "You have new mail in $_"
 msgstr ""
 
-#: mailcheck.c:423
+#: mailcheck.c:427
 #, c-format
 msgid "The mail in %s has been read\n"
 msgstr ""
 
-#: make_cmd.c:318
+#: make_cmd.c:322
 msgid "syntax error: arithmetic expression required"
 msgstr ""
 
-#: make_cmd.c:320
+#: make_cmd.c:324
 msgid "syntax error: `;' unexpected"
 msgstr ""
 
-#: make_cmd.c:321
+#: make_cmd.c:325
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr ""
 
-#: make_cmd.c:560
+#: make_cmd.c:566
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr ""
 
-#: make_cmd.c:730
+#: make_cmd.c:736
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:2726
+#: parse.y:2747
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr ""
 
-#: parse.y:3011
+#: parse.y:3043
 msgid "unexpected EOF while looking for `]]'"
 msgstr ""
 
-#: parse.y:3016
+#: parse.y:3048
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 
-#: parse.y:3020
+#: parse.y:3052
 msgid "syntax error in conditional expression"
 msgstr ""
 
-#: parse.y:3098
+#: parse.y:3130
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr ""
 
-#: parse.y:3102
+#: parse.y:3134
 msgid "expected `)'"
 msgstr ""
 
-#: parse.y:3130
+#: parse.y:3162
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr ""
 
-#: parse.y:3134
+#: parse.y:3166
 msgid "unexpected argument to conditional unary operator"
 msgstr ""
 
-#: parse.y:3171
+#: parse.y:3203
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 
-#: parse.y:3175
+#: parse.y:3207
 msgid "conditional binary operator expected"
 msgstr ""
 
-#: parse.y:3191
+#: parse.y:3223
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr ""
 
-#: parse.y:3195
+#: parse.y:3227
 msgid "unexpected argument to conditional binary operator"
 msgstr ""
 
-#: parse.y:3206
+#: parse.y:3238
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr ""
 
-#: parse.y:3209
+#: parse.y:3241
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr ""
 
-#: parse.y:3213
+#: parse.y:3245
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr ""
 
-#: parse.y:4400
+#: parse.y:4461
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr ""
 
-#: parse.y:4418
+#: parse.y:4479
 #, c-format
 msgid "syntax error near `%s'"
 msgstr ""
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error: unexpected end of file"
 msgstr ""
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error"
 msgstr ""
 
-#: parse.y:4490
+#: parse.y:4551
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr ""
 
-#: parse.y:4649
+#: parse.y:4710
 msgid "unexpected EOF while looking for matching `)'"
 msgstr ""
 
-#: pcomplete.c:988
+#: pcomplete.c:1001
 #, c-format
 msgid "completion: function `%s' not found"
 msgstr ""
@@ -1179,12 +1162,12 @@ msgstr ""
 msgid "progcomp_insert: %s: NULL COMPSPEC"
 msgstr ""
 
-#: print_cmd.c:260
+#: print_cmd.c:264
 #, c-format
 msgid "print_command: bad connector `%d'"
 msgstr ""
 
-#: print_cmd.c:1172
+#: print_cmd.c:1236
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr ""
@@ -1217,141 +1200,141 @@ msgstr ""
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr ""
 
-#: redir.c:949
+#: redir.c:956
 msgid "redirection error: cannot duplicate fd"
 msgstr ""
 
-#: shell.c:302
+#: shell.c:309
 msgid "could not find /tmp, please create!"
 msgstr ""
 
-#: shell.c:306
+#: shell.c:313
 msgid "/tmp must be a valid directory name"
 msgstr ""
 
-#: shell.c:839
+#: shell.c:849
 #, c-format
 msgid "%c%c: invalid option"
 msgstr ""
 
-#: shell.c:1590
+#: shell.c:1598
 msgid "I have no name!"
 msgstr ""
 
-#: shell.c:1725
+#: shell.c:1733
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
 
-#: shell.c:1727
+#: shell.c:1735
 msgid "GNU long options:\n"
 msgstr ""
 
-#: shell.c:1731
+#: shell.c:1739
 msgid "Shell options:\n"
 msgstr ""
 
-#: shell.c:1732
+#: shell.c:1740
 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 
-#: shell.c:1747
+#: shell.c:1755
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr ""
 
-#: shell.c:1753
+#: shell.c:1761
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 
-#: shell.c:1754
+#: shell.c:1762
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 
-#: shell.c:1755
+#: shell.c:1763
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
 
-#: sig.c:485
+#: sig.c:494
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr ""
 
-#: subst.c:1011
+#: subst.c:1123
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr ""
 
-#: subst.c:2020
+#: subst.c:2269
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr ""
 
-#: subst.c:3516 subst.c:3532
+#: subst.c:4208 subst.c:4224
 msgid "cannot make pipe for process substitution"
 msgstr ""
 
-#: subst.c:3563
+#: subst.c:4255
 msgid "cannot make child for process substitution"
 msgstr ""
 
-#: subst.c:3608
+#: subst.c:4300
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr ""
 
-#: subst.c:3610
+#: subst.c:4302
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr ""
 
-#: subst.c:3618
+#: subst.c:4310
 #, c-format
 msgid "cannout reset nodelay mode for fd %d"
 msgstr ""
 
-#: subst.c:3628
+#: subst.c:4320
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 
-#: subst.c:3803
+#: subst.c:4495
 msgid "cannot make pipe for command substitution"
 msgstr ""
 
-#: subst.c:3832
+#: subst.c:4531
 msgid "cannot make child for command substitution"
 msgstr ""
 
-#: subst.c:3849
+#: subst.c:4548
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 
-#: subst.c:4284
+#: subst.c:5013
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr ""
 
-#: subst.c:4529
+#: subst.c:5287
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr ""
 
-#: subst.c:5209
+#: subst.c:6058
 #, c-format
 msgid "%s: bad substitution"
 msgstr ""
 
-#: subst.c:5283
+#: subst.c:6134
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr ""
 
-#: subst.c:6652
+#: subst.c:7687
 #, c-format
 msgid "no match: %s"
 msgstr ""
@@ -1408,48 +1391,48 @@ msgstr ""
 msgid "trap_handler: bad signal %d"
 msgstr ""
 
-#: variables.c:310
+#: variables.c:320
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr ""
 
-#: variables.c:670
+#: variables.c:692
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr ""
 
-#: variables.c:1610
+#: variables.c:1651
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 
-#: variables.c:2709
+#: variables.c:2807
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:2923 variables.c:2932
+#: variables.c:3021 variables.c:3030
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr ""
 
-#: variables.c:2938
+#: variables.c:3036
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr ""
 
-#: variables.c:3363
+#: variables.c:3463
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:3376
+#: variables.c:3476
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 
-#: variables.c:3442
+#: variables.c:3548
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
 #: version.c:82
-msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2005 Free Software Foundation, Inc.\n"
 msgstr ""
 
 #: xmalloc.c:93
@@ -1493,2682 +1476,1093 @@ msgid "xrealloc: %s:%d: cannot allocate %lu bytes"
 msgstr ""
 
 #: builtins.c:244
-msgid "`alias' with no arguments or with the -p option prints the list"
-msgstr ""
-
-#: builtins.c:245
-msgid "of aliases in the form alias NAME=VALUE on standard output."
-msgstr ""
-
-#: builtins.c:246
-msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-msgstr ""
-
-#: builtins.c:247
-msgid "A trailing space in VALUE causes the next word to be checked for"
-msgstr ""
-
-#: builtins.c:248
-msgid "alias substitution when the alias is expanded.  Alias returns"
-msgstr ""
-
-#: builtins.c:249
-msgid "true unless a NAME is given for which no alias has been defined."
+msgid ""
+" `alias' with no arguments or with the -p option prints the list\n"
+"    of aliases in the form alias NAME=VALUE on standard output.\n"
+"    Otherwise, an alias is defined for each NAME whose VALUE is given.\n"
+"    A trailing space in VALUE causes the next word to be checked for\n"
+"    alias substitution when the alias is expanded.  Alias returns\n"
+"    true unless a NAME is given for which no alias has been defined."
 msgstr ""
 
 #: builtins.c:257
 msgid ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-msgstr ""
-
-#: builtins.c:258
-msgid "then remove all alias definitions."
+" Remove NAMEs from the list of defined aliases.  If the -a option is given,\n"
+"    then remove all alias definitions."
 msgstr ""
 
 #: builtins.c:266
-msgid "Bind a key sequence to a Readline function or a macro, or set"
-msgstr ""
-
-#: builtins.c:267
-msgid "a Readline variable.  The non-option argument syntax is equivalent"
-msgstr ""
-
-#: builtins.c:268
-msgid "to that found in ~/.inputrc, but must be passed as a single argument:"
-msgstr ""
-
-#: builtins.c:269
-msgid "bind '\"\\C-x\\C-r\": re-read-init-file'."
-msgstr ""
-
-#: builtins.c:270
-msgid "bind accepts the following options:"
-msgstr ""
-
-#: builtins.c:271
 msgid ""
-"  -m  keymap         Use `keymap' as the keymap for the duration of this"
+" Bind a key sequence to a Readline function or a macro, or set\n"
+"    a Readline variable.  The non-option argument syntax is equivalent\n"
+"    to that found in ~/.inputrc, but must be passed as a single argument:\n"
+"    bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    bind accepts the following options:\n"
+"      -m  keymap         Use `keymap' as the keymap for the duration of "
+"this\n"
+"                         command.  Acceptable keymap names are emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
+"                         vi-command, and vi-insert.\n"
+"      -l                 List names of functions.\n"
+"      -P                 List function names and bindings.\n"
+"      -p                 List functions and bindings in a form that can be\n"
+"                         reused as input.\n"
+"      -r  keyseq         Remove the binding for KEYSEQ.\n"
+"      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
+"    \t\t\t\tKEYSEQ is entered.\n"
+"      -f  filename       Read key bindings from FILENAME.\n"
+"      -q  function-name  Query about which keys invoke the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
+"      -V                 List variable names and values\n"
+"      -v                 List variable names and values in a form that can\n"
+"                         be reused as input.\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
+"                         in a form that can be reused as input."
 msgstr ""
 
-#: builtins.c:272
-msgid "                     command.  Acceptable keymap names are emacs,"
-msgstr ""
-
-#: builtins.c:273
+#: builtins.c:297
 msgid ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-msgstr ""
-
-#: builtins.c:274
-msgid "                     vi-command, and vi-insert."
-msgstr ""
-
-#: builtins.c:275
-msgid "  -l                 List names of functions."
-msgstr ""
-
-#: builtins.c:276
-msgid "  -P                 List function names and bindings."
-msgstr ""
-
-#: builtins.c:277
-msgid "  -p                 List functions and bindings in a form that can be"
-msgstr ""
-
-#: builtins.c:278
-msgid "                     reused as input."
-msgstr ""
-
-#: builtins.c:279
-msgid "  -r  keyseq         Remove the binding for KEYSEQ."
-msgstr ""
-
-#: builtins.c:280
-msgid "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-msgstr ""
-
-#: builtins.c:281
-msgid "\t\t\t\tKEYSEQ is entered."
-msgstr ""
-
-#: builtins.c:282
-msgid "  -f  filename       Read key bindings from FILENAME."
-msgstr ""
-
-#: builtins.c:283
-msgid "  -q  function-name  Query about which keys invoke the named function."
+" Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
+"    break N levels."
 msgstr ""
 
-#: builtins.c:284
+#: builtins.c:304
 msgid ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
+" Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.\n"
+"    If N is specified, resume at the N-th enclosing loop."
 msgstr ""
 
-#: builtins.c:285
-msgid "  -V                 List variable names and values"
-msgstr ""
-
-#: builtins.c:286
-msgid "  -v                 List variable names and values in a form that can"
-msgstr ""
-
-#: builtins.c:287
-msgid "                     be reused as input."
-msgstr ""
-
-#: builtins.c:288
+#: builtins.c:311
 msgid ""
-"  -S                 List key sequences that invoke macros and their values"
+" Run a shell builtin.  This is useful when you wish to rename a\n"
+"    shell builtin to be a function, but need the functionality of the\n"
+"    builtin within the function itself."
 msgstr ""
 
-#: builtins.c:289
+#: builtins.c:320
 msgid ""
-"  -s                 List key sequences that invoke macros and their values"
-msgstr ""
-
-#: builtins.c:290
-msgid "                     in a form that can be reused as input."
-msgstr ""
-
-#: builtins.c:297
-msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-msgstr ""
-
-#: builtins.c:298
-msgid "break N levels."
-msgstr ""
-
-#: builtins.c:304
-msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-msgstr ""
-
-#: builtins.c:305
-msgid "If N is specified, resume at the N-th enclosing loop."
-msgstr ""
-
-#: builtins.c:311
-msgid "Run a shell builtin.  This is useful when you wish to rename a"
-msgstr ""
-
-#: builtins.c:312
-msgid "shell builtin to be a function, but need the functionality of the"
-msgstr ""
-
-#: builtins.c:313
-msgid "builtin within the function itself."
+" Returns the context of the current subroutine call.\n"
+"    \n"
+"    Without EXPR, returns returns \"$line $filename\".  With EXPR,\n"
+"    returns \"$line $subroutine $filename\"; this extra information\n"
+"    can be used used to provide a stack trace.\n"
+"    \n"
+"    The value of EXPR indicates how many call frames to go back before the\n"
+"    current one; the top frame is frame 0."
 msgstr ""
 
 #: builtins.c:334
-msgid "Change the current directory to DIR.  The variable $HOME is the"
-msgstr ""
-
-#: builtins.c:335
-msgid "default DIR.  The variable CDPATH defines the search path for"
-msgstr ""
-
-#: builtins.c:336
-msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-msgstr ""
-
-#: builtins.c:337
-msgid "are separated by a colon (:).  A null directory name is the same as"
-msgstr ""
-
-#: builtins.c:338
-msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-msgstr ""
-
-#: builtins.c:339
-msgid "then CDPATH is not used.  If the directory is not found, and the"
-msgstr ""
-
-#: builtins.c:340
-msgid "shell option `cdable_vars' is set, then try the word as a variable"
-msgstr ""
-
-#: builtins.c:341
-msgid "name.  If that variable has a value, then cd to the value of that"
-msgstr ""
-
-#: builtins.c:342
-msgid "variable.  The -P option says to use the physical directory structure"
-msgstr ""
-
-#: builtins.c:343
 msgid ""
-"instead of following symbolic links; the -L option forces symbolic links"
-msgstr ""
-
-#: builtins.c:344
-msgid "to be followed."
+" Change the current directory to DIR.  The variable $HOME is the\n"
+"    default DIR.  The variable CDPATH defines the search path for\n"
+"    the directory containing DIR.  Alternative directory names in CDPATH\n"
+"    are separated by a colon (:).  A null directory name is the same as\n"
+"    the current directory, i.e. `.'.  If DIR begins with a slash (/),\n"
+"    then CDPATH is not used.  If the directory is not found, and the\n"
+"    shell option `cdable_vars' is set, then try the word as a variable\n"
+"    name.  If that variable has a value, then cd to the value of that\n"
+"    variable.  The -P option says to use the physical directory structure\n"
+"    instead of following symbolic links; the -L option forces symbolic "
+"links\n"
+"    to be followed."
 msgstr ""
 
 #: builtins.c:350
-msgid "Print the current working directory.  With the -P option, pwd prints"
-msgstr ""
-
-#: builtins.c:351
-msgid "the physical directory, without any symbolic links; the -L option"
-msgstr ""
-
-#: builtins.c:352
-msgid "makes pwd follow symbolic links."
+msgid ""
+" Print the current working directory.  With the -P option, pwd prints\n"
+"    the physical directory, without any symbolic links; the -L option\n"
+"    makes pwd follow symbolic links."
 msgstr ""
 
 #: builtins.c:358
-msgid "No effect; the command does nothing.  A zero exit code is returned."
+msgid " No effect; the command does nothing.  A zero exit code is returned."
 msgstr ""
 
 #: builtins.c:364
-msgid "Return a successful result."
+msgid " Return a successful result."
 msgstr ""
 
 #: builtins.c:370
-msgid "Return an unsuccessful result."
+msgid " Return an unsuccessful result."
 msgstr ""
 
 #: builtins.c:376
-msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-msgstr ""
-
-#: builtins.c:377
-msgid "function called `ls', and you wish to call the command `ls', you can"
-msgstr ""
-
-#: builtins.c:378
-msgid "say \"command ls\".  If the -p option is given, a default value is used"
-msgstr ""
-
-#: builtins.c:379
-msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
-msgstr ""
-
-#: builtins.c:380
-msgid "the -V or -v option is given, a string is printed describing COMMAND."
-msgstr ""
-
-#: builtins.c:381
-msgid "The -V option produces a more verbose description."
+msgid ""
+" Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
+"    function called `ls', and you wish to call the command `ls', you can\n"
+"    say \"command ls\".  If the -p option is given, a default value is used\n"
+"    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+"    the -V or -v option is given, a string is printed describing COMMAND.\n"
+"    The -V option produces a more verbose description."
 msgstr ""
 
 #: builtins.c:387
-msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-msgstr ""
-
-#: builtins.c:388
-msgid "given, then display the values of variables instead.  The -p option"
-msgstr ""
-
-#: builtins.c:389
-msgid "will display the attributes and values of each NAME."
-msgstr ""
-
-#: builtins.c:391
-msgid "The flags are:"
-msgstr ""
-
-#: builtins.c:393
-msgid "  -a\tto make NAMEs arrays (if supported)"
-msgstr ""
-
-#: builtins.c:394
-msgid "  -f\tto select from among function names only"
-msgstr ""
-
-#: builtins.c:395
 msgid ""
-"  -F\tto display function names (and line number and source file name if"
-msgstr ""
-
-#: builtins.c:396
-msgid "\tdebugging) without definitions"
-msgstr ""
-
-#: builtins.c:397
-msgid "  -i\tto make NAMEs have the `integer' attribute"
-msgstr ""
-
-#: builtins.c:398
-msgid "  -r\tto make NAMEs readonly"
+" Declare variables and/or give them attributes.  If no NAMEs are\n"
+"    given, then display the values of variables instead.  The -p option\n"
+"    will display the attributes and values of each NAME.\n"
+"    \n"
+"    The flags are:\n"
+"    \n"
+"      -a\tto make NAMEs arrays (if supported)\n"
+"      -f\tto select from among function names only\n"
+"      -F\tto display function names (and line number and source file name "
+"if\n"
+"    \tdebugging) without definitions\n"
+"      -i\tto make NAMEs have the `integer' attribute\n"
+"      -r\tto make NAMEs readonly\n"
+"      -t\tto make NAMEs have the `trace' attribute\n"
+"      -x\tto make NAMEs export\n"
+"    \n"
+"    Variables with the integer attribute have arithmetic evaluation (see\n"
+"    `let') done when the variable is assigned to.\n"
+"    \n"
+"    When displaying values of variables, -f displays a function's name\n"
+"    and definition.  The -F option restricts the display to function\n"
+"    name only.\n"
+"    \n"
+"    Using `+' instead of `-' turns off the given attribute instead.  When\n"
+"    used in a function, makes NAMEs local, as with the `local' command."
 msgstr ""
 
-#: builtins.c:399
-msgid "  -t\tto make NAMEs have the `trace' attribute"
-msgstr ""
-
-#: builtins.c:400
-msgid "  -x\tto make NAMEs export"
-msgstr ""
-
-#: builtins.c:402
-msgid "Variables with the integer attribute have arithmetic evaluation (see"
-msgstr ""
-
-#: builtins.c:403
-msgid "`let') done when the variable is assigned to."
+#: builtins.c:416
+msgid " Obsolete.  See `declare'."
 msgstr ""
 
-#: builtins.c:405
-msgid "When displaying values of variables, -f displays a function's name"
+#: builtins.c:422
+msgid ""
+" Create a local variable called NAME, and give it VALUE.  LOCAL\n"
+"    can only be used within a function; it makes the variable NAME\n"
+"    have a visible scope restricted to that function and its children."
 msgstr ""
 
-#: builtins.c:406
-msgid "and definition.  The -F option restricts the display to function"
+#: builtins.c:431
+msgid ""
+" Output the ARGs.  If -n is specified, the trailing newline is\n"
+"    suppressed.  If the -e option is given, interpretation of the\n"
+"    following backslash-escaped characters is turned on:\n"
+"    \t\\a\talert (bell)\n"
+"    \t\\b\tbackspace\n"
+"    \t\\c\tsuppress trailing newline\n"
+"    \t\\E\tescape character\n"
+"    \t\\f\tform feed\n"
+"    \t\\n\tnew line\n"
+"    \t\\r\tcarriage return\n"
+"    \t\\t\thorizontal tab\n"
+"    \t\\v\tvertical tab\n"
+"    \t\\\\\tbackslash\n"
+"    \t\\num\tthe character whose ASCII code is NUM (octal).\n"
+"    \n"
+"    You can explicitly turn off the interpretation of the above characters\n"
+"    with the -E option."
 msgstr ""
 
-#: builtins.c:407
-msgid "name only."
+#: builtins.c:455
+msgid ""
+" Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 msgstr ""
 
-#: builtins.c:409
-msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
+#: builtins.c:462
+msgid ""
+" Enable and disable builtin shell commands.  This allows\n"
+"    you to use a disk command which has the same name as a shell\n"
+"    builtin without specifying a full pathname.  If -n is used, the\n"
+"    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
+"    to use the `test' found in $PATH instead of the shell builtin\n"
+"    version, type `enable -n test'.  On systems supporting dynamic\n"
+"    loading, the -f option may be used to load new builtins from the\n"
+"    shared object FILENAME.  The -d option will delete a builtin\n"
+"    previously loaded with -f.  If no non-option names are given, or\n"
+"    the -p option is supplied, a list of builtins is printed.  The\n"
+"    -a option means to print every builtin with an indication of whether\n"
+"    or not it is enabled.  The -s option restricts the output to the "
+"POSIX.2\n"
+"    `special' builtins.  The -n option displays a list of all disabled "
+"builtins."
 msgstr ""
 
-#: builtins.c:410
-msgid "used in a function, makes NAMEs local, as with the `local' command."
+#: builtins.c:480
+msgid " Read ARGs as input to the shell and execute the resulting command(s)."
 msgstr ""
 
-#: builtins.c:416
-msgid "Obsolete.  See `declare'."
+#: builtins.c:486
+msgid ""
+" Getopts is used by shell procedures to parse positional parameters.\n"
+"    \n"
+"    OPTSTRING contains the option letters to be recognized; if a letter\n"
+"    is followed by a colon, the option is expected to have an argument,\n"
+"    which should be separated from it by white space.\n"
+"    \n"
+"    Each time it is invoked, getopts will place the next option in the\n"
+"    shell variable $name, initializing name if it does not exist, and\n"
+"    the index of the next argument to be processed into the shell\n"
+"    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+"    a shell script is invoked.  When an option requires an argument,\n"
+"    getopts places that argument into the shell variable OPTARG.\n"
+"    \n"
+"    getopts reports errors in one of two ways.  If the first character\n"
+"    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+"    this mode, no error messages are printed.  If an invalid option is\n"
+"    seen, getopts places the option character found into OPTARG.  If a\n"
+"    required argument is not found, getopts places a ':' into NAME and\n"
+"    sets OPTARG to the option character found.  If getopts is not in\n"
+"    silent mode, and an invalid option is seen, getopts places '?' into\n"
+"    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
+"    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+"    printed.\n"
+"    \n"
+"    If the shell variable OPTERR has the value 0, getopts disables the\n"
+"    printing of error messages, even if the first character of\n"
+"    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+"    \n"
+"    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+"    more arguments are given, they are parsed instead."
 msgstr ""
 
-#: builtins.c:422
-msgid "Create a local variable called NAME, and give it VALUE.  LOCAL"
+#: builtins.c:521
+msgid ""
+" Exec FILE, replacing this shell with the specified program.\n"
+"    If FILE is not specified, the redirections take effect in this\n"
+"    shell.  If the first argument is `-l', then place a dash in the\n"
+"    zeroth arg passed to FILE, as login does.  If the `-c' option\n"
+"    is supplied, FILE is executed with a null environment.  The `-a'\n"
+"    option means to make set argv[0] of the executed process to NAME.\n"
+"    If the file cannot be executed and the shell is not interactive,\n"
+"    then the shell exits, unless the shell option `execfail' is set."
 msgstr ""
 
-#: builtins.c:423
-msgid "can only be used within a function; it makes the variable NAME"
+#: builtins.c:534
+msgid ""
+" Exit the shell with a status of N.  If N is omitted, the exit status\n"
+"    is that of the last command executed."
 msgstr ""
 
-#: builtins.c:424
-msgid "have a visible scope restricted to that function and its children."
+#: builtins.c:541
+msgid " Logout of a login shell."
 msgstr ""
 
-#: builtins.c:431
-msgid "Output the ARGs.  If -n is specified, the trailing newline is"
+#: builtins.c:548
+msgid ""
+" fc is used to list or edit and re-execute commands from the history list.\n"
+"    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
+"    string, which means the most recent command beginning with that\n"
+"    string.\n"
+"    \n"
+"       -e ENAME selects which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
+"          then vi.\n"
+"    \n"
+"       -l means list lines instead of editing.\n"
+"       -n means no line numbers listed.\n"
+"       -r means reverse the order of the lines (making it newest listed "
+"first).\n"
+"    \n"
+"    With the `fc -s [pat=rep ...] [command]' format, the command is\n"
+"    re-executed after the substitution OLD=NEW is performed.\n"
+"    \n"
+"    A useful alias to use with this is r='fc -s', so that typing `r cc'\n"
+"    runs the last command beginning with `cc' and typing `r' re-executes\n"
+"    the last command."
 msgstr ""
 
-#: builtins.c:432
-msgid "suppressed.  If the -e option is given, interpretation of the"
+#: builtins.c:573
+msgid ""
+" Place JOB_SPEC in the foreground, and make it the current job.  If\n"
+"    JOB_SPEC is not present, the shell's notion of the current job is\n"
+"    used."
 msgstr ""
 
-#: builtins.c:433
-msgid "following backslash-escaped characters is turned on:"
+#: builtins.c:583
+msgid ""
+" Place each JOB_SPEC in the background, as if it had been started with\n"
+"    `&'.  If JOB_SPEC is not present, the shell's notion of the current\n"
+"    job is used."
 msgstr ""
 
-#: builtins.c:434
-msgid "\t\\a\talert (bell)"
+#: builtins.c:592
+msgid ""
+" For each NAME, the full pathname of the command is determined and\n"
+"    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
+"    full pathname of NAME, and no path search is performed.  The -r\n"
+"    option causes the shell to forget all remembered locations.  The -d\n"
+"    option causes the shell to forget the remembered location of each NAME.\n"
+"    If the -t option is supplied the full pathname to which each NAME\n"
+"    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+"    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+"    causes output to be displayed in a format that may be reused as input.\n"
+"    If no arguments are given, information about remembered commands is "
+"displayed."
 msgstr ""
 
-#: builtins.c:435
-msgid "\t\\b\tbackspace"
+#: builtins.c:608
+msgid ""
+" Display helpful information about builtin commands.  If PATTERN is\n"
+"    specified, gives detailed help on all commands matching PATTERN,\n"
+"    otherwise a list of the builtins is printed.  The -s option\n"
+"    restricts the output for each builtin command matching PATTERN to\n"
+"    a short usage synopsis."
 msgstr ""
 
-#: builtins.c:436
-msgid "\t\\c\tsuppress trailing newline"
+#: builtins.c:620
+msgid ""
+" Display the history list with line numbers.  Lines listed with\n"
+"    with a `*' have been modified.  Argument of N says to list only\n"
+"    the last N lines.  The `-c' option causes the history list to be\n"
+"    cleared by deleting all of the entries.  The `-d' option deletes\n"
+"    the history entry at offset OFFSET.  The `-w' option writes out the\n"
+"    current history to the history file;  `-r' means to read the file and\n"
+"    append the contents to the history list instead.  `-a' means\n"
+"    to append history lines from this session to the history file.\n"
+"    Argument `-n' means to read all history lines not already read\n"
+"    from the history file and append them to the history list.\n"
+"    \n"
+"    If FILENAME is given, then that is used as the history file else\n"
+"    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
+"    If the -s option is supplied, the non-option ARGs are appended to\n"
+"    the history list as a single entry.  The -p option means to perform\n"
+"    history expansion on each ARG and display the result, without storing\n"
+"    anything in the history list.\n"
+"    \n"
+"    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
+"    as a format string for strftime(3) to print the time stamp associated\n"
+"    with each displayed history entry.  No time stamps are printed otherwise."
 msgstr ""
 
-#: builtins.c:437
-msgid "\t\\E\tescape character"
+#: builtins.c:648
+msgid ""
+" Lists the active jobs.  The -l option lists process id's in addition\n"
+"    to the normal information; the -p option lists process id's only.\n"
+"    If -n is given, only processes that have changed status since the last\n"
+"    notification are printed.  JOBSPEC restricts output to that job.  The\n"
+"    -r and -s options restrict output to running and stopped jobs only,\n"
+"    respectively.  Without options, the status of all active jobs is\n"
+"    printed.  If -x is given, COMMAND is run after all job specifications\n"
+"    that appear in ARGS have been replaced with the process ID of that "
+"job's\n"
+"    process group leader."
 msgstr ""
 
-#: builtins.c:438
-msgid "\t\\f\tform feed"
+#: builtins.c:664
+msgid ""
+" By default, removes each JOBSPEC argument from the table of active jobs.\n"
+"    If the -h option is given, the job is not removed from the table, but "
+"is\n"
+"    marked so that SIGHUP is not sent to the job if the shell receives a\n"
+"    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
+"all\n"
+"    jobs from the job table; the -r option means to remove only running jobs."
 msgstr ""
 
-#: builtins.c:439
-msgid "\t\\n\tnew line"
+#: builtins.c:675
+msgid ""
+" Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If\n"
+"    SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'\n"
+"    lists the signal names; if arguments follow `-l' they are assumed to\n"
+"    be signal numbers for which names should be listed.  Kill is a shell\n"
+"    builtin for two reasons: it allows job IDs to be used instead of\n"
+"    process IDs, and, if you have reached the limit on processes that\n"
+"    you can create, you don't have to start a process to kill another one."
 msgstr ""
 
-#: builtins.c:440
-msgid "\t\\r\tcarriage return"
+#: builtins.c:687
+msgid ""
+" Each ARG is an arithmetic expression to be evaluated.  Evaluation\n"
+"    is done in fixed-width integers with no check for overflow, though\n"
+"    division by 0 is trapped and flagged as an error.  The following\n"
+"    list of operators is grouped into levels of equal-precedence operators.\n"
+"    The levels are listed in order of decreasing precedence.\n"
+"    \n"
+"    \tid++, id--\tvariable post-increment, post-decrement\n"
+"    \t++id, --id\tvariable pre-increment, pre-decrement\n"
+"    \t-, +\t\tunary minus, plus\n"
+"    \t!, ~\t\tlogical and bitwise negation\n"
+"    \t**\t\texponentiation\n"
+"    \t*, /, %\t\tmultiplication, division, remainder\n"
+"    \t+, -\t\taddition, subtraction\n"
+"    \t<<, >>\t\tleft and right bitwise shifts\n"
+"    \t<=, >=, <, >\tcomparison\n"
+"    \t==, !=\t\tequality, inequality\n"
+"    \t&\t\tbitwise AND\n"
+"    \t^\t\tbitwise XOR\n"
+"    \t|\t\tbitwise OR\n"
+"    \t&&\t\tlogical AND\n"
+"    \t||\t\tlogical OR\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\tconditional operator\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tassignment\n"
+"    \n"
+"    Shell variables are allowed as operands.  The name of the variable\n"
+"    is replaced by its value (coerced to a fixed-width integer) within\n"
+"    an expression.  The variable need not have its integer attribute\n"
+"    turned on to be used in an expression.\n"
+"    \n"
+"    Operators are evaluated in order of precedence.  Sub-expressions in\n"
+"    parentheses are evaluated first and may override the precedence\n"
+"    rules above.\n"
+"    \n"
+"    If the last ARG evaluates to 0, let returns 1; 0 is returned\n"
+"    otherwise."
 msgstr ""
 
-#: builtins.c:441
-msgid "\t\\t\thorizontal tab"
+#: builtins.c:730
+msgid ""
+" One line is read from the standard input, or from file descriptor FD if "
+"the\n"
+"    -u option is supplied, and the first word is assigned to the first "
+"NAME,\n"
+"    the second word to the second NAME, and so on, with leftover words "
+"assigned\n"
+"    to the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters.  If no NAMEs are supplied, the line read is stored in the "
+"REPLY\n"
+"    variable.  If the -r option is given, this signifies `raw' input, and\n"
+"    backslash escaping is disabled.  The -d option causes read to continue\n"
+"    until the first character of DELIM is read, rather than newline.  If the "
+"-p\n"
+"    option is supplied, the string PROMPT is output without a trailing "
+"newline\n"
+"    before attempting to read.  If -a is supplied, the words read are "
+"assigned\n"
+"    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
+"and\n"
+"    the shell is interactive, readline is used to obtain the line.  If -n "
+"is\n"
+"    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+"    characters have been read.  The -s option causes input coming from a\n"
+"    terminal to not be echoed.\n"
+"    \n"
+"    The -t option causes read to time out and return failure if a complete "
+"line\n"
+"    of input is not read within TIMEOUT seconds.  If the TMOUT variable is "
+"set,\n"
+"    its value is the default timeout.  The return code is zero, unless end-"
+"of-file\n"
+"    is encountered, read times out, or an invalid file descriptor is "
+"supplied as\n"
+"    the argument to -u."
 msgstr ""
 
-#: builtins.c:442
-msgid "\t\\v\tvertical tab"
+#: builtins.c:756
+msgid ""
+" Causes a function to exit with the return value specified by N.  If N\n"
+"    is omitted, the return status is that of the last command."
 msgstr ""
 
-#: builtins.c:443
-msgid "\t\\\\\tbackslash"
+#: builtins.c:763
+msgid ""
+"     -a  Mark variables which are modified or created for export.\n"
+"        -b  Notify of job termination immediately.\n"
+"        -e  Exit immediately if a command exits with a non-zero status.\n"
+"        -f  Disable file name generation (globbing).\n"
+"        -h  Remember the location of commands as they are looked up.\n"
+"        -k  All assignment arguments are placed in the environment for a\n"
+"            command, not just those that precede the command name.\n"
+"        -m  Job control is enabled.\n"
+"        -n  Read commands but do not execute them.\n"
+"        -o option-name\n"
+"            Set the variable corresponding to option-name:\n"
+"                allexport    same as -a\n"
+"                braceexpand  same as -B\n"
+"                emacs        use an emacs-style line editing interface\n"
+"                errexit      same as -e\n"
+"                errtrace     same as -E\n"
+"                functrace    same as -T\n"
+"                hashall      same as -h\n"
+"                histexpand   same as -H\n"
+"                history      enable command history\n"
+"                ignoreeof    the shell will not exit upon reading EOF\n"
+"                interactive-comments\n"
+"                             allow comments to appear in interactive "
+"commands\n"
+"                keyword      same as -k\n"
+"                monitor      same as -m\n"
+"                noclobber    same as -C\n"
+"                noexec       same as -n\n"
+"                noglob       same as -f\n"
+"                nolog        currently accepted but ignored\n"
+"                notify       same as -b\n"
+"                nounset      same as -u\n"
+"                onecmd       same as -t\n"
+"                physical     same as -P\n"
+"                pipefail     the return value of a pipeline is the status "
+"of\n"
+"                             the last command to exit with a non-zero "
+"status,\n"
+"                             or zero if no command exited with a non-zero "
+"status\n"
+"                posix        change the behavior of bash where the default\n"
+"                             operation differs from the 1003.2 standard to\n"
+"                             match the standard\n"
+"                privileged   same as -p\n"
+"                verbose      same as -v\n"
+"                vi           use a vi-style line editing interface\n"
+"                xtrace       same as -x\n"
+"        -p  Turned on whenever the real and effective user ids do not "
+"match.\n"
+"            Disables processing of the $ENV file and importing of shell\n"
+"            functions.  Turning this option off causes the effective uid "
+"and\n"
+"            gid to be set to the real uid and gid.\n"
+"        -t  Exit after reading and executing one command.\n"
+"        -u  Treat unset variables as an error when substituting.\n"
+"        -v  Print shell input lines as they are read.\n"
+"        -x  Print commands and their arguments as they are executed.\n"
+"        -B  the shell will perform brace expansion\n"
+"        -C  If set, disallow existing regular files to be overwritten\n"
+"            by redirection of output.\n"
+"        -E  If set, the ERR trap is inherited by shell functions.\n"
+"        -H  Enable ! style history substitution.  This flag is on\n"
+"            by default when the shell is interactive.\n"
+"        -P  If set, do not follow symbolic links when executing commands\n"
+"            such as cd which change the current directory.\n"
+"        -T  If set, the DEBUG trap is inherited by shell functions.\n"
+"        -   Assign any remaining arguments to the positional parameters.\n"
+"            The -x and -v options are turned off.\n"
+"    \n"
+"    Using + rather than - causes these flags to be turned off.  The\n"
+"    flags can also be used upon invocation of the shell.  The current\n"
+"    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+"    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
+"    ARGs are given, all shell variables are printed."
 msgstr ""
 
-#: builtins.c:444
-msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
+#: builtins.c:836
+msgid ""
+" For each NAME, remove the corresponding variable or function.  Given\n"
+"    the `-v', unset will only act on variables.  Given the `-f' flag,\n"
+"    unset will only act on functions.  With neither flag, unset first\n"
+"    tries to unset a variable, and if that fails, then tries to unset a\n"
+"    function.  Some variables cannot be unset; also see readonly."
 msgstr ""
 
-#: builtins.c:446
-msgid "You can explicitly turn off the interpretation of the above characters"
+#: builtins.c:846
+msgid ""
+" NAMEs are marked for automatic export to the environment of\n"
+"    subsequently executed commands.  If the -f option is given,\n"
+"    the NAMEs refer to functions.  If no NAMEs are given, or if `-p'\n"
+"    is given, a list of all names that are exported in this shell is\n"
+"    printed.  An argument of `-n' says to remove the export property\n"
+"    from subsequent NAMEs.  An argument of `--' disables further option\n"
+"    processing."
 msgstr ""
 
-#: builtins.c:447
-msgid "with the -E option."
+#: builtins.c:858
+msgid ""
+" The given NAMEs are marked readonly and the values of these NAMEs may\n"
+"    not be changed by subsequent assignment.  If the -f option is given,\n"
+"    then functions corresponding to the NAMEs are so marked.  If no\n"
+"    arguments are given, or if `-p' is given, a list of all readonly names\n"
+"    is printed.  The `-a' option means to treat each NAME as\n"
+"    an array variable.  An argument of `--' disables further option\n"
+"    processing."
 msgstr ""
 
-#: builtins.c:455
+#: builtins.c:870
 msgid ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+" The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
+"    not given, it is assumed to be 1."
+msgstr ""
+
+#: builtins.c:877 builtins.c:886
+msgid ""
+" Read and execute commands from FILENAME and return.  The pathnames\n"
+"    in $PATH are used to find the directory containing FILENAME.  If any\n"
+"    ARGUMENTS are supplied, they become the positional parameters when\n"
+"    FILENAME is executed."
+msgstr ""
+
+#: builtins.c:896
+msgid ""
+" Suspend the execution of this shell until it receives a SIGCONT\n"
+"    signal.  The `-f' if specified says not to complain about this\n"
+"    being a login shell if it is; just suspend anyway."
+msgstr ""
+
+#: builtins.c:905
+msgid ""
+" Exits with a status of 0 (true) or 1 (false) depending on\n"
+"    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
+"    expressions are often used to examine the status of a file.  There\n"
+"    are string operators as well, and numeric comparison operators.\n"
+"    \n"
+"    File operators:\n"
+"    \n"
+"        -a FILE        True if file exists.\n"
+"        -b FILE        True if file is block special.\n"
+"        -c FILE        True if file is character special.\n"
+"        -d FILE        True if file is a directory.\n"
+"        -e FILE        True if file exists.\n"
+"        -f FILE        True if file exists and is a regular file.\n"
+"        -g FILE        True if file is set-group-id.\n"
+"        -h FILE        True if file is a symbolic link.\n"
+"        -L FILE        True if file is a symbolic link.\n"
+"        -k FILE        True if file has its `sticky' bit set.\n"
+"        -p FILE        True if file is a named pipe.\n"
+"        -r FILE        True if file is readable by you.\n"
+"        -s FILE        True if file exists and is not empty.\n"
+"        -S FILE        True if file is a socket.\n"
+"        -t FD          True if FD is opened on a terminal.\n"
+"        -u FILE        True if the file is set-user-id.\n"
+"        -w FILE        True if the file is writable by you.\n"
+"        -x FILE        True if the file is executable by you.\n"
+"        -O FILE        True if the file is effectively owned by you.\n"
+"        -G FILE        True if the file is effectively owned by your group.\n"
+"        -N FILE        True if the file has been modified since it was last "
+"read.\n"
+"    \n"
+"      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
+"                       modification date).\n"
+"    \n"
+"      FILE1 -ot FILE2  True if file1 is older than file2.\n"
+"    \n"
+"      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
+"    \n"
+"    String operators:\n"
+"    \n"
+"        -z STRING      True if string is empty.\n"
+"    \n"
+"        -n STRING\n"
+"        STRING         True if string is not empty.\n"
+"    \n"
+"        STRING1 = STRING2\n"
+"                       True if the strings are equal.\n"
+"        STRING1 != STRING2\n"
+"                       True if the strings are not equal.\n"
+"        STRING1 < STRING2\n"
+"                       True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
+"        STRING1 > STRING2\n"
+"                       True if STRING1 sorts after STRING2 "
+"lexicographically.\n"
+"    \n"
+"    Other operators:\n"
+"    \n"
+"        -o OPTION      True if the shell option OPTION is enabled.\n"
+"        ! EXPR         True if expr is false.\n"
+"        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
+"        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
+"    \n"
+"        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
+"                       -lt, -le, -gt, or -ge.\n"
+"    \n"
+"    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
+"    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
+"    than ARG2."
 msgstr ""
 
-#: builtins.c:462
-msgid "Enable and disable builtin shell commands.  This allows"
+#: builtins.c:975
+msgid ""
+" This is a synonym for the \"test\" builtin, but the last\n"
+"    argument must be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:463
-msgid "you to use a disk command which has the same name as a shell"
+#: builtins.c:982
+msgid ""
+" Print the accumulated user and system times for processes run from\n"
+"    the shell."
 msgstr ""
 
-#: builtins.c:464
-msgid "builtin without specifying a full pathname.  If -n is used, the"
+#: builtins.c:989
+msgid ""
+" The command ARG is to be read and executed when the shell receives\n"
+"    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC\n"
+"    is supplied) or `-', each specified signal is reset to its original\n"
+"    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
+"    shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)\n"
+"    the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC\n"
+"    is DEBUG, ARG is executed after every simple command.  If the`-p' "
+"option\n"
+"    is supplied then the trap commands associated with each SIGNAL_SPEC are\n"
+"    displayed.  If no arguments are supplied or if only `-p' is given, trap\n"
+"    prints the list of commands associated with each signal.  Each "
+"SIGNAL_SPEC\n"
+"    is either a signal name in <signal.h> or a signal number.  Signal names\n"
+"    are case insensitive and the SIG prefix is optional.  `trap -l' prints\n"
+"    a list of signal names and their corresponding numbers.  Note that a\n"
+"    signal can be sent to the shell with \"kill -signal $$\"."
 msgstr ""
 
-#: builtins.c:465
-msgid "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
+#: builtins.c:1008
+msgid ""
+" For each NAME, indicate how it would be interpreted if used as a\n"
+"    command name.\n"
+"    \n"
+"    If the -t option is used, `type' outputs a single word which is one of\n"
+"    `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n"
+"    alias, shell reserved word, shell function, shell builtin, disk file,\n"
+"    or unfound, respectively.\n"
+"    \n"
+"    If the -p flag is used, `type' either returns the name of the disk\n"
+"    file that would be executed, or nothing if `type -t NAME' would not\n"
+"    return `file'.\n"
+"    \n"
+"    If the -a flag is used, `type' displays all of the places that contain\n"
+"    an executable named `file'.  This includes aliases, builtins, and\n"
+"    functions, if and only if the -p flag is not also used.\n"
+"    \n"
+"    The -f flag suppresses shell function lookup.\n"
+"    \n"
+"    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+"    builtin, or function, and returns the name of the disk file that would\n"
+"    be executed."
 msgstr ""
 
-#: builtins.c:466
-msgid "to use the `test' found in $PATH instead of the shell builtin"
+#: builtins.c:1035
+msgid ""
+" Ulimit provides control over the resources available to processes\n"
+"    started by the shell, on systems that allow such control.  If an\n"
+"    option is given, it is interpreted as follows:\n"
+"    \n"
+"        -S\tuse the `soft' resource limit\n"
+"        -H\tuse the `hard' resource limit\n"
+"        -a\tall current limits are reported\n"
+"        -c\tthe maximum size of core files created\n"
+"        -d\tthe maximum size of a process's data segment\n"
+"        -f\tthe maximum size of files created by the shell\n"
+"        -i  the maximum number of pending signals\n"
+"        -l\tthe maximum size a process may lock into memory\n"
+"        -m\tthe maximum resident set size\n"
+"        -n\tthe maximum number of open file descriptors\n"
+"        -p\tthe pipe buffer size\n"
+"        -q  the maximum number of bytes in POSIX message queues\n"
+"        -s\tthe maximum stack size\n"
+"        -t\tthe maximum amount of cpu time in seconds\n"
+"        -u\tthe maximum number of user processes\n"
+"        -v\tthe size of virtual memory\n"
+"        -x  the maximum number of file locks\n"
+"    \n"
+"    If LIMIT is given, it is the new value of the specified resource;\n"
+"    the special LIMIT values `soft', `hard', and `unlimited' stand for\n"
+"    the current soft limit, the current hard limit, and no limit, "
+"respectively.\n"
+"    Otherwise, the current value of the specified resource is printed.\n"
+"    If no option is given, then -f is assumed.  Values are in 1024-byte\n"
+"    increments, except for -t, which is in seconds, -p, which is in\n"
+"    increments of 512 bytes, and -u, which is an unscaled number of\n"
+"    processes."
+msgstr ""
+
+#: builtins.c:1071
+msgid ""
+" The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
+"    `-S' is supplied, the current value of the mask is printed.  The `-S'\n"
+"    option makes the output symbolic; otherwise an octal number is output.\n"
+"    If `-p' is supplied, and MODE is omitted, the output is in a form\n"
+"    that may be used as input.  If MODE begins with a digit, it is\n"
+"    interpreted as an octal number, otherwise it is a symbolic mode string\n"
+"    like that accepted by chmod(1)."
+msgstr ""
+
+#: builtins.c:1084
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N may be a process ID or a job\n"
+"    specification; if a job spec is given, all processes in the job's\n"
+"    pipeline are waited for."
+msgstr ""
+
+#: builtins.c:1096
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N is a process ID; if it is not given,\n"
+"    all child processes of the shell are waited for."
+msgstr ""
+
+#: builtins.c:1106
+msgid ""
+" The `for' loop executes a sequence of commands for each member in a\n"
+"    list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is\n"
+"    assumed.  For each element in WORDS, NAME is set to that element, and\n"
+"    the COMMANDS are executed."
 msgstr ""
 
-#: builtins.c:467
-msgid "version, type `enable -n test'.  On systems supporting dynamic"
+#: builtins.c:1115
+msgid ""
+" Equivalent to\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMMANDS\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is\n"
+"    omitted, it behaves as if it evaluates to 1."
 msgstr ""
 
-#: builtins.c:468
-msgid "loading, the -f option may be used to load new builtins from the"
+#: builtins.c:1128
+msgid ""
+" The WORDS are expanded, generating a list of words.  The\n"
+"    set of expanded words is printed on the standard error, each\n"
+"    preceded by a number.  If `in WORDS' is not present, `in \"$@\"'\n"
+"    is assumed.  The PS3 prompt is then displayed and a line read\n"
+"    from the standard input.  If the line consists of the number\n"
+"    corresponding to one of the displayed words, then NAME is set\n"
+"    to that word.  If the line is empty, WORDS and the prompt are\n"
+"    redisplayed.  If EOF is read, the command completes.  Any other\n"
+"    value read causes NAME to be set to null.  The line read is saved\n"
+"    in the variable REPLY.  COMMANDS are executed after each selection\n"
+"    until a break command is executed."
 msgstr ""
 
-#: builtins.c:469
-msgid "shared object FILENAME.  The -d option will delete a builtin"
+#: builtins.c:1144
+msgid ""
+" Execute PIPELINE and print a summary of the real time, user CPU time,\n"
+"    and system CPU time spent executing PIPELINE when it terminates.\n"
+"    The return status is the return status of PIPELINE.  The `-p' option\n"
+"    prints the timing summary in a slightly different format.  This uses\n"
+"    the value of the TIMEFORMAT variable as the output format."
 msgstr ""
 
-#: builtins.c:470
-msgid "previously loaded with -f.  If no non-option names are given, or"
+#: builtins.c:1154
+msgid ""
+" Selectively execute COMMANDS based upon WORD matching PATTERN.  The\n"
+"    `|' is used to separate multiple patterns."
 msgstr ""
 
-#: builtins.c:471
-msgid "the -p option is supplied, a list of builtins is printed.  The"
+#: builtins.c:1161
+msgid ""
+" The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
+"    executed in turn, and if its exit status is zero, the corresponding\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
+"    if no condition tested true."
+msgstr ""
+
+#: builtins.c:1173
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `while' COMMANDS has an exit status of zero."
+msgstr ""
+
+#: builtins.c:1180
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `until' COMMANDS has an exit status which is not zero."
+msgstr ""
+
+#: builtins.c:1187
+msgid ""
+" Create a simple command invoked by NAME which runs COMMANDS.\n"
+"    Arguments on the command line along with NAME are passed to the\n"
+"    function as $0 .. $n."
+msgstr ""
+
+#: builtins.c:1195
+msgid ""
+" Run a set of commands in a group.  This is one way to redirect an\n"
+"    entire set of commands."
+msgstr ""
+
+#: builtins.c:1202
+msgid ""
+" Equivalent to the JOB_SPEC argument to the `fg' command.  Resume a\n"
+"    stopped or background job.  JOB_SPEC can specify either a job name\n"
+"    or a job number.  Following JOB_SPEC with a `&' places the job in\n"
+"    the background, as if the job specification had been supplied as an\n"
+"    argument to `bg'."
+msgstr ""
+
+#: builtins.c:1212
+msgid ""
+" The EXPRESSION is evaluated according to the rules for arithmetic\n"
+"    evaluation.  Equivalent to \"let EXPRESSION\"."
+msgstr ""
+
+#: builtins.c:1219
+msgid ""
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators\n"
+"    \n"
+"    \t( EXPRESSION )\tReturns the value of EXPRESSION\n"
+"    \t! EXPRESSION\tTrue if EXPRESSION is false; else false\n"
+"    \tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false\n"
+"    \tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false\n"
+"    \n"
+"    When the `==' and `!=' operators are used, the string to the right of "
+"the\n"
+"    operator is used as a pattern and pattern matching is performed.  The\n"
+"    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to\n"
+"    determine the expression's value."
+msgstr ""
+
+#: builtins.c:1237
+msgid ""
+" BASH_VERSION    Version information for this Bash.\n"
+"    CDPATH          A colon-separated list of directories to search\n"
+"    \t\tfor directries given as arguments to `cd'.\n"
+"    GLOBIGNORE\tA colon-separated list of patterns describing filenames to\n"
+"    \t\tbe ignored by pathname expansion.\n"
+"    HISTFILE        The name of the file where your command history is "
+"stored.\n"
+"    HISTFILESIZE    The maximum number of lines this file can contain.\n"
+"    HISTSIZE        The maximum number of history lines that a running\n"
+"    \t\tshell can access.\n"
+"    HOME            The complete pathname to your login directory.\n"
+"    HOSTNAME\tThe name of the current host.\n"
+"    HOSTTYPE        The type of CPU this version of Bash is running under.\n"
+"    IGNOREEOF       Controls the action of the shell on receipt of an EOF\n"
+"    \t\tcharacter as the sole input.  If set, then the value\n"
+"    \t\tof it is the number of EOF characters that can be seen\n"
+"    \t\tin a row on an empty line before the shell will exit\n"
+"    \t\t(default 10).  When unset, EOF signifies the end of input.\n"
+"    MACHTYPE\tA string describing the current system Bash is running on.\n"
+"    MAILCHECK\tHow often, in seconds, Bash checks for new mail.\n"
+"    MAILPATH\tA colon-separated list of filenames which Bash checks\n"
+"    \t\tfor new mail.\n"
+"    OSTYPE\t\tThe version of Unix this version of Bash is running on.\n"
+"    PATH            A colon-separated list of directories to search when\n"
+"    \t\tlooking for commands.\n"
+"    PROMPT_COMMAND  A command to be executed before the printing of each\n"
+"    \t\tprimary prompt.\n"
+"    PS1             The primary prompt string.\n"
+"    PS2             The secondary prompt string.\n"
+"    PWD\t\tThe full pathname of the current directory.\n"
+"    SHELLOPTS\tA colon-separated list of enabled shell options.\n"
+"    TERM            The name of the current terminal type.\n"
+"    TIMEFORMAT\tThe output format for timing statistics displayed by the\n"
+"    \t\t`time' reserved word.\n"
+"    auto_resume     Non-null means a command word appearing on a line by\n"
+"    \t\titself is first looked for in the list of currently\n"
+"    \t\tstopped jobs.  If found there, that job is foregrounded.\n"
+"    \t\tA value of `exact' means that the command word must\n"
+"    \t\texactly match a command in the list of stopped jobs.  A\n"
+"    \t\tvalue of `substring' means that the command word must\n"
+"    \t\tmatch a substring of the job.  Any other value means that\n"
+"    \t\tthe command must be a prefix of a stopped job.\n"
+"    histchars       Characters controlling history expansion and quick\n"
+"    \t\tsubstitution.  The first character is the history\n"
+"    \t\tsubstitution character, usually `!'.  The second is\n"
+"    \t\tthe `quick substitution' character, usually `^'.  The\n"
+"    \t\tthird is the `history comment' character, usually `#'.\n"
+"    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
+"    \t\tcommands should be saved on the history list.\n"
+msgstr ""
+
+#: builtins.c:1292
+msgid ""
+" Adds a directory to the top of the directory stack, or rotates\n"
+"    the stack, making the new top of the stack the current working\n"
+"    directory.  With no arguments, exchanges the top two directories.\n"
+"    \n"
+"    +N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the left of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the right of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when adding directories\n"
+"    \tto the stack, so only the stack is manipulated.\n"
+"    \n"
+"    dir\tadds DIR to the directory stack at the top, making it the\n"
+"    \tnew current working directory.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
 msgstr ""
 
-#: builtins.c:472
-msgid "-a option means to print every builtin with an indication of whether"
+#: builtins.c:1318
+msgid ""
+" Removes entries from the directory stack.  With no arguments,\n"
+"    removes the top directory from the stack, and cd's to the new\n"
+"    top directory.\n"
+"    \n"
+"    +N\tremoves the Nth entry counting from the left of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd +0'\n"
+"    \tremoves the first directory, `popd +1' the second.\n"
+"    \n"
+"    -N\tremoves the Nth entry counting from the right of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd -0'\n"
+"    \tremoves the last directory, `popd -1' the next to last.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when removing directories\n"
+"    \tfrom the stack, so only the stack is manipulated.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
 msgstr ""
 
-#: builtins.c:473
+#: builtins.c:1341
 msgid ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
+" Display the list of currently remembered directories.  Directories\n"
+"    find their way onto the list with the `pushd' command; you can get\n"
+"    back up through the list with the `popd' command.\n"
+"    \n"
+"    The -l flag specifies that `dirs' should not print shorthand versions\n"
+"    of directories which are relative to your home directory.  This means\n"
+"    that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag\n"
+"    causes `dirs' to print the directory stack with one entry per line,\n"
+"    prepending the directory name with its position in the stack.  The -p\n"
+"    flag does the same thing, but the stack position is not prepended.\n"
+"    The -c flag clears the directory stack by deleting all of the elements.\n"
+"    \n"
+"    +N\tdisplays the Nth entry counting from the left of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero.\n"
+"    \n"
+"    -N\tdisplays the Nth entry counting from the right of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero."
+msgstr ""
+
+#: builtins.c:1364
+msgid ""
+" Toggle the values of variables controlling optional behavior.\n"
+"    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
+"    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
+"    status indicates whether each OPTNAME is set or unset.  The -o\n"
+"    option restricts the OPTNAMEs to those defined for use with\n"
+"    `set -o'.  With no options, or with the -p option, a list of all\n"
+"    settable options is displayed, with an indication of whether or\n"
+"    not each is set."
 msgstr ""
 
-#: builtins.c:474
+#: builtins.c:1377
 msgid ""
-"`special' builtins.  The -n option displays a list of all disabled builtins."
+" printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT\n"
+"    is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output, character "
+"escape\n"
+"    sequences which are converted and copied to the standard output, and\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
+"    argument.  In addition to the standard printf(1) formats, %b means to\n"
+"    expand backslash escape sequences in the corresponding argument, and %q\n"
+"    means to quote the argument in a way that can be reused as shell input.\n"
+"    If the -v option is supplied, the output is placed into the value of "
+"the\n"
+"    shell variable VAR rather than being sent to the standard output."
 msgstr ""
 
-#: builtins.c:480
-msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-msgstr ""
-
-#: builtins.c:486
-msgid "Getopts is used by shell procedures to parse positional parameters."
-msgstr ""
-
-#: builtins.c:488
-msgid "OPTSTRING contains the option letters to be recognized; if a letter"
-msgstr ""
-
-#: builtins.c:489
-msgid "is followed by a colon, the option is expected to have an argument,"
-msgstr ""
-
-#: builtins.c:490
-msgid "which should be separated from it by white space."
-msgstr ""
-
-#: builtins.c:492
-msgid "Each time it is invoked, getopts will place the next option in the"
-msgstr ""
-
-#: builtins.c:493
-msgid "shell variable $name, initializing name if it does not exist, and"
-msgstr ""
-
-#: builtins.c:494
-msgid "the index of the next argument to be processed into the shell"
-msgstr ""
-
-#: builtins.c:495
-msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-msgstr ""
-
-#: builtins.c:496
-msgid "a shell script is invoked.  When an option requires an argument,"
-msgstr ""
-
-#: builtins.c:497
-msgid "getopts places that argument into the shell variable OPTARG."
-msgstr ""
-
-#: builtins.c:499
-msgid "getopts reports errors in one of two ways.  If the first character"
-msgstr ""
-
-#: builtins.c:500
-msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-msgstr ""
-
-#: builtins.c:501
-msgid "this mode, no error messages are printed.  If an invalid option is"
-msgstr ""
-
-#: builtins.c:502
-msgid "seen, getopts places the option character found into OPTARG.  If a"
-msgstr ""
-
-#: builtins.c:503
-msgid "required argument is not found, getopts places a ':' into NAME and"
-msgstr ""
-
-#: builtins.c:504
-msgid "sets OPTARG to the option character found.  If getopts is not in"
-msgstr ""
-
-#: builtins.c:505
-msgid "silent mode, and an invalid option is seen, getopts places '?' into"
-msgstr ""
-
-#: builtins.c:506
-msgid "NAME and unsets OPTARG.  If a required argument is not found, a '?'"
-msgstr ""
-
-#: builtins.c:507
-msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-msgstr ""
-
-#: builtins.c:508
-msgid "printed."
-msgstr ""
-
-#: builtins.c:510
-msgid "If the shell variable OPTERR has the value 0, getopts disables the"
-msgstr ""
-
-#: builtins.c:511
-msgid "printing of error messages, even if the first character of"
-msgstr ""
-
-#: builtins.c:512
-msgid "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
-msgstr ""
-
-#: builtins.c:514
-msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-msgstr ""
-
-#: builtins.c:515
-msgid "more arguments are given, they are parsed instead."
-msgstr ""
-
-#: builtins.c:521
-msgid "Exec FILE, replacing this shell with the specified program."
-msgstr ""
-
-#: builtins.c:522
-msgid "If FILE is not specified, the redirections take effect in this"
-msgstr ""
-
-#: builtins.c:523
-msgid "shell.  If the first argument is `-l', then place a dash in the"
-msgstr ""
-
-#: builtins.c:524
-msgid "zeroth arg passed to FILE, as login does.  If the `-c' option"
-msgstr ""
-
-#: builtins.c:525
-msgid "is supplied, FILE is executed with a null environment.  The `-a'"
-msgstr ""
-
-#: builtins.c:526
-msgid "option means to make set argv[0] of the executed process to NAME."
-msgstr ""
-
-#: builtins.c:527
-msgid "If the file cannot be executed and the shell is not interactive,"
-msgstr ""
-
-#: builtins.c:528
-msgid "then the shell exits, unless the shell option `execfail' is set."
-msgstr ""
-
-#: builtins.c:534
-msgid "Exit the shell with a status of N.  If N is omitted, the exit status"
-msgstr ""
-
-#: builtins.c:535
-msgid "is that of the last command executed."
-msgstr ""
-
-#: builtins.c:541
-msgid "Logout of a login shell."
-msgstr ""
-
-#: builtins.c:548
-msgid ""
-"fc is used to list or edit and re-execute commands from the history list."
-msgstr ""
-
-#: builtins.c:549
-msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-msgstr ""
-
-#: builtins.c:550
-msgid "string, which means the most recent command beginning with that"
-msgstr ""
-
-#: builtins.c:551
-msgid "string."
-msgstr ""
-
-#: builtins.c:553
-msgid ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-msgstr ""
-
-#: builtins.c:554
-msgid "      then vi."
-msgstr ""
-
-#: builtins.c:556
-msgid "   -l means list lines instead of editing."
-msgstr ""
-
-#: builtins.c:557
-msgid "   -n means no line numbers listed."
-msgstr ""
-
-#: builtins.c:558
-msgid ""
-"   -r means reverse the order of the lines (making it newest listed first)."
-msgstr ""
-
-#: builtins.c:560
-msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-msgstr ""
-
-#: builtins.c:561
-msgid "re-executed after the substitution OLD=NEW is performed."
-msgstr ""
-
-#: builtins.c:563
-msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-msgstr ""
-
-#: builtins.c:564
-msgid "runs the last command beginning with `cc' and typing `r' re-executes"
-msgstr ""
-
-#: builtins.c:565
-msgid "the last command."
-msgstr ""
-
-#: builtins.c:573
-msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-msgstr ""
-
-#: builtins.c:574
-msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-msgstr ""
-
-#: builtins.c:575
-msgid "used."
-msgstr ""
-
-#: builtins.c:583
-msgid "Place JOB_SPEC in the background, as if it had been started with"
-msgstr ""
-
-#: builtins.c:584
-msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-msgstr ""
-
-#: builtins.c:585
-msgid "job is used."
-msgstr ""
-
-#: builtins.c:592
-msgid "For each NAME, the full pathname of the command is determined and"
-msgstr ""
-
-#: builtins.c:593
-msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-msgstr ""
-
-#: builtins.c:594
-msgid "full pathname of NAME, and no path search is performed.  The -r"
-msgstr ""
-
-#: builtins.c:595
-msgid "option causes the shell to forget all remembered locations.  The -d"
-msgstr ""
-
-#: builtins.c:596
-msgid "option causes the shell to forget the remembered location of each NAME."
-msgstr ""
-
-#: builtins.c:597
-msgid "If the -t option is supplied the full pathname to which each NAME"
-msgstr ""
-
-#: builtins.c:598
-msgid "corresponds is printed.  If multiple NAME arguments are supplied with"
-msgstr ""
-
-#: builtins.c:599
-msgid "-t, the NAME is printed before the hashed full pathname.  The -l option"
-msgstr ""
-
-#: builtins.c:600
-msgid "causes output to be displayed in a format that may be reused as input."
-msgstr ""
-
-#: builtins.c:601
-msgid ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-msgstr ""
-
-#: builtins.c:608
-msgid "Display helpful information about builtin commands.  If PATTERN is"
-msgstr ""
-
-#: builtins.c:609
-msgid "specified, gives detailed help on all commands matching PATTERN,"
-msgstr ""
-
-#: builtins.c:610
-msgid "otherwise a list of the builtins is printed.  The -s option"
-msgstr ""
-
-#: builtins.c:611
-msgid "restricts the output for each builtin command matching PATTERN to"
-msgstr ""
-
-#: builtins.c:612
-msgid "a short usage synopsis."
-msgstr ""
-
-#: builtins.c:620
-msgid "Display the history list with line numbers.  Lines listed with"
-msgstr ""
-
-#: builtins.c:621
-msgid "with a `*' have been modified.  Argument of N says to list only"
-msgstr ""
-
-#: builtins.c:622
-msgid "the last N lines.  The `-c' option causes the history list to be"
-msgstr ""
-
-#: builtins.c:623
-msgid "cleared by deleting all of the entries.  The `-d' option deletes"
-msgstr ""
-
-#: builtins.c:624
-msgid "the history entry at offset OFFSET.  The `-w' option writes out the"
-msgstr ""
-
-#: builtins.c:625
-msgid "current history to the history file;  `-r' means to read the file and"
-msgstr ""
-
-#: builtins.c:626
-msgid "append the contents to the history list instead.  `-a' means"
-msgstr ""
-
-#: builtins.c:627
-msgid "to append history lines from this session to the history file."
-msgstr ""
-
-#: builtins.c:628
-msgid "Argument `-n' means to read all history lines not already read"
-msgstr ""
-
-#: builtins.c:629
-msgid "from the history file and append them to the history list."
-msgstr ""
-
-#: builtins.c:631
-msgid "If FILENAME is given, then that is used as the history file else"
-msgstr ""
-
-#: builtins.c:632
-msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-msgstr ""
-
-#: builtins.c:633
-msgid "If the -s option is supplied, the non-option ARGs are appended to"
-msgstr ""
-
-#: builtins.c:634
-msgid "the history list as a single entry.  The -p option means to perform"
-msgstr ""
-
-#: builtins.c:635
-msgid "history expansion on each ARG and display the result, without storing"
-msgstr ""
-
-#: builtins.c:636
-msgid "anything in the history list."
-msgstr ""
-
-#: builtins.c:638
-msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-msgstr ""
-
-#: builtins.c:639
-msgid "as a format string for strftime(3) to print the time stamp associated"
-msgstr ""
-
-#: builtins.c:640
-msgid ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-msgstr ""
-
-#: builtins.c:648
-msgid "Lists the active jobs.  The -l option lists process id's in addition"
-msgstr ""
-
-#: builtins.c:649
-msgid "to the normal information; the -p option lists process id's only."
-msgstr ""
-
-#: builtins.c:650
-msgid "If -n is given, only processes that have changed status since the last"
-msgstr ""
-
-#: builtins.c:651
-msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-msgstr ""
-
-#: builtins.c:652
-msgid "-r and -s options restrict output to running and stopped jobs only,"
-msgstr ""
-
-#: builtins.c:653
-msgid "respectively.  Without options, the status of all active jobs is"
-msgstr ""
-
-#: builtins.c:654
-msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-msgstr ""
-
-#: builtins.c:655
-msgid ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-msgstr ""
-
-#: builtins.c:656
-msgid "process group leader."
-msgstr ""
-
-#: builtins.c:664
-msgid ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-msgstr ""
-
-#: builtins.c:665
-msgid ""
-"If the -h option is given, the job is not removed from the table, but is"
-msgstr ""
-
-#: builtins.c:666
-msgid "marked so that SIGHUP is not sent to the job if the shell receives a"
-msgstr ""
-
-#: builtins.c:667
-msgid ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-msgstr ""
-
-#: builtins.c:668
-msgid ""
-"jobs from the job table; the -r option means to remove only running jobs."
-msgstr ""
-
-#: builtins.c:675
-msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-msgstr ""
-
-#: builtins.c:676
-msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-msgstr ""
-
-#: builtins.c:677
-msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-msgstr ""
-
-#: builtins.c:678
-msgid "be signal numbers for which names should be listed.  Kill is a shell"
-msgstr ""
-
-#: builtins.c:679
-msgid "builtin for two reasons: it allows job IDs to be used instead of"
-msgstr ""
-
-#: builtins.c:680
-msgid "process IDs, and, if you have reached the limit on processes that"
-msgstr ""
-
-#: builtins.c:681
-msgid "you can create, you don't have to start a process to kill another one."
-msgstr ""
-
-#: builtins.c:687
-msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-msgstr ""
-
-#: builtins.c:688
-msgid "is done in fixed-width integers with no check for overflow, though"
-msgstr ""
-
-#: builtins.c:689
-msgid "division by 0 is trapped and flagged as an error.  The following"
-msgstr ""
-
-#: builtins.c:690
-msgid "list of operators is grouped into levels of equal-precedence operators."
-msgstr ""
-
-#: builtins.c:691
-msgid "The levels are listed in order of decreasing precedence."
-msgstr ""
-
-#: builtins.c:693
-msgid "\tid++, id--\tvariable post-increment, post-decrement"
-msgstr ""
-
-#: builtins.c:694
-msgid "\t++id, --id\tvariable pre-increment, pre-decrement"
-msgstr ""
-
-#: builtins.c:695
-msgid "\t-, +\t\tunary minus, plus"
-msgstr ""
-
-#: builtins.c:696
-msgid "\t!, ~\t\tlogical and bitwise negation"
-msgstr ""
-
-#: builtins.c:697
-msgid "\t**\t\texponentiation"
-msgstr ""
-
-#: builtins.c:698
-msgid "\t*, /, %\t\tmultiplication, division, remainder"
-msgstr ""
-
-#: builtins.c:699
-msgid "\t+, -\t\taddition, subtraction"
-msgstr ""
-
-#: builtins.c:700
-msgid "\t<<, >>\t\tleft and right bitwise shifts"
-msgstr ""
-
-#: builtins.c:701
-msgid "\t<=, >=, <, >\tcomparison"
-msgstr ""
-
-#: builtins.c:702
-msgid "\t==, !=\t\tequality, inequality"
-msgstr ""
-
-#: builtins.c:703
-msgid "\t&\t\tbitwise AND"
-msgstr ""
-
-#: builtins.c:704
-msgid "\t^\t\tbitwise XOR"
-msgstr ""
-
-#: builtins.c:705
-msgid "\t|\t\tbitwise OR"
-msgstr ""
-
-#: builtins.c:706
-msgid "\t&&\t\tlogical AND"
-msgstr ""
-
-#: builtins.c:707
-msgid "\t||\t\tlogical OR"
-msgstr ""
-
-#: builtins.c:708
-msgid "\texpr ? expr : expr"
-msgstr ""
-
-#: builtins.c:709
-msgid "\t\t\tconditional operator"
-msgstr ""
-
-#: builtins.c:710
-msgid "\t=, *=, /=, %=,"
-msgstr ""
-
-#: builtins.c:711
-msgid "\t+=, -=, <<=, >>=,"
-msgstr ""
-
-#: builtins.c:712
-msgid "\t&=, ^=, |=\tassignment"
-msgstr ""
-
-#: builtins.c:714
-msgid "Shell variables are allowed as operands.  The name of the variable"
-msgstr ""
-
-#: builtins.c:715
-msgid "is replaced by its value (coerced to a fixed-width integer) within"
-msgstr ""
-
-#: builtins.c:716
-msgid "an expression.  The variable need not have its integer attribute"
-msgstr ""
-
-#: builtins.c:717
-msgid "turned on to be used in an expression."
-msgstr ""
-
-#: builtins.c:719
-msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-msgstr ""
-
-#: builtins.c:720
-msgid "parentheses are evaluated first and may override the precedence"
-msgstr ""
-
-#: builtins.c:721
-msgid "rules above."
-msgstr ""
-
-#: builtins.c:723
-msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-msgstr ""
-
-#: builtins.c:724
-msgid "otherwise."
-msgstr ""
-
-#: builtins.c:730
-msgid ""
-"One line is read from the standard input, or from file descriptor FD if the"
-msgstr ""
-
-#: builtins.c:731
-msgid ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-msgstr ""
-
-#: builtins.c:732
-msgid ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-msgstr ""
-
-#: builtins.c:733
-msgid ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-msgstr ""
-
-#: builtins.c:734
-msgid ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-msgstr ""
-
-#: builtins.c:735
-msgid "variable.  If the -r option is given, this signifies `raw' input, and"
-msgstr ""
-
-#: builtins.c:736
-msgid "backslash escaping is disabled.  The -d option causes read to continue"
-msgstr ""
-
-#: builtins.c:737
-msgid ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-msgstr ""
-
-#: builtins.c:738
-msgid ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-msgstr ""
-
-#: builtins.c:739
-msgid ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-msgstr ""
-
-#: builtins.c:740
-msgid ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-msgstr ""
-
-#: builtins.c:741
-msgid ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-msgstr ""
-
-#: builtins.c:742
-msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-msgstr ""
-
-#: builtins.c:743
-msgid "characters have been read.  The -s option causes input coming from a"
-msgstr ""
-
-#: builtins.c:744
-msgid "terminal to not be echoed."
-msgstr ""
-
-#: builtins.c:746
-msgid ""
-"The -t option causes read to time out and return failure if a complete line"
-msgstr ""
-
-#: builtins.c:747
-msgid ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-msgstr ""
-
-#: builtins.c:748
-msgid ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-msgstr ""
-
-#: builtins.c:749
-msgid ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-msgstr ""
-
-#: builtins.c:750
-msgid "the argument to -u."
-msgstr ""
-
-#: builtins.c:756
-msgid "Causes a function to exit with the return value specified by N.  If N"
-msgstr ""
-
-#: builtins.c:757
-msgid "is omitted, the return status is that of the last command."
-msgstr ""
-
-#: builtins.c:763
-msgid "    -a  Mark variables which are modified or created for export."
-msgstr ""
-
-#: builtins.c:764
-msgid "    -b  Notify of job termination immediately."
-msgstr ""
-
-#: builtins.c:765
-msgid "    -e  Exit immediately if a command exits with a non-zero status."
-msgstr ""
-
-#: builtins.c:766
-msgid "    -f  Disable file name generation (globbing)."
-msgstr ""
-
-#: builtins.c:767
-msgid "    -h  Remember the location of commands as they are looked up."
-msgstr ""
-
-#: builtins.c:768
-msgid "    -k  All assignment arguments are placed in the environment for a"
-msgstr ""
-
-#: builtins.c:769
-msgid "        command, not just those that precede the command name."
-msgstr ""
-
-#: builtins.c:770
-msgid "    -m  Job control is enabled."
-msgstr ""
-
-#: builtins.c:771
-msgid "    -n  Read commands but do not execute them."
-msgstr ""
-
-#: builtins.c:772
-msgid "    -o option-name"
-msgstr ""
-
-#: builtins.c:773
-msgid "        Set the variable corresponding to option-name:"
-msgstr ""
-
-#: builtins.c:774
-msgid "            allexport    same as -a"
-msgstr ""
-
-#: builtins.c:775
-msgid "            braceexpand  same as -B"
-msgstr ""
-
-#: builtins.c:777
-msgid "            emacs        use an emacs-style line editing interface"
-msgstr ""
-
-#: builtins.c:779
-msgid "            errexit      same as -e"
-msgstr ""
-
-#: builtins.c:780
-msgid "            errtrace     same as -E"
-msgstr ""
-
-#: builtins.c:781
-msgid "            functrace    same as -T"
-msgstr ""
-
-#: builtins.c:782
-msgid "            hashall      same as -h"
-msgstr ""
-
-#: builtins.c:784
-msgid "            histexpand   same as -H"
-msgstr ""
-
-#: builtins.c:787
-msgid "            history      enable command history"
-msgstr ""
-
-#: builtins.c:789
-msgid "            ignoreeof    the shell will not exit upon reading EOF"
-msgstr ""
-
-#: builtins.c:790
-msgid "            interactive-comments"
-msgstr ""
-
-#: builtins.c:791
-msgid ""
-"                         allow comments to appear in interactive commands"
-msgstr ""
-
-#: builtins.c:792
-msgid "            keyword      same as -k"
-msgstr ""
-
-#: builtins.c:793
-msgid "            monitor      same as -m"
-msgstr ""
-
-#: builtins.c:794
-msgid "            noclobber    same as -C"
-msgstr ""
-
-#: builtins.c:795
-msgid "            noexec       same as -n"
-msgstr ""
-
-#: builtins.c:796
-msgid "            noglob       same as -f"
-msgstr ""
-
-#: builtins.c:797
-msgid "            nolog        currently accepted but ignored"
-msgstr ""
-
-#: builtins.c:798
-msgid "            notify       same as -b"
-msgstr ""
-
-#: builtins.c:799
-msgid "            nounset      same as -u"
-msgstr ""
-
-#: builtins.c:800
-msgid "            onecmd       same as -t"
-msgstr ""
-
-#: builtins.c:801
-msgid "            physical     same as -P"
-msgstr ""
-
-#: builtins.c:802
-msgid ""
-"            pipefail     the return value of a pipeline is the status of"
-msgstr ""
-
-#: builtins.c:803
-msgid ""
-"                         the last command to exit with a non-zero status,"
-msgstr ""
-
-#: builtins.c:804
-msgid ""
-"                         or zero if no command exited with a non-zero status"
-msgstr ""
-
-#: builtins.c:805
-msgid "            posix        change the behavior of bash where the default"
-msgstr ""
-
-#: builtins.c:806
-msgid "                         operation differs from the 1003.2 standard to"
-msgstr ""
-
-#: builtins.c:807
-msgid "                         match the standard"
-msgstr ""
-
-#: builtins.c:808
-msgid "            privileged   same as -p"
-msgstr ""
-
-#: builtins.c:809
-msgid "            verbose      same as -v"
-msgstr ""
-
-#: builtins.c:811
-msgid "            vi           use a vi-style line editing interface"
-msgstr ""
-
-#: builtins.c:813
-msgid "            xtrace       same as -x"
-msgstr ""
-
-#: builtins.c:814
-msgid ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-msgstr ""
-
-#: builtins.c:815
-msgid "        Disables processing of the $ENV file and importing of shell"
-msgstr ""
-
-#: builtins.c:816
-msgid ""
-"        functions.  Turning this option off causes the effective uid and"
-msgstr ""
-
-#: builtins.c:817
-msgid "        gid to be set to the real uid and gid."
-msgstr ""
-
-#: builtins.c:818
-msgid "    -t  Exit after reading and executing one command."
-msgstr ""
-
-#: builtins.c:819
-msgid "    -u  Treat unset variables as an error when substituting."
-msgstr ""
-
-#: builtins.c:820
-msgid "    -v  Print shell input lines as they are read."
-msgstr ""
-
-#: builtins.c:821
-msgid "    -x  Print commands and their arguments as they are executed."
-msgstr ""
-
-#: builtins.c:823
-msgid "    -B  the shell will perform brace expansion"
-msgstr ""
-
-#: builtins.c:825
-msgid "    -C  If set, disallow existing regular files to be overwritten"
-msgstr ""
-
-#: builtins.c:826
-msgid "        by redirection of output."
-msgstr ""
-
-#: builtins.c:827
-msgid "    -E  If set, the ERR trap is inherited by shell functions."
-msgstr ""
-
-#: builtins.c:829
-msgid "    -H  Enable ! style history substitution.  This flag is on"
-msgstr ""
-
-#: builtins.c:830
-msgid "        by default."
-msgstr ""
-
-#: builtins.c:832
-msgid "    -P  If set, do not follow symbolic links when executing commands"
-msgstr ""
-
-#: builtins.c:833
-msgid "        such as cd which change the current directory."
-msgstr ""
-
-#: builtins.c:834
-msgid "    -T  If set, the DEBUG trap is inherited by shell functions."
-msgstr ""
-
-#: builtins.c:836
-msgid "Using + rather than - causes these flags to be turned off.  The"
-msgstr ""
-
-#: builtins.c:837
-msgid "flags can also be used upon invocation of the shell.  The current"
-msgstr ""
-
-#: builtins.c:838
-msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
-msgstr ""
-
-#: builtins.c:839
-msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-msgstr ""
-
-#: builtins.c:840
-msgid "ARGs are given, all shell variables are printed."
-msgstr ""
-
-#: builtins.c:846
-msgid "For each NAME, remove the corresponding variable or function.  Given"
-msgstr ""
-
-#: builtins.c:847
-msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-msgstr ""
-
-#: builtins.c:848
-msgid "unset will only act on functions.  With neither flag, unset first"
-msgstr ""
-
-#: builtins.c:849
-msgid "tries to unset a variable, and if that fails, then tries to unset a"
-msgstr ""
-
-#: builtins.c:850
-msgid "function.  Some variables cannot be unset; also see readonly."
-msgstr ""
-
-#: builtins.c:856
-msgid "NAMEs are marked for automatic export to the environment of"
-msgstr ""
-
-#: builtins.c:857
-msgid "subsequently executed commands.  If the -f option is given,"
-msgstr ""
-
-#: builtins.c:858
-msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-msgstr ""
-
-#: builtins.c:859
-msgid "is given, a list of all names that are exported in this shell is"
-msgstr ""
-
-#: builtins.c:860
-msgid "printed.  An argument of `-n' says to remove the export property"
-msgstr ""
-
-#: builtins.c:861
-msgid "from subsequent NAMEs.  An argument of `--' disables further option"
-msgstr ""
-
-#: builtins.c:862 builtins.c:874
-msgid "processing."
-msgstr ""
-
-#: builtins.c:868
-msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-msgstr ""
-
-#: builtins.c:869
-msgid "not be changed by subsequent assignment.  If the -f option is given,"
-msgstr ""
-
-#: builtins.c:870
-msgid "then functions corresponding to the NAMEs are so marked.  If no"
-msgstr ""
-
-#: builtins.c:871
-msgid "arguments are given, or if `-p' is given, a list of all readonly names"
-msgstr ""
-
-#: builtins.c:872
-msgid "is printed.  The `-a' option means to treat each NAME as"
-msgstr ""
-
-#: builtins.c:873
-msgid "an array variable.  An argument of `--' disables further option"
-msgstr ""
-
-#: builtins.c:880
-msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-msgstr ""
-
-#: builtins.c:881
-msgid "not given, it is assumed to be 1."
-msgstr ""
-
-#: builtins.c:887 builtins.c:896
-msgid "Read and execute commands from FILENAME and return.  The pathnames"
-msgstr ""
-
-#: builtins.c:888 builtins.c:897
-msgid "in $PATH are used to find the directory containing FILENAME.  If any"
-msgstr ""
-
-#: builtins.c:889 builtins.c:898
-msgid "ARGUMENTS are supplied, they become the positional parameters when"
-msgstr ""
-
-#: builtins.c:890 builtins.c:899
-msgid "FILENAME is executed."
-msgstr ""
-
-#: builtins.c:906
-msgid "Suspend the execution of this shell until it receives a SIGCONT"
-msgstr ""
-
-#: builtins.c:907
-msgid "signal.  The `-f' if specified says not to complain about this"
-msgstr ""
-
-#: builtins.c:908
-msgid "being a login shell if it is; just suspend anyway."
-msgstr ""
-
-#: builtins.c:915
-msgid "Exits with a status of 0 (true) or 1 (false) depending on"
-msgstr ""
-
-#: builtins.c:916
-msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-msgstr ""
-
-#: builtins.c:917
-msgid "expressions are often used to examine the status of a file.  There"
-msgstr ""
-
-#: builtins.c:918
-msgid "are string operators as well, and numeric comparison operators."
-msgstr ""
-
-#: builtins.c:920
-msgid "File operators:"
-msgstr ""
-
-#: builtins.c:922
-msgid "    -a FILE        True if file exists."
-msgstr ""
-
-#: builtins.c:923
-msgid "    -b FILE        True if file is block special."
-msgstr ""
-
-#: builtins.c:924
-msgid "    -c FILE        True if file is character special."
-msgstr ""
-
-#: builtins.c:925
-msgid "    -d FILE        True if file is a directory."
-msgstr ""
-
-#: builtins.c:926
-msgid "    -e FILE        True if file exists."
-msgstr ""
-
-#: builtins.c:927
-msgid "    -f FILE        True if file exists and is a regular file."
-msgstr ""
-
-#: builtins.c:928
-msgid "    -g FILE        True if file is set-group-id."
-msgstr ""
-
-#: builtins.c:929
-msgid "    -h FILE        True if file is a symbolic link."
-msgstr ""
-
-#: builtins.c:930
-msgid "    -L FILE        True if file is a symbolic link."
-msgstr ""
-
-#: builtins.c:931
-msgid "    -k FILE        True if file has its `sticky' bit set."
-msgstr ""
-
-#: builtins.c:932
-msgid "    -p FILE        True if file is a named pipe."
-msgstr ""
-
-#: builtins.c:933
-msgid "    -r FILE        True if file is readable by you."
-msgstr ""
-
-#: builtins.c:934
-msgid "    -s FILE        True if file exists and is not empty."
-msgstr ""
-
-#: builtins.c:935
-msgid "    -S FILE        True if file is a socket."
-msgstr ""
-
-#: builtins.c:936
-msgid "    -t FD          True if FD is opened on a terminal."
-msgstr ""
-
-#: builtins.c:937
-msgid "    -u FILE        True if the file is set-user-id."
-msgstr ""
-
-#: builtins.c:938
-msgid "    -w FILE        True if the file is writable by you."
-msgstr ""
-
-#: builtins.c:939
-msgid "    -x FILE        True if the file is executable by you."
-msgstr ""
-
-#: builtins.c:940
-msgid "    -O FILE        True if the file is effectively owned by you."
-msgstr ""
-
-#: builtins.c:941
-msgid "    -G FILE        True if the file is effectively owned by your group."
-msgstr ""
-
-#: builtins.c:942
-msgid ""
-"    -N FILE        True if the file has been modified since it was last read."
-msgstr ""
-
-#: builtins.c:944
-msgid "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-msgstr ""
-
-#: builtins.c:945
-msgid "                   modification date)."
-msgstr ""
-
-#: builtins.c:947
-msgid "  FILE1 -ot FILE2  True if file1 is older than file2."
-msgstr ""
-
-#: builtins.c:949
-msgid "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-msgstr ""
-
-#: builtins.c:951
-msgid "String operators:"
-msgstr ""
-
-#: builtins.c:953
-msgid "    -z STRING      True if string is empty."
-msgstr ""
-
-#: builtins.c:955
-msgid "    -n STRING"
-msgstr ""
-
-#: builtins.c:956
-msgid "    STRING         True if string is not empty."
-msgstr ""
-
-#: builtins.c:958
-msgid "    STRING1 = STRING2"
-msgstr ""
-
-#: builtins.c:959
-msgid "                   True if the strings are equal."
-msgstr ""
-
-#: builtins.c:960
-msgid "    STRING1 != STRING2"
-msgstr ""
-
-#: builtins.c:961
-msgid "                   True if the strings are not equal."
-msgstr ""
-
-#: builtins.c:962
-msgid "    STRING1 < STRING2"
-msgstr ""
-
-#: builtins.c:963
-msgid ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-msgstr ""
-
-#: builtins.c:964
-msgid "    STRING1 > STRING2"
-msgstr ""
-
-#: builtins.c:965
-msgid ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-msgstr ""
-
-#: builtins.c:967
-msgid "Other operators:"
-msgstr ""
-
-#: builtins.c:969
-msgid "    -o OPTION      True if the shell option OPTION is enabled."
-msgstr ""
-
-#: builtins.c:970
-msgid "    ! EXPR         True if expr is false."
-msgstr ""
-
-#: builtins.c:971
-msgid "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-msgstr ""
-
-#: builtins.c:972
-msgid "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-msgstr ""
-
-#: builtins.c:974
-msgid "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-msgstr ""
-
-#: builtins.c:975
-msgid "                   -lt, -le, -gt, or -ge."
-msgstr ""
-
-#: builtins.c:977
-msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-msgstr ""
-
-#: builtins.c:978
-msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-msgstr ""
-
-#: builtins.c:979
-msgid "than ARG2."
-msgstr ""
-
-#: builtins.c:985
-msgid "This is a synonym for the \"test\" builtin, but the last"
-msgstr ""
-
-#: builtins.c:986
-msgid "argument must be a literal `]', to match the opening `['."
-msgstr ""
-
-#: builtins.c:992
-msgid "Print the accumulated user and system times for processes run from"
-msgstr ""
-
-#: builtins.c:993
-msgid "the shell."
-msgstr ""
-
-#: builtins.c:999
-msgid "The command ARG is to be read and executed when the shell receives"
-msgstr ""
-
-#: builtins.c:1000
-msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-msgstr ""
-
-#: builtins.c:1001
-msgid "reset to their original values.  If ARG is the null string each"
-msgstr ""
-
-#: builtins.c:1002
-msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-msgstr ""
-
-#: builtins.c:1003
-msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-msgstr ""
-
-#: builtins.c:1004
-msgid "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-msgstr ""
-
-#: builtins.c:1005
-msgid "command.  If ARG is `-p' then the trap commands associated with"
-msgstr ""
-
-#: builtins.c:1006
-msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-msgstr ""
-
-#: builtins.c:1007
-msgid "only `-p' is given, trap prints the list of commands associated with"
-msgstr ""
-
-#: builtins.c:1008
-msgid ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-msgstr ""
-
-#: builtins.c:1009
-msgid "or a signal number.  `trap -l' prints a list of signal names and their"
-msgstr ""
-
-#: builtins.c:1010
-msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-msgstr ""
-
-#: builtins.c:1011
-msgid "with \"kill -signal $$\"."
-msgstr ""
-
-#: builtins.c:1017
-msgid "For each NAME, indicate how it would be interpreted if used as a"
-msgstr ""
-
-#: builtins.c:1018
-msgid "command name."
-msgstr ""
-
-#: builtins.c:1020
-msgid "If the -t option is used, `type' outputs a single word which is one of"
-msgstr ""
-
-#: builtins.c:1021
-msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-msgstr ""
-
-#: builtins.c:1022
-msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
-msgstr ""
-
-#: builtins.c:1023
-msgid "or unfound, respectively."
-msgstr ""
-
-#: builtins.c:1025
-msgid "If the -p flag is used, `type' either returns the name of the disk"
-msgstr ""
-
-#: builtins.c:1026
-msgid "file that would be executed, or nothing if `type -t NAME' would not"
-msgstr ""
-
-#: builtins.c:1027
-msgid "return `file'."
-msgstr ""
-
-#: builtins.c:1029
-msgid "If the -a flag is used, `type' displays all of the places that contain"
-msgstr ""
-
-#: builtins.c:1030
-msgid "an executable named `file'.  This includes aliases, builtins, and"
-msgstr ""
-
-#: builtins.c:1031
-msgid "functions, if and only if the -p flag is not also used."
-msgstr ""
-
-#: builtins.c:1033
-msgid "The -f flag suppresses shell function lookup."
-msgstr ""
-
-#: builtins.c:1035
-msgid "The -P flag forces a PATH search for each NAME, even if it is an alias,"
-msgstr ""
-
-#: builtins.c:1036
-msgid "builtin, or function, and returns the name of the disk file that would"
-msgstr ""
-
-#: builtins.c:1037
-msgid "be executed."
-msgstr ""
-
-#: builtins.c:1044
-msgid "Ulimit provides control over the resources available to processes"
-msgstr ""
-
-#: builtins.c:1045
-msgid "started by the shell, on systems that allow such control.  If an"
-msgstr ""
-
-#: builtins.c:1046
-msgid "option is given, it is interpreted as follows:"
-msgstr ""
-
-#: builtins.c:1048
-msgid "    -S\tuse the `soft' resource limit"
-msgstr ""
-
-#: builtins.c:1049
-msgid "    -H\tuse the `hard' resource limit"
-msgstr ""
-
-#: builtins.c:1050
-msgid "    -a\tall current limits are reported"
-msgstr ""
-
-#: builtins.c:1051
-msgid "    -c\tthe maximum size of core files created"
-msgstr ""
-
-#: builtins.c:1052
-msgid "    -d\tthe maximum size of a process's data segment"
-msgstr ""
-
-#: builtins.c:1053
-msgid "    -f\tthe maximum size of files created by the shell"
-msgstr ""
-
-#: builtins.c:1054
-msgid "    -l\tthe maximum size a process may lock into memory"
-msgstr ""
-
-#: builtins.c:1055
-msgid "    -m\tthe maximum resident set size"
-msgstr ""
-
-#: builtins.c:1056
-msgid "    -n\tthe maximum number of open file descriptors"
-msgstr ""
-
-#: builtins.c:1057
-msgid "    -p\tthe pipe buffer size"
-msgstr ""
-
-#: builtins.c:1058
-msgid "    -s\tthe maximum stack size"
-msgstr ""
-
-#: builtins.c:1059
-msgid "    -t\tthe maximum amount of cpu time in seconds"
-msgstr ""
-
-#: builtins.c:1060
-msgid "    -u\tthe maximum number of user processes"
-msgstr ""
-
-#: builtins.c:1061
-msgid "    -v\tthe size of virtual memory"
-msgstr ""
-
-#: builtins.c:1063
-msgid "If LIMIT is given, it is the new value of the specified resource;"
-msgstr ""
-
-#: builtins.c:1064
-msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for"
-msgstr ""
-
-#: builtins.c:1065
-msgid ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-msgstr ""
-
-#: builtins.c:1066
-msgid "Otherwise, the current value of the specified resource is printed."
-msgstr ""
-
-#: builtins.c:1067
-msgid "If no option is given, then -f is assumed.  Values are in 1024-byte"
-msgstr ""
-
-#: builtins.c:1068
-msgid "increments, except for -t, which is in seconds, -p, which is in"
-msgstr ""
-
-#: builtins.c:1069
-msgid "increments of 512 bytes, and -u, which is an unscaled number of"
-msgstr ""
-
-#: builtins.c:1070
-msgid "processes."
-msgstr ""
-
-#: builtins.c:1077
-msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-msgstr ""
-
-#: builtins.c:1078
-msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-msgstr ""
-
-#: builtins.c:1079
-msgid "option makes the output symbolic; otherwise an octal number is output."
-msgstr ""
-
-#: builtins.c:1080
-msgid "If `-p' is supplied, and MODE is omitted, the output is in a form"
-msgstr ""
-
-#: builtins.c:1081
-msgid "that may be used as input.  If MODE begins with a digit, it is"
-msgstr ""
-
-#: builtins.c:1082
-msgid "interpreted as an octal number, otherwise it is a symbolic mode string"
-msgstr ""
-
-#: builtins.c:1083
-msgid "like that accepted by chmod(1)."
-msgstr ""
-
-#: builtins.c:1090 builtins.c:1102
-msgid "Wait for the specified process and report its termination status.  If"
-msgstr ""
-
-#: builtins.c:1091 builtins.c:1103
-msgid "N is not given, all currently active child processes are waited for,"
-msgstr ""
-
-#: builtins.c:1092
-msgid "and the return code is zero.  N may be a process ID or a job"
-msgstr ""
-
-#: builtins.c:1093
-msgid "specification; if a job spec is given, all processes in the job's"
-msgstr ""
-
-#: builtins.c:1094
-msgid "pipeline are waited for."
-msgstr ""
-
-#: builtins.c:1104
-msgid "and the return code is zero.  N is a process ID; if it is not given,"
-msgstr ""
-
-#: builtins.c:1105
-msgid "all child processes of the shell are waited for."
-msgstr ""
-
-#: builtins.c:1112
-msgid "The `for' loop executes a sequence of commands for each member in a"
-msgstr ""
-
-#: builtins.c:1113
-msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-msgstr ""
-
-#: builtins.c:1114
-msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
-msgstr ""
-
-#: builtins.c:1115
-msgid "the COMMANDS are executed."
-msgstr ""
-
-#: builtins.c:1121
-msgid "Equivalent to"
-msgstr ""
-
-#: builtins.c:1122
-msgid "\t(( EXP1 ))"
-msgstr ""
-
-#: builtins.c:1123
-msgid "\twhile (( EXP2 )); do"
-msgstr ""
-
-#: builtins.c:1124
-msgid "\t\tCOMMANDS"
-msgstr ""
-
-#: builtins.c:1125
-msgid "\t\t(( EXP3 ))"
-msgstr ""
-
-#: builtins.c:1126
-msgid "\tdone"
-msgstr ""
-
-#: builtins.c:1127
-msgid "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-msgstr ""
-
-#: builtins.c:1128
-msgid "omitted, it behaves as if it evaluates to 1."
-msgstr ""
-
-#: builtins.c:1134
-msgid "The WORDS are expanded, generating a list of words.  The"
-msgstr ""
-
-#: builtins.c:1135
-msgid "set of expanded words is printed on the standard error, each"
-msgstr ""
-
-#: builtins.c:1136
-msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-msgstr ""
-
-#: builtins.c:1137
-msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-msgstr ""
-
-#: builtins.c:1138
-msgid "from the standard input.  If the line consists of the number"
-msgstr ""
-
-#: builtins.c:1139
-msgid "corresponding to one of the displayed words, then NAME is set"
-msgstr ""
-
-#: builtins.c:1140
-msgid "to that word.  If the line is empty, WORDS and the prompt are"
-msgstr ""
-
-#: builtins.c:1141
-msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-msgstr ""
-
-#: builtins.c:1142
-msgid "value read causes NAME to be set to null.  The line read is saved"
-msgstr ""
-
-#: builtins.c:1143
-msgid "in the variable REPLY.  COMMANDS are executed after each selection"
-msgstr ""
-
-#: builtins.c:1144
-msgid "until a break command is executed."
-msgstr ""
-
-#: builtins.c:1150
-msgid "Execute PIPELINE and print a summary of the real time, user CPU time,"
-msgstr ""
-
-#: builtins.c:1151
-msgid "and system CPU time spent executing PIPELINE when it terminates."
-msgstr ""
-
-#: builtins.c:1152
-msgid "The return status is the return status of PIPELINE.  The `-p' option"
-msgstr ""
-
-#: builtins.c:1153
-msgid "prints the timing summary in a slightly different format.  This uses"
-msgstr ""
-
-#: builtins.c:1154
-msgid "the value of the TIMEFORMAT variable as the output format."
-msgstr ""
-
-#: builtins.c:1160
-msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-msgstr ""
-
-#: builtins.c:1161
-msgid "`|' is used to separate multiple patterns."
-msgstr ""
-
-#: builtins.c:1167
-msgid ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-msgstr ""
-
-#: builtins.c:1168
-msgid ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-msgstr ""
-
-#: builtins.c:1169
-msgid ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-msgstr ""
-
-#: builtins.c:1170
-msgid ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-msgstr ""
-
-#: builtins.c:1171
-msgid ""
-"are executed, if present.  The exit status is the exit status of the last"
-msgstr ""
-
-#: builtins.c:1172
-msgid "command executed, or zero if no condition tested true."
-msgstr ""
-
-#: builtins.c:1178 builtins.c:1185
-msgid "Expand and execute COMMANDS as long as the final command in the"
-msgstr ""
-
-#: builtins.c:1179
-msgid "`while' COMMANDS has an exit status of zero."
-msgstr ""
-
-#: builtins.c:1186
-msgid "`until' COMMANDS has an exit status which is not zero."
-msgstr ""
-
-#: builtins.c:1192
-msgid "Create a simple command invoked by NAME which runs COMMANDS."
-msgstr ""
-
-#: builtins.c:1193
-msgid "Arguments on the command line along with NAME are passed to the"
-msgstr ""
-
-#: builtins.c:1194
-msgid "function as $0 .. $n."
-msgstr ""
-
-#: builtins.c:1200
-msgid "Run a set of commands in a group.  This is one way to redirect an"
-msgstr ""
-
-#: builtins.c:1201
-msgid "entire set of commands."
-msgstr ""
-
-#: builtins.c:1207
-msgid "This is similar to the `fg' command.  Resume a stopped or background"
-msgstr ""
-
-#: builtins.c:1208
-msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-msgstr ""
-
-#: builtins.c:1209
-msgid "WORD, then the job whose name begins with WORD is used.  Following the"
-msgstr ""
-
-#: builtins.c:1210
-msgid "job specification with a `&' places the job in the background."
-msgstr ""
-
-#: builtins.c:1216
-msgid "The EXPRESSION is evaluated according to the rules for arithmetic"
-msgstr ""
-
-#: builtins.c:1217
-msgid "evaluation.  Equivalent to \"let EXPRESSION\"."
-msgstr ""
-
-#: builtins.c:1223
-msgid ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-msgstr ""
-
-#: builtins.c:1224
-msgid ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-msgstr ""
-
-#: builtins.c:1225
-msgid ""
-"by the `test' builtin, and may be combined using the following operators"
-msgstr ""
-
-#: builtins.c:1227
-msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-msgstr ""
-
-#: builtins.c:1228
-msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-msgstr ""
-
-#: builtins.c:1229
-msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-msgstr ""
-
-#: builtins.c:1230
-msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-msgstr ""
-
-#: builtins.c:1232
-msgid ""
-"When the `==' and `!=' operators are used, the string to the right of the"
-msgstr ""
-
-#: builtins.c:1233
-msgid "operator is used as a pattern and pattern matching is performed.  The"
-msgstr ""
-
-#: builtins.c:1234
-msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-msgstr ""
-
-#: builtins.c:1235
-msgid "determine the expression's value."
-msgstr ""
-
-#: builtins.c:1241
-msgid "BASH_VERSION    Version information for this Bash."
-msgstr ""
-
-#: builtins.c:1242
-msgid "CDPATH          A colon separated list of directories to search"
-msgstr ""
-
-#: builtins.c:1243
-msgid "\t\twhen the argument to `cd' is not found in the current"
-msgstr ""
-
-#: builtins.c:1244
-msgid "\t\tdirectory."
-msgstr ""
-
-#: builtins.c:1245
-msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-msgstr ""
-
-#: builtins.c:1246
-msgid "\t\tbe ignored by pathname expansion."
-msgstr ""
-
-#: builtins.c:1248
-msgid ""
-"HISTFILE        The name of the file where your command history is stored."
-msgstr ""
-
-#: builtins.c:1249
-msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-msgstr ""
-
-#: builtins.c:1250
-msgid "HISTSIZE        The maximum number of history lines that a running"
-msgstr ""
-
-#: builtins.c:1251
-msgid "\t\tshell can access."
-msgstr ""
-
-#: builtins.c:1253
-msgid "HOME            The complete pathname to your login directory."
-msgstr ""
-
-#: builtins.c:1254
-msgid "HOSTNAME\tThe name of the current host."
-msgstr ""
-
-#: builtins.c:1255
-msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-msgstr ""
-
-#: builtins.c:1256
-msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-msgstr ""
-
-#: builtins.c:1257
-msgid "\t\tcharacter as the sole input.  If set, then the value"
-msgstr ""
-
-#: builtins.c:1258
-msgid "\t\tof it is the number of EOF characters that can be seen"
-msgstr ""
-
-#: builtins.c:1259
-msgid "\t\tin a row on an empty line before the shell will exit"
-msgstr ""
-
-#: builtins.c:1260
-msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-msgstr ""
-
-#: builtins.c:1261
-msgid "MACHTYPE\tA string describing the current system Bash is running on."
-msgstr ""
-
-#: builtins.c:1262
-msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-msgstr ""
-
-#: builtins.c:1263
-msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-msgstr ""
-
-#: builtins.c:1264
-msgid "\t\tfor new mail."
-msgstr ""
-
-#: builtins.c:1265
-msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-msgstr ""
-
-#: builtins.c:1266
-msgid "PATH            A colon-separated list of directories to search when"
-msgstr ""
-
-#: builtins.c:1267
-msgid "\t\tlooking for commands."
-msgstr ""
-
-#: builtins.c:1268
-msgid "PROMPT_COMMAND  A command to be executed before the printing of each"
-msgstr ""
-
-#: builtins.c:1269
-msgid "\t\tprimary prompt."
-msgstr ""
-
-#: builtins.c:1270
-msgid "PS1             The primary prompt string."
-msgstr ""
-
-#: builtins.c:1271
-msgid "PS2             The secondary prompt string."
-msgstr ""
-
-#: builtins.c:1272
-msgid "PWD\t\tThe full pathname of the current directory."
-msgstr ""
-
-#: builtins.c:1273
-msgid "SHELLOPTS\tA colon-separated list of enabled shell options."
-msgstr ""
-
-#: builtins.c:1274
-msgid "TERM            The name of the current terminal type."
-msgstr ""
-
-#: builtins.c:1275
-msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-msgstr ""
-
-#: builtins.c:1276
-msgid "\t\t`time' reserved word."
-msgstr ""
-
-#: builtins.c:1277
-msgid "auto_resume     Non-null means a command word appearing on a line by"
-msgstr ""
-
-#: builtins.c:1278
-msgid "\t\titself is first looked for in the list of currently"
-msgstr ""
-
-#: builtins.c:1279
-msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-msgstr ""
-
-#: builtins.c:1280
-msgid "\t\tA value of `exact' means that the command word must"
-msgstr ""
-
-#: builtins.c:1281
-msgid "\t\texactly match a command in the list of stopped jobs.  A"
-msgstr ""
-
-#: builtins.c:1282
-msgid "\t\tvalue of `substring' means that the command word must"
-msgstr ""
-
-#: builtins.c:1283
-msgid "\t\tmatch a substring of the job.  Any other value means that"
-msgstr ""
-
-#: builtins.c:1284
-msgid "\t\tthe command must be a prefix of a stopped job."
-msgstr ""
-
-#: builtins.c:1287
-msgid "histchars       Characters controlling history expansion and quick"
-msgstr ""
-
-#: builtins.c:1288
-msgid "\t\tsubstitution.  The first character is the history"
-msgstr ""
-
-#: builtins.c:1289
-msgid "\t\tsubstitution character, usually `!'.  The second is"
-msgstr ""
-
-#: builtins.c:1290
-msgid "\t\tthe `quick substitution' character, usually `^'.  The"
-msgstr ""
-
-#: builtins.c:1291
-msgid "\t\tthird is the `history comment' character, usually `#'."
-msgstr ""
-
-#: builtins.c:1293
-msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-msgstr ""
-
-#: builtins.c:1294
-msgid "\t\tcommands should be saved on the history list."
-msgstr ""
-
-#: builtins.c:1306
-msgid "+N\tRotates the stack so that the Nth directory (counting"
-msgstr ""
-
-#: builtins.c:1307
-msgid "\tfrom the left of the list shown by `dirs', starting with"
-msgstr ""
-
-#: builtins.c:1308 builtins.c:1312
-msgid "\tzero) is at the top."
-msgstr ""
-
-#: builtins.c:1310
-msgid "-N\tRotates the stack so that the Nth directory (counting"
-msgstr ""
-
-#: builtins.c:1311
-msgid "\tfrom the right of the list shown by `dirs', starting with"
-msgstr ""
-
-#: builtins.c:1314
-msgid "-n\tsuppress the normal change of directory when adding directories"
-msgstr ""
-
-#: builtins.c:1315
-msgid "\tto the stack, so only the stack is manipulated."
-msgstr ""
-
-#: builtins.c:1317
-msgid "dir\tadds DIR to the directory stack at the top, making it the"
-msgstr ""
-
-#: builtins.c:1318
-msgid "\tnew current working directory."
-msgstr ""
-
-#: builtins.c:1332
-msgid "+N\tremoves the Nth entry counting from the left of the list"
-msgstr ""
-
-#: builtins.c:1333
-msgid "\tshown by `dirs', starting with zero.  For example: `popd +0'"
-msgstr ""
-
-#: builtins.c:1334
-msgid "\tremoves the first directory, `popd +1' the second."
-msgstr ""
-
-#: builtins.c:1336
-msgid "-N\tremoves the Nth entry counting from the right of the list"
-msgstr ""
-
-#: builtins.c:1337
-msgid "\tshown by `dirs', starting with zero.  For example: `popd -0'"
-msgstr ""
-
-#: builtins.c:1338
-msgid "\tremoves the last directory, `popd -1' the next to last."
-msgstr ""
-
-#: builtins.c:1340
-msgid "-n\tsuppress the normal change of directory when removing directories"
-msgstr ""
-
-#: builtins.c:1341
-msgid "\tfrom the stack, so only the stack is manipulated."
-msgstr ""
-
-#: builtins.c:1363
-msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
-msgstr ""
-
-#: builtins.c:1364 builtins.c:1367
-msgid "\tdirs when invoked without options, starting with zero."
-msgstr ""
-
-#: builtins.c:1366
-msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
-msgstr ""
-
-#: builtins.c:1374
-msgid "Toggle the values of variables controlling optional behavior."
-msgstr ""
-
-#: builtins.c:1375
-msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
-msgstr ""
-
-#: builtins.c:1376
-msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-msgstr ""
-
-#: builtins.c:1377
-msgid "status indicates whether each OPTNAME is set or unset.  The -o"
-msgstr ""
-
-#: builtins.c:1378
-msgid "option restricts the OPTNAMEs to those defined for use with"
-msgstr ""
-
-#: builtins.c:1379
-msgid "`set -o'.  With no options, or with the -p option, a list of all"
-msgstr ""
-
-#: builtins.c:1380
-msgid "settable options is displayed, with an indication of whether or"
-msgstr ""
-
-#: builtins.c:1381
-msgid "not each is set."
-msgstr ""
-
-#: builtins.c:1387
-msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-msgstr ""
-
-#: builtins.c:1388
-msgid "is a character string which contains three types of objects: plain"
-msgstr ""
-
-#: builtins.c:1389
-msgid ""
-"characters, which are simply copied to standard output, character escape"
-msgstr ""
-
-#: builtins.c:1390
-msgid "sequences which are converted and copied to the standard output, and"
-msgstr ""
-
-#: builtins.c:1391
-msgid ""
-"format specifications, each of which causes printing of the next successive"
-msgstr ""
-
-#: builtins.c:1392
-msgid "argument.  In addition to the standard printf(1) formats, %b means to"
-msgstr ""
-
-#: builtins.c:1393
-msgid "expand backslash escape sequences in the corresponding argument, and %q"
-msgstr ""
-
-#: builtins.c:1394
-msgid "means to quote the argument in a way that can be reused as shell input."
-msgstr ""
-
-#: builtins.c:1401
-msgid "For each NAME, specify how arguments are to be completed."
-msgstr ""
-
-#: builtins.c:1402
-msgid "If the -p option is supplied, or if no options are supplied, existing"
-msgstr ""
-
-#: builtins.c:1403
-msgid "completion specifications are printed in a way that allows them to be"
-msgstr ""
-
-#: builtins.c:1404
-msgid "reused as input.  The -r option removes a completion specification for"
+#: builtins.c:1393
+msgid ""
+" For each NAME, specify how arguments are to be completed.\n"
+"    If the -p option is supplied, or if no options are supplied, existing\n"
+"    completion specifications are printed in a way that allows them to be\n"
+"    reused as input.  The -r option removes a completion specification for\n"
+"    each NAME, or, if no NAMEs are supplied, all completion specifications."
 msgstr ""
 
 #: builtins.c:1405
-msgid "each NAME, or, if no NAMEs are supplied, all completion specifications."
-msgstr ""
-
-#: builtins.c:1413
-msgid "Display the possible completions depending on the options.  Intended"
-msgstr ""
-
-#: builtins.c:1414
 msgid ""
-"to be used from within a shell function generating possible completions."
-msgstr ""
-
-#: builtins.c:1415
-msgid "If the optional WORD argument is supplied, matches against WORD are"
-msgstr ""
-
-#: builtins.c:1416
-msgid "generated."
+" Display the possible completions depending on the options.  Intended\n"
+"    to be used from within a shell function generating possible "
+"completions.\n"
+"    If the optional WORD argument is supplied, matches against WORD are\n"
+"    generated."
 msgstr ""
diff --git a/po/builtins.pot b/po/builtins.pot
deleted file mode 100644 (file)
index e30179c..0000000
+++ /dev/null
@@ -1,2845 +0,0 @@
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:244
-msgid "`alias' with no arguments or with the -p option prints the list"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:245
-msgid "of aliases in the form alias NAME=VALUE on standard output."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:246
-msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:247
-msgid "A trailing space in VALUE causes the next word to be checked for"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:248
-msgid "alias substitution when the alias is expanded.  Alias returns"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:249
-msgid "true unless a NAME is given for which no alias has been defined."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:257
-msgid ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:258
-msgid "then remove all alias definitions."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:266
-msgid "Bind a key sequence to a Readline function or a macro, or set"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:267
-msgid "a Readline variable.  The non-option argument syntax is equivalent"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:268
-msgid "to that found in ~/.inputrc, but must be passed as a single argument:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:269
-msgid "bind '\"\\C-x\\C-r\": re-read-init-file'."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:270
-msgid "bind accepts the following options:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:271
-msgid ""
-"  -m  keymap         Use `keymap' as the keymap for the duration of this"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:272
-msgid "                     command.  Acceptable keymap names are emacs,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:273
-msgid ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:274
-msgid "                     vi-command, and vi-insert."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:275
-msgid "  -l                 List names of functions."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:276
-msgid "  -P                 List function names and bindings."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:277
-msgid "  -p                 List functions and bindings in a form that can be"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:278
-msgid "                     reused as input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:279
-msgid "  -r  keyseq         Remove the binding for KEYSEQ."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:280
-msgid "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:281
-msgid "\t\t\t\tKEYSEQ is entered."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:282
-msgid "  -f  filename       Read key bindings from FILENAME."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:283
-msgid "  -q  function-name  Query about which keys invoke the named function."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:284
-msgid ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:285
-msgid "  -V                 List variable names and values"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:286
-msgid "  -v                 List variable names and values in a form that can"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:287
-msgid "                     be reused as input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:288
-msgid ""
-"  -S                 List key sequences that invoke macros and their values"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:289
-msgid ""
-"  -s                 List key sequences that invoke macros and their values"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:290
-msgid "                     in a form that can be reused as input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:297
-msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:298
-msgid "break N levels."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:304
-msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:305
-msgid "If N is specified, resume at the N-th enclosing loop."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:311
-msgid "Run a shell builtin.  This is useful when you wish to rename a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:312
-msgid "shell builtin to be a function, but need the functionality of the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:313
-msgid "builtin within the function itself."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:320
-msgid "Returns the context of the current subroutine call."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:321
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:325
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:390
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:392
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:401
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:404
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:408
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:445
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:487
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:491
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:498
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:509
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:513
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:552
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:555
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:559
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:562
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:630
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:637
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:692
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:713
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:718
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:722
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:745
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:835
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:919
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:921
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:943
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:946
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:948
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:950
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:952
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:954
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:957
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:966
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:968
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:973
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:976
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1019
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1024
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1028
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1032
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1034
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1047
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1062
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1226
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1231
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1305
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1309
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1313
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1316
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1319
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1331
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1335
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1339
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1342
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1354
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1362
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1365
-msgid ""
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:322
-msgid "Without EXPR, returns returns \"$line $filename\".  With EXPR,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:323
-msgid "returns \"$line $subroutine $filename\"; this extra information"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:324
-msgid "can be used used to provide a stack trace."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:326
-msgid "The value of EXPR indicates how many call frames to go back before the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:327
-msgid "current one; the top frame is frame 0."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:334
-msgid "Change the current directory to DIR.  The variable $HOME is the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:335
-msgid "default DIR.  The variable CDPATH defines the search path for"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:336
-msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:337
-msgid "are separated by a colon (:).  A null directory name is the same as"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:338
-msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:339
-msgid "then CDPATH is not used.  If the directory is not found, and the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:340
-msgid "shell option `cdable_vars' is set, then try the word as a variable"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:341
-msgid "name.  If that variable has a value, then cd to the value of that"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:342
-msgid "variable.  The -P option says to use the physical directory structure"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:343
-msgid ""
-"instead of following symbolic links; the -L option forces symbolic links"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:344
-msgid "to be followed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:350
-msgid "Print the current working directory.  With the -P option, pwd prints"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:351
-msgid "the physical directory, without any symbolic links; the -L option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:352
-msgid "makes pwd follow symbolic links."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:358
-msgid "No effect; the command does nothing.  A zero exit code is returned."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:364
-msgid "Return a successful result."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:370
-msgid "Return an unsuccessful result."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:376
-msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:377
-msgid "function called `ls', and you wish to call the command `ls', you can"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:378
-msgid "say \"command ls\".  If the -p option is given, a default value is used"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:379
-msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:380
-msgid "the -V or -v option is given, a string is printed describing COMMAND."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:381
-msgid "The -V option produces a more verbose description."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:387
-msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:388
-msgid "given, then display the values of variables instead.  The -p option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:389
-msgid "will display the attributes and values of each NAME."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:391
-msgid "The flags are:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:393
-msgid "  -a\tto make NAMEs arrays (if supported)"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:394
-msgid "  -f\tto select from among function names only"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:395
-msgid ""
-"  -F\tto display function names (and line number and source file name if"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:396
-msgid "\tdebugging) without definitions"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:397
-msgid "  -i\tto make NAMEs have the `integer' attribute"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:398
-msgid "  -r\tto make NAMEs readonly"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:399
-msgid "  -t\tto make NAMEs have the `trace' attribute"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:400
-msgid "  -x\tto make NAMEs export"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:402
-msgid "Variables with the integer attribute have arithmetic evaluation (see"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:403
-msgid "`let') done when the variable is assigned to."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:405
-msgid "When displaying values of variables, -f displays a function's name"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:406
-msgid "and definition.  The -F option restricts the display to function"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:407
-msgid "name only."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:409
-msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:410
-msgid "used in a function, makes NAMEs local, as with the `local' command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:416
-msgid "Obsolete.  See `declare'."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:422
-msgid "Create a local variable called NAME, and give it VALUE.  LOCAL"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:423
-msgid "can only be used within a function; it makes the variable NAME"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:424
-msgid "have a visible scope restricted to that function and its children."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:431
-msgid "Output the ARGs.  If -n is specified, the trailing newline is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:432
-msgid "suppressed.  If the -e option is given, interpretation of the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:433
-msgid "following backslash-escaped characters is turned on:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:434
-msgid "\t\\a\talert (bell)"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:435
-msgid "\t\\b\tbackspace"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:436
-msgid "\t\\c\tsuppress trailing newline"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:437
-msgid "\t\\E\tescape character"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:438
-msgid "\t\\f\tform feed"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:439
-msgid "\t\\n\tnew line"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:440
-msgid "\t\\r\tcarriage return"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:441
-msgid "\t\\t\thorizontal tab"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:442
-msgid "\t\\v\tvertical tab"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:443
-msgid "\t\\\\\tbackslash"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:444
-msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:446
-msgid "You can explicitly turn off the interpretation of the above characters"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:447
-msgid "with the -E option."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:455
-msgid ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:462
-msgid "Enable and disable builtin shell commands.  This allows"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:463
-msgid "you to use a disk command which has the same name as a shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:464
-msgid "builtin without specifying a full pathname.  If -n is used, the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:465
-msgid "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:466
-msgid "to use the `test' found in $PATH instead of the shell builtin"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:467
-msgid "version, type `enable -n test'.  On systems supporting dynamic"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:468
-msgid "loading, the -f option may be used to load new builtins from the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:469
-msgid "shared object FILENAME.  The -d option will delete a builtin"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:470
-msgid "previously loaded with -f.  If no non-option names are given, or"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:471
-msgid "the -p option is supplied, a list of builtins is printed.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:472
-msgid "-a option means to print every builtin with an indication of whether"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:473
-msgid ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:474
-msgid ""
-"`special' builtins.  The -n option displays a list of all disabled builtins."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:480
-msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:486
-msgid "Getopts is used by shell procedures to parse positional parameters."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:488
-msgid "OPTSTRING contains the option letters to be recognized; if a letter"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:489
-msgid "is followed by a colon, the option is expected to have an argument,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:490
-msgid "which should be separated from it by white space."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:492
-msgid "Each time it is invoked, getopts will place the next option in the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:493
-msgid "shell variable $name, initializing name if it does not exist, and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:494
-msgid "the index of the next argument to be processed into the shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:495
-msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:496
-msgid "a shell script is invoked.  When an option requires an argument,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:497
-msgid "getopts places that argument into the shell variable OPTARG."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:499
-msgid "getopts reports errors in one of two ways.  If the first character"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:500
-msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:501
-msgid "this mode, no error messages are printed.  If an invalid option is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:502
-msgid "seen, getopts places the option character found into OPTARG.  If a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:503
-msgid "required argument is not found, getopts places a ':' into NAME and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:504
-msgid "sets OPTARG to the option character found.  If getopts is not in"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:505
-msgid "silent mode, and an invalid option is seen, getopts places '?' into"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:506
-msgid "NAME and unsets OPTARG.  If a required argument is not found, a '?'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:507
-msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:508
-msgid "printed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:510
-msgid "If the shell variable OPTERR has the value 0, getopts disables the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:511
-msgid "printing of error messages, even if the first character of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:512
-msgid "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:514
-msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:515
-msgid "more arguments are given, they are parsed instead."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:521
-msgid "Exec FILE, replacing this shell with the specified program."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:522
-msgid "If FILE is not specified, the redirections take effect in this"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:523
-msgid "shell.  If the first argument is `-l', then place a dash in the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:524
-msgid "zeroth arg passed to FILE, as login does.  If the `-c' option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:525
-msgid "is supplied, FILE is executed with a null environment.  The `-a'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:526
-msgid "option means to make set argv[0] of the executed process to NAME."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:527
-msgid "If the file cannot be executed and the shell is not interactive,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:528
-msgid "then the shell exits, unless the shell option `execfail' is set."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:534
-msgid "Exit the shell with a status of N.  If N is omitted, the exit status"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:535
-msgid "is that of the last command executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:541
-msgid "Logout of a login shell."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:548
-msgid ""
-"fc is used to list or edit and re-execute commands from the history list."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:549
-msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:550
-msgid "string, which means the most recent command beginning with that"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:551
-msgid "string."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:553
-msgid ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:554
-msgid "      then vi."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:556
-msgid "   -l means list lines instead of editing."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:557
-msgid "   -n means no line numbers listed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:558
-msgid ""
-"   -r means reverse the order of the lines (making it newest listed first)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:560
-msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:561
-msgid "re-executed after the substitution OLD=NEW is performed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:563
-msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:564
-msgid "runs the last command beginning with `cc' and typing `r' re-executes"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:565
-msgid "the last command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:573
-msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:574
-msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:575
-msgid "used."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:583
-msgid "Place JOB_SPEC in the background, as if it had been started with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:584
-msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:585
-msgid "job is used."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:592
-msgid "For each NAME, the full pathname of the command is determined and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:593
-msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:594
-msgid "full pathname of NAME, and no path search is performed.  The -r"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:595
-msgid "option causes the shell to forget all remembered locations.  The -d"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:596
-msgid "option causes the shell to forget the remembered location of each NAME."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:597
-msgid "If the -t option is supplied the full pathname to which each NAME"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:598
-msgid "corresponds is printed.  If multiple NAME arguments are supplied with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:599
-msgid "-t, the NAME is printed before the hashed full pathname.  The -l option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:600
-msgid "causes output to be displayed in a format that may be reused as input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:601
-msgid ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:608
-msgid "Display helpful information about builtin commands.  If PATTERN is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:609
-msgid "specified, gives detailed help on all commands matching PATTERN,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:610
-msgid "otherwise a list of the builtins is printed.  The -s option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:611
-msgid "restricts the output for each builtin command matching PATTERN to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:612
-msgid "a short usage synopsis."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:620
-msgid "Display the history list with line numbers.  Lines listed with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:621
-msgid "with a `*' have been modified.  Argument of N says to list only"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:622
-msgid "the last N lines.  The `-c' option causes the history list to be"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:623
-msgid "cleared by deleting all of the entries.  The `-d' option deletes"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:624
-msgid "the history entry at offset OFFSET.  The `-w' option writes out the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:625
-msgid "current history to the history file;  `-r' means to read the file and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:626
-msgid "append the contents to the history list instead.  `-a' means"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:627
-msgid "to append history lines from this session to the history file."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:628
-msgid "Argument `-n' means to read all history lines not already read"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:629
-msgid "from the history file and append them to the history list."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:631
-msgid "If FILENAME is given, then that is used as the history file else"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:632
-msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:633
-msgid "If the -s option is supplied, the non-option ARGs are appended to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:634
-msgid "the history list as a single entry.  The -p option means to perform"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:635
-msgid "history expansion on each ARG and display the result, without storing"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:636
-msgid "anything in the history list."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:638
-msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:639
-msgid "as a format string for strftime(3) to print the time stamp associated"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:640
-msgid ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:648
-msgid "Lists the active jobs.  The -l option lists process id's in addition"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:649
-msgid "to the normal information; the -p option lists process id's only."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:650
-msgid "If -n is given, only processes that have changed status since the last"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:651
-msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:652
-msgid "-r and -s options restrict output to running and stopped jobs only,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:653
-msgid "respectively.  Without options, the status of all active jobs is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:654
-msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:655
-msgid ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:656
-msgid "process group leader."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:664
-msgid ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:665
-msgid ""
-"If the -h option is given, the job is not removed from the table, but is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:666
-msgid "marked so that SIGHUP is not sent to the job if the shell receives a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:667
-msgid ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:668
-msgid ""
-"jobs from the job table; the -r option means to remove only running jobs."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:675
-msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:676
-msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:677
-msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:678
-msgid "be signal numbers for which names should be listed.  Kill is a shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:679
-msgid "builtin for two reasons: it allows job IDs to be used instead of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:680
-msgid "process IDs, and, if you have reached the limit on processes that"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:681
-msgid "you can create, you don't have to start a process to kill another one."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:687
-msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:688
-msgid "is done in fixed-width integers with no check for overflow, though"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:689
-msgid "division by 0 is trapped and flagged as an error.  The following"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:690
-msgid "list of operators is grouped into levels of equal-precedence operators."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:691
-msgid "The levels are listed in order of decreasing precedence."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:693
-msgid "\tid++, id--\tvariable post-increment, post-decrement"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:694
-msgid "\t++id, --id\tvariable pre-increment, pre-decrement"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:695
-msgid "\t-, +\t\tunary minus, plus"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:696
-msgid "\t!, ~\t\tlogical and bitwise negation"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:697
-msgid "\t**\t\texponentiation"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:698
-msgid "\t*, /, %\t\tmultiplication, division, remainder"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:699
-msgid "\t+, -\t\taddition, subtraction"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:700
-msgid "\t<<, >>\t\tleft and right bitwise shifts"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:701
-msgid "\t<=, >=, <, >\tcomparison"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:702
-msgid "\t==, !=\t\tequality, inequality"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:703
-msgid "\t&\t\tbitwise AND"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:704
-msgid "\t^\t\tbitwise XOR"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:705
-msgid "\t|\t\tbitwise OR"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:706
-msgid "\t&&\t\tlogical AND"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:707
-msgid "\t||\t\tlogical OR"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:708
-msgid "\texpr ? expr : expr"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:709
-msgid "\t\t\tconditional operator"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:710
-msgid "\t=, *=, /=, %=,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:711
-msgid "\t+=, -=, <<=, >>=,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:712
-msgid "\t&=, ^=, |=\tassignment"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:714
-msgid "Shell variables are allowed as operands.  The name of the variable"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:715
-msgid "is replaced by its value (coerced to a fixed-width integer) within"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:716
-msgid "an expression.  The variable need not have its integer attribute"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:717
-msgid "turned on to be used in an expression."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:719
-msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:720
-msgid "parentheses are evaluated first and may override the precedence"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:721
-msgid "rules above."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:723
-msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:724
-msgid "otherwise."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:730
-msgid ""
-"One line is read from the standard input, or from file descriptor FD if the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:731
-msgid ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:732
-msgid ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:733
-msgid ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:734
-msgid ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:735
-msgid "variable.  If the -r option is given, this signifies `raw' input, and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:736
-msgid "backslash escaping is disabled.  The -d option causes read to continue"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:737
-msgid ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:738
-msgid ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:739
-msgid ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:740
-msgid ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:741
-msgid ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:742
-msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:743
-msgid "characters have been read.  The -s option causes input coming from a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:744
-msgid "terminal to not be echoed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:746
-msgid ""
-"The -t option causes read to time out and return failure if a complete line"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:747
-msgid ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:748
-msgid ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:749
-msgid ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:750
-msgid "the argument to -u."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:756
-msgid "Causes a function to exit with the return value specified by N.  If N"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:757
-msgid "is omitted, the return status is that of the last command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:763
-msgid "    -a  Mark variables which are modified or created for export."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:764
-msgid "    -b  Notify of job termination immediately."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:765
-msgid "    -e  Exit immediately if a command exits with a non-zero status."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:766
-msgid "    -f  Disable file name generation (globbing)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:767
-msgid "    -h  Remember the location of commands as they are looked up."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:768
-msgid "    -k  All assignment arguments are placed in the environment for a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:769
-msgid "        command, not just those that precede the command name."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:770
-msgid "    -m  Job control is enabled."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:771
-msgid "    -n  Read commands but do not execute them."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:772
-msgid "    -o option-name"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:773
-msgid "        Set the variable corresponding to option-name:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:774
-msgid "            allexport    same as -a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:775
-msgid "            braceexpand  same as -B"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:777
-msgid "            emacs        use an emacs-style line editing interface"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:779
-msgid "            errexit      same as -e"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:780
-msgid "            errtrace     same as -E"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:781
-msgid "            functrace    same as -T"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:782
-msgid "            hashall      same as -h"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:784
-msgid "            histexpand   same as -H"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:787
-msgid "            history      enable command history"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:789
-msgid "            ignoreeof    the shell will not exit upon reading EOF"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:790
-msgid "            interactive-comments"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:791
-msgid ""
-"                         allow comments to appear in interactive commands"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:792
-msgid "            keyword      same as -k"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:793
-msgid "            monitor      same as -m"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:794
-msgid "            noclobber    same as -C"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:795
-msgid "            noexec       same as -n"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:796
-msgid "            noglob       same as -f"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:797
-msgid "            nolog        currently accepted but ignored"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:798
-msgid "            notify       same as -b"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:799
-msgid "            nounset      same as -u"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:800
-msgid "            onecmd       same as -t"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:801
-msgid "            physical     same as -P"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:802
-msgid ""
-"            pipefail     the return value of a pipeline is the status of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:803
-msgid ""
-"                         the last command to exit with a non-zero status,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:804
-msgid ""
-"                         or zero if no command exited with a non-zero status"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:805
-msgid "            posix        change the behavior of bash where the default"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:806
-msgid "                         operation differs from the 1003.2 standard to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:807
-msgid "                         match the standard"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:808
-msgid "            privileged   same as -p"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:809
-msgid "            verbose      same as -v"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:811
-msgid "            vi           use a vi-style line editing interface"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:813
-msgid "            xtrace       same as -x"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:814
-msgid ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:815
-msgid "        Disables processing of the $ENV file and importing of shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:816
-msgid ""
-"        functions.  Turning this option off causes the effective uid and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:817
-msgid "        gid to be set to the real uid and gid."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:818
-msgid "    -t  Exit after reading and executing one command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:819
-msgid "    -u  Treat unset variables as an error when substituting."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:820
-msgid "    -v  Print shell input lines as they are read."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:821
-msgid "    -x  Print commands and their arguments as they are executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:823
-msgid "    -B  the shell will perform brace expansion"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:825
-msgid "    -C  If set, disallow existing regular files to be overwritten"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:826
-msgid "        by redirection of output."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:827
-msgid "    -E  If set, the ERR trap is inherited by shell functions."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:829
-msgid "    -H  Enable ! style history substitution.  This flag is on"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:830
-msgid "        by default."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:832
-msgid "    -P  If set, do not follow symbolic links when executing commands"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:833
-msgid "        such as cd which change the current directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:834
-msgid "    -T  If set, the DEBUG trap is inherited by shell functions."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:836
-msgid "Using + rather than - causes these flags to be turned off.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:837
-msgid "flags can also be used upon invocation of the shell.  The current"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:838
-msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:839
-msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:840
-msgid "ARGs are given, all shell variables are printed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:846
-msgid "For each NAME, remove the corresponding variable or function.  Given"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:847
-msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:848
-msgid "unset will only act on functions.  With neither flag, unset first"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:849
-msgid "tries to unset a variable, and if that fails, then tries to unset a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:850
-msgid "function.  Some variables cannot be unset; also see readonly."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:856
-msgid "NAMEs are marked for automatic export to the environment of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:857
-msgid "subsequently executed commands.  If the -f option is given,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:858
-msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:859
-msgid "is given, a list of all names that are exported in this shell is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:860
-msgid "printed.  An argument of `-n' says to remove the export property"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:861
-msgid "from subsequent NAMEs.  An argument of `--' disables further option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:862
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:874
-msgid "processing."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:868
-msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:869
-msgid "not be changed by subsequent assignment.  If the -f option is given,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:870
-msgid "then functions corresponding to the NAMEs are so marked.  If no"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:871
-msgid "arguments are given, or if `-p' is given, a list of all readonly names"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:872
-msgid "is printed.  The `-a' option means to treat each NAME as"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:873
-msgid "an array variable.  An argument of `--' disables further option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:880
-msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:881
-msgid "not given, it is assumed to be 1."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:887
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:896
-msgid "Read and execute commands from FILENAME and return.  The pathnames"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:888
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:897
-msgid "in $PATH are used to find the directory containing FILENAME.  If any"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:889
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:898
-msgid "ARGUMENTS are supplied, they become the positional parameters when"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:890
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:899
-msgid "FILENAME is executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:906
-msgid "Suspend the execution of this shell until it receives a SIGCONT"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:907
-msgid "signal.  The `-f' if specified says not to complain about this"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:908
-msgid "being a login shell if it is; just suspend anyway."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:915
-msgid "Exits with a status of 0 (true) or 1 (false) depending on"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:916
-msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:917
-msgid "expressions are often used to examine the status of a file.  There"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:918
-msgid "are string operators as well, and numeric comparison operators."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:920
-msgid "File operators:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:922
-msgid "    -a FILE        True if file exists."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:923
-msgid "    -b FILE        True if file is block special."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:924
-msgid "    -c FILE        True if file is character special."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:925
-msgid "    -d FILE        True if file is a directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:926
-msgid "    -e FILE        True if file exists."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:927
-msgid "    -f FILE        True if file exists and is a regular file."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:928
-msgid "    -g FILE        True if file is set-group-id."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:929
-msgid "    -h FILE        True if file is a symbolic link."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:930
-msgid "    -L FILE        True if file is a symbolic link."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:931
-msgid "    -k FILE        True if file has its `sticky' bit set."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:932
-msgid "    -p FILE        True if file is a named pipe."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:933
-msgid "    -r FILE        True if file is readable by you."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:934
-msgid "    -s FILE        True if file exists and is not empty."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:935
-msgid "    -S FILE        True if file is a socket."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:936
-msgid "    -t FD          True if FD is opened on a terminal."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:937
-msgid "    -u FILE        True if the file is set-user-id."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:938
-msgid "    -w FILE        True if the file is writable by you."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:939
-msgid "    -x FILE        True if the file is executable by you."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:940
-msgid "    -O FILE        True if the file is effectively owned by you."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:941
-msgid "    -G FILE        True if the file is effectively owned by your group."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:942
-msgid ""
-"    -N FILE        True if the file has been modified since it was last read."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:944
-msgid "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:945
-msgid "                   modification date)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:947
-msgid "  FILE1 -ot FILE2  True if file1 is older than file2."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:949
-msgid "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:951
-msgid "String operators:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:953
-msgid "    -z STRING      True if string is empty."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:955
-msgid "    -n STRING"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:956
-msgid "    STRING         True if string is not empty."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:958
-msgid "    STRING1 = STRING2"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:959
-msgid "                   True if the strings are equal."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:960
-msgid "    STRING1 != STRING2"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:961
-msgid "                   True if the strings are not equal."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:962
-msgid "    STRING1 < STRING2"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:963
-msgid ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:964
-msgid "    STRING1 > STRING2"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:965
-msgid ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:967
-msgid "Other operators:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:969
-msgid "    -o OPTION      True if the shell option OPTION is enabled."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:970
-msgid "    ! EXPR         True if expr is false."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:971
-msgid "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:972
-msgid "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:974
-msgid "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:975
-msgid "                   -lt, -le, -gt, or -ge."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:977
-msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:978
-msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:979
-msgid "than ARG2."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:985
-msgid "This is a synonym for the \"test\" builtin, but the last"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:986
-msgid "argument must be a literal `]', to match the opening `['."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:992
-msgid "Print the accumulated user and system times for processes run from"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:993
-msgid "the shell."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:999
-msgid "The command ARG is to be read and executed when the shell receives"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1000
-msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1001
-msgid "reset to their original values.  If ARG is the null string each"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1002
-msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1003
-msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1004
-msgid "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1005
-msgid "command.  If ARG is `-p' then the trap commands associated with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1006
-msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1007
-msgid "only `-p' is given, trap prints the list of commands associated with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1008
-msgid ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1009
-msgid "or a signal number.  `trap -l' prints a list of signal names and their"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1010
-msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1011
-msgid "with \"kill -signal $$\"."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1017
-msgid "For each NAME, indicate how it would be interpreted if used as a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1018
-msgid "command name."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1020
-msgid "If the -t option is used, `type' outputs a single word which is one of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1021
-msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1022
-msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1023
-msgid "or unfound, respectively."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1025
-msgid "If the -p flag is used, `type' either returns the name of the disk"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1026
-msgid "file that would be executed, or nothing if `type -t NAME' would not"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1027
-msgid "return `file'."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1029
-msgid "If the -a flag is used, `type' displays all of the places that contain"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1030
-msgid "an executable named `file'.  This includes aliases, builtins, and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1031
-msgid "functions, if and only if the -p flag is not also used."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1033
-msgid "The -f flag suppresses shell function lookup."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1035
-msgid "The -P flag forces a PATH search for each NAME, even if it is an alias,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1036
-msgid "builtin, or function, and returns the name of the disk file that would"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1037
-msgid "be executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1044
-msgid "Ulimit provides control over the resources available to processes"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1045
-msgid "started by the shell, on systems that allow such control.  If an"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1046
-msgid "option is given, it is interpreted as follows:"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1048
-msgid "    -S\tuse the `soft' resource limit"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1049
-msgid "    -H\tuse the `hard' resource limit"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1050
-msgid "    -a\tall current limits are reported"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1051
-msgid "    -c\tthe maximum size of core files created"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1052
-msgid "    -d\tthe maximum size of a process's data segment"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1053
-msgid "    -f\tthe maximum size of files created by the shell"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1054
-msgid "    -l\tthe maximum size a process may lock into memory"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1055
-msgid "    -m\tthe maximum resident set size"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1056
-msgid "    -n\tthe maximum number of open file descriptors"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1057
-msgid "    -p\tthe pipe buffer size"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1058
-msgid "    -s\tthe maximum stack size"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1059
-msgid "    -t\tthe maximum amount of cpu time in seconds"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1060
-msgid "    -u\tthe maximum number of user processes"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1061
-msgid "    -v\tthe size of virtual memory"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1063
-msgid "If LIMIT is given, it is the new value of the specified resource;"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1064
-msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1065
-msgid ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1066
-msgid "Otherwise, the current value of the specified resource is printed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1067
-msgid "If no option is given, then -f is assumed.  Values are in 1024-byte"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1068
-msgid "increments, except for -t, which is in seconds, -p, which is in"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1069
-msgid "increments of 512 bytes, and -u, which is an unscaled number of"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1070
-msgid "processes."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1077
-msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1078
-msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1079
-msgid "option makes the output symbolic; otherwise an octal number is output."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1080
-msgid "If `-p' is supplied, and MODE is omitted, the output is in a form"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1081
-msgid "that may be used as input.  If MODE begins with a digit, it is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1082
-msgid "interpreted as an octal number, otherwise it is a symbolic mode string"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1083
-msgid "like that accepted by chmod(1)."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1090
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1102
-msgid "Wait for the specified process and report its termination status.  If"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1091
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1103
-msgid "N is not given, all currently active child processes are waited for,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1092
-msgid "and the return code is zero.  N may be a process ID or a job"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1093
-msgid "specification; if a job spec is given, all processes in the job's"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1094
-msgid "pipeline are waited for."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1104
-msgid "and the return code is zero.  N is a process ID; if it is not given,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1105
-msgid "all child processes of the shell are waited for."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1112
-msgid "The `for' loop executes a sequence of commands for each member in a"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1113
-msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1114
-msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1115
-msgid "the COMMANDS are executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1121
-msgid "Equivalent to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1122
-msgid "\t(( EXP1 ))"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1123
-msgid "\twhile (( EXP2 )); do"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1124
-msgid "\t\tCOMMANDS"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1125
-msgid "\t\t(( EXP3 ))"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1126
-msgid "\tdone"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1127
-msgid "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1128
-msgid "omitted, it behaves as if it evaluates to 1."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1134
-msgid "The WORDS are expanded, generating a list of words.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1135
-msgid "set of expanded words is printed on the standard error, each"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1136
-msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1137
-msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1138
-msgid "from the standard input.  If the line consists of the number"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1139
-msgid "corresponding to one of the displayed words, then NAME is set"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1140
-msgid "to that word.  If the line is empty, WORDS and the prompt are"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1141
-msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1142
-msgid "value read causes NAME to be set to null.  The line read is saved"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1143
-msgid "in the variable REPLY.  COMMANDS are executed after each selection"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1144
-msgid "until a break command is executed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1150
-msgid "Execute PIPELINE and print a summary of the real time, user CPU time,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1151
-msgid "and system CPU time spent executing PIPELINE when it terminates."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1152
-msgid "The return status is the return status of PIPELINE.  The `-p' option"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1153
-msgid "prints the timing summary in a slightly different format.  This uses"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1154
-msgid "the value of the TIMEFORMAT variable as the output format."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1160
-msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1161
-msgid "`|' is used to separate multiple patterns."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1167
-msgid ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1168
-msgid ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1169
-msgid ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1170
-msgid ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1171
-msgid ""
-"are executed, if present.  The exit status is the exit status of the last"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1172
-msgid "command executed, or zero if no condition tested true."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1178
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1185
-msgid "Expand and execute COMMANDS as long as the final command in the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1179
-msgid "`while' COMMANDS has an exit status of zero."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1186
-msgid "`until' COMMANDS has an exit status which is not zero."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1192
-msgid "Create a simple command invoked by NAME which runs COMMANDS."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1193
-msgid "Arguments on the command line along with NAME are passed to the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1194
-msgid "function as $0 .. $n."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1200
-msgid "Run a set of commands in a group.  This is one way to redirect an"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1201
-msgid "entire set of commands."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1207
-msgid "This is similar to the `fg' command.  Resume a stopped or background"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1208
-msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1209
-msgid "WORD, then the job whose name begins with WORD is used.  Following the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1210
-msgid "job specification with a `&' places the job in the background."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1216
-msgid "The EXPRESSION is evaluated according to the rules for arithmetic"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1217
-msgid "evaluation.  Equivalent to \"let EXPRESSION\"."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1223
-msgid ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1224
-msgid ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1225
-msgid ""
-"by the `test' builtin, and may be combined using the following operators"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1227
-msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1228
-msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1229
-msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1230
-msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1232
-msgid ""
-"When the `==' and `!=' operators are used, the string to the right of the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1233
-msgid "operator is used as a pattern and pattern matching is performed.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1234
-msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1235
-msgid "determine the expression's value."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1241
-msgid "BASH_VERSION    Version information for this Bash."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1242
-msgid "CDPATH          A colon separated list of directories to search"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1243
-msgid "\t\twhen the argument to `cd' is not found in the current"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1244
-msgid "\t\tdirectory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1245
-msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1246
-msgid "\t\tbe ignored by pathname expansion."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1248
-msgid ""
-"HISTFILE        The name of the file where your command history is stored."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1249
-msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1250
-msgid "HISTSIZE        The maximum number of history lines that a running"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1251
-msgid "\t\tshell can access."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1253
-msgid "HOME            The complete pathname to your login directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1254
-msgid "HOSTNAME\tThe name of the current host."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1255
-msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1256
-msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1257
-msgid "\t\tcharacter as the sole input.  If set, then the value"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1258
-msgid "\t\tof it is the number of EOF characters that can be seen"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1259
-msgid "\t\tin a row on an empty line before the shell will exit"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1260
-msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1261
-msgid "MACHTYPE\tA string describing the current system Bash is running on."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1262
-msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1263
-msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1264
-msgid "\t\tfor new mail."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1265
-msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1266
-msgid "PATH            A colon-separated list of directories to search when"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1267
-msgid "\t\tlooking for commands."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1268
-msgid "PROMPT_COMMAND  A command to be executed before the printing of each"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1269
-msgid "\t\tprimary prompt."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1270
-msgid "PS1             The primary prompt string."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1271
-msgid "PS2             The secondary prompt string."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1272
-msgid "PWD\t\tThe full pathname of the current directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1273
-msgid "SHELLOPTS\tA colon-separated list of enabled shell options."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1274
-msgid "TERM            The name of the current terminal type."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1275
-msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1276
-msgid "\t\t`time' reserved word."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1277
-msgid "auto_resume     Non-null means a command word appearing on a line by"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1278
-msgid "\t\titself is first looked for in the list of currently"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1279
-msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1280
-msgid "\t\tA value of `exact' means that the command word must"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1281
-msgid "\t\texactly match a command in the list of stopped jobs.  A"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1282
-msgid "\t\tvalue of `substring' means that the command word must"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1283
-msgid "\t\tmatch a substring of the job.  Any other value means that"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1284
-msgid "\t\tthe command must be a prefix of a stopped job."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1287
-msgid "histchars       Characters controlling history expansion and quick"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1288
-msgid "\t\tsubstitution.  The first character is the history"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1289
-msgid "\t\tsubstitution character, usually `!'.  The second is"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1290
-msgid "\t\tthe `quick substitution' character, usually `^'.  The"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1291
-msgid "\t\tthird is the `history comment' character, usually `#'."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1293
-msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1294
-msgid "\t\tcommands should be saved on the history list."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1302
-msgid "Adds a directory to the top of the directory stack, or rotates"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1303
-msgid "the stack, making the new top of the stack the current working"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1304
-msgid "directory.  With no arguments, exchanges the top two directories."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1306
-msgid "+N\tRotates the stack so that the Nth directory (counting"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1307
-msgid "\tfrom the left of the list shown by `dirs', starting with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1308
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1312
-msgid "\tzero) is at the top."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1310
-msgid "-N\tRotates the stack so that the Nth directory (counting"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1311
-msgid "\tfrom the right of the list shown by `dirs', starting with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1314
-msgid "-n\tsuppress the normal change of directory when adding directories"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1315
-msgid "\tto the stack, so only the stack is manipulated."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1317
-msgid "dir\tadds DIR to the directory stack at the top, making it the"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1318
-msgid "\tnew current working directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1320
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1343
-msgid "You can see the directory stack with the `dirs' command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1328
-msgid "Removes entries from the directory stack.  With no arguments,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1329
-msgid "removes the top directory from the stack, and cd's to the new"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1330
-msgid "top directory."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1332
-msgid "+N\tremoves the Nth entry counting from the left of the list"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1333
-msgid "\tshown by `dirs', starting with zero.  For example: `popd +0'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1334
-msgid "\tremoves the first directory, `popd +1' the second."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1336
-msgid "-N\tremoves the Nth entry counting from the right of the list"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1337
-msgid "\tshown by `dirs', starting with zero.  For example: `popd -0'"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1338
-msgid "\tremoves the last directory, `popd -1' the next to last."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1340
-msgid "-n\tsuppress the normal change of directory when removing directories"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1341
-msgid "\tfrom the stack, so only the stack is manipulated."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1351
-msgid "Display the list of currently remembered directories.  Directories"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1352
-msgid "find their way onto the list with the `pushd' command; you can get"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1353
-msgid "back up through the list with the `popd' command."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1355
-msgid "The -l flag specifies that `dirs' should not print shorthand versions"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1356
-msgid "of directories which are relative to your home directory.  This means"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1357
-msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1358
-msgid "causes `dirs' to print the directory stack with one entry per line,"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1359
-msgid "prepending the directory name with its position in the stack.  The -p"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1360
-msgid "flag does the same thing, but the stack position is not prepended."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1361
-msgid "The -c flag clears the directory stack by deleting all of the elements."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1363
-msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1364
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1367
-msgid "\tdirs when invoked without options, starting with zero."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1366
-msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1374
-msgid "Toggle the values of variables controlling optional behavior."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1375
-msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1376
-msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1377
-msgid "status indicates whether each OPTNAME is set or unset.  The -o"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1378
-msgid "option restricts the OPTNAMEs to those defined for use with"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1379
-msgid "`set -o'.  With no options, or with the -p option, a list of all"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1380
-msgid "settable options is displayed, with an indication of whether or"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1381
-msgid "not each is set."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1387
-msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1388
-msgid "is a character string which contains three types of objects: plain"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1389
-msgid ""
-"characters, which are simply copied to standard output, character escape"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1390
-msgid "sequences which are converted and copied to the standard output, and"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1391
-msgid ""
-"format specifications, each of which causes printing of the next successive"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1392
-msgid "argument.  In addition to the standard printf(1) formats, %b means to"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1393
-msgid "expand backslash escape sequences in the corresponding argument, and %q"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1394
-msgid "means to quote the argument in a way that can be reused as shell input."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1401
-msgid "For each NAME, specify how arguments are to be completed."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1402
-msgid "If the -p option is supplied, or if no options are supplied, existing"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1403
-msgid "completion specifications are printed in a way that allows them to be"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1404
-msgid "reused as input.  The -r option removes a completion specification for"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1405
-msgid "each NAME, or, if no NAMEs are supplied, all completion specifications."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1413
-msgid "Display the possible completions depending on the options.  Intended"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1414
-msgid ""
-"to be used from within a shell function generating possible completions."
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1415
-msgid "If the optional WORD argument is supplied, matches against WORD are"
-msgstr ""
-
-#: /usr/local/build/bash/bash-20031218/builtins/builtins.c:1416
-msgid "generated."
-msgstr ""
index 6a9c77b..dd5008c 100644 (file)
Binary files a/po/en@boldquot.gmo and b/po/en@boldquot.gmo differ
index 652c51b..b275554 100644 (file)
@@ -1,7 +1,7 @@
 # English translations for GNU bash package.
-# Copyright (C) 2004 Free Software Foundation, Inc.
+# Copyright (C) 2005 Free Software Foundation, Inc.
 # This file is distributed under the same license as the GNU bash package.
-# Automatically generated, 2004.
+# Automatically generated, 2005.
 #
 # All this catalog "translates" are quotation characters.
 # The msgids must be ASCII and therefore cannot contain real quotation
 # This catalog furthermore displays the text between the quotation marks in
 # bold face, assuming the VT100/XTerm escape sequences.
 #
-#: builtins/caller.def:128 builtins/caller.def:132 builtins/pushd.def:655
-#: builtins/pushd.def:663 builtins/pushd.def:666 builtins/pushd.def:676
-#: builtins/pushd.def:680 builtins/pushd.def:684 builtins/pushd.def:687
-#: builtins/pushd.def:690 builtins/pushd.def:699 builtins/pushd.def:703
-#: builtins/pushd.def:707 builtins/pushd.def:710 builtins.c:321 builtins.c:325
-#: builtins.c:390 builtins.c:392 builtins.c:401 builtins.c:404 builtins.c:408
-#: builtins.c:445 builtins.c:487 builtins.c:491 builtins.c:498 builtins.c:509
-#: builtins.c:513 builtins.c:552 builtins.c:555 builtins.c:559 builtins.c:562
-#: builtins.c:630 builtins.c:637 builtins.c:692 builtins.c:713 builtins.c:718
-#: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921
-#: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952
-#: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973
-#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028
-#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062
-#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309
-#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331
-#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354
-#: builtins.c:1362 builtins.c:1365
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bash 3.0-rc1\n"
-"POT-Creation-Date: 2003-12-22 15:34-0500\n"
-"PO-Revision-Date: 2003-12-22 15:34-0500\n"
+"Project-Id-Version: GNU bash 3.1-beta1\n"
+"POT-Creation-Date: 2005-10-03 17:31-0400\n"
+"PO-Revision-Date: 2005-10-03 17:31-0400\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Report-Msgid-Bugs-To: bug-bash@gnu.org\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: arrayfunc.c:45
+#: arrayfunc.c:48
 msgid "bad array subscript"
 msgstr "bad array subscript"
 
-#: arrayfunc.c:306
+#: arrayfunc.c:360
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: cannot assign to non-numeric index"
 
-#: bashhist.c:321
+#: bashhist.c:328
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: cannot create: %s"
 
-#: bashline.c:2791
+#: bashline.c:2947
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: cannot find keymap for command"
 
-#: bashline.c:2840
+#: bashline.c:2996
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: first non-whitespace character is not ‘\e[1m\"\e[0m’"
 
-#: bashline.c:2869
+#: bashline.c:3025
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no closing ‘\e[1m%c\e[0m’ in %s"
 
-#: bashline.c:2903
+#: bashline.c:3059
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: missing colon separator"
 
-#: builtins/alias.def:123
-#, c-format
-msgid "`%s': invalid alias name"
-msgstr "‘\e[1m%s\e[0m’: invalid alias name"
-
 #: builtins/bind.def:194
 #, c-format
 msgid "`%s': invalid keymap name"
@@ -131,48 +107,51 @@ msgstr "%s can be invoked via "
 msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr "only meaningful in a ‘\e[1mfor\e[0m’, ‘\e[1mwhile\e[0m’, or ‘\e[1muntil\e[0m’ loop"
 
-#: builtins/caller.def:127 builtins.c:320
+#: builtins/caller.def:132
 msgid "Returns the context of the current subroutine call."
 msgstr "Returns the context of the current subroutine call."
 
-#: builtins/caller.def:129 builtins.c:322
+#: builtins/caller.def:133 builtins/caller.def:137 builtins/pushd.def:660
+#: builtins/pushd.def:668 builtins/pushd.def:671 builtins/pushd.def:681
+#: builtins/pushd.def:685 builtins/pushd.def:689 builtins/pushd.def:692
+#: builtins/pushd.def:695 builtins/pushd.def:704 builtins/pushd.def:708
+#: builtins/pushd.def:712 builtins/pushd.def:715
+msgid " "
+msgstr " "
+
+#: builtins/caller.def:134
 msgid "Without EXPR, returns returns \"$line $filename\".  With EXPR,"
 msgstr "Without EXPR, returns returns “\e[1m$line $filename\e[0m”.  With EXPR,"
 
-#: builtins/caller.def:130 builtins.c:323
+#: builtins/caller.def:135
 msgid "returns \"$line $subroutine $filename\"; this extra information"
 msgstr "returns “\e[1m$line $subroutine $filename\e[0m”; this extra information"
 
-#: builtins/caller.def:131 builtins.c:324
+#: builtins/caller.def:136
 msgid "can be used used to provide a stack trace."
 msgstr "can be used used to provide a stack trace."
 
-#: builtins/caller.def:133 builtins.c:326
+#: builtins/caller.def:138
 msgid "The value of EXPR indicates how many call frames to go back before the"
 msgstr "The value of EXPR indicates how many call frames to go back before the"
 
-#: builtins/caller.def:134 builtins.c:327
+#: builtins/caller.def:139
 msgid "current one; the top frame is frame 0."
 msgstr "current one; the top frame is frame 0."
 
-#: builtins/cd.def:188
+#: builtins/cd.def:203
 msgid "HOME not set"
 msgstr "HOME not set"
 
-#: builtins/cd.def:200
+#: builtins/cd.def:215
 msgid "OLDPWD not set"
 msgstr "OLDPWD not set"
 
-#: builtins/cd.def:357
-#, c-format
-msgid "write error: %s"
-msgstr "write error: %s"
-
 #: builtins/common.c:133 test.c:921
 msgid "too many arguments"
 msgstr "too many arguments"
 
-#: builtins/common.c:157 shell.c:465 shell.c:737
+#: builtins/common.c:157 shell.c:474 shell.c:747
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: option requires an argument"
@@ -187,7 +166,7 @@ msgstr "%s: numeric argument required"
 msgid "%s: not found"
 msgstr "%s: not found"
 
-#: builtins/common.c:180 shell.c:750
+#: builtins/common.c:180 shell.c:760
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: invalid option"
@@ -197,7 +176,7 @@ msgstr "%s: invalid option"
 msgid "%s: invalid option name"
 msgstr "%s: invalid option name"
 
-#: builtins/common.c:194 general.c:229 general.c:234
+#: builtins/common.c:194 general.c:231 general.c:236
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "‘\e[1m%s\e[0m’: not a valid identifier"
@@ -264,12 +243,17 @@ msgstr "restricted"
 msgid "%s: not a shell builtin"
 msgstr "%s: not a shell builtin"
 
-#: builtins/common.c:486
+#: builtins/common.c:276
+#, c-format
+msgid "write error: %s"
+msgstr "write error: %s"
+
+#: builtins/common.c:484
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error retrieving current directory: %s: %s\n"
 
-#: builtins/common.c:553 builtins/common.c:555
+#: builtins/common.c:550 builtins/common.c:552
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ambiguous job spec"
@@ -296,16 +280,16 @@ msgstr "warning: -C option may not work as you expect"
 msgid "can only be used in a function"
 msgstr "can only be used in a function"
 
-#: builtins/declare.def:295
+#: builtins/declare.def:301
 msgid "cannot use `-f' to make functions"
 msgstr "cannot use ‘\e[1m-f\e[0m’ to make functions"
 
-#: builtins/declare.def:307 execute_cmd.c:3949
+#: builtins/declare.def:313 execute_cmd.c:3986
 #, c-format
 msgid "%s: readonly function"
 msgstr "%s: readonly function"
 
-#: builtins/declare.def:389
+#: builtins/declare.def:401
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: cannot destroy array variables in this way"
@@ -334,17 +318,17 @@ msgstr "%s: not dynamically loaded"
 msgid "%s: cannot delete: %s"
 msgstr "%s: cannot delete: %s"
 
-#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395
+#: builtins/evalfile.c:129 execute_cmd.c:3852 shell.c:1408
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is a directory"
 
-#: builtins/evalfile.c:133
+#: builtins/evalfile.c:134
 #, c-format
 msgid "%s: not a regular file"
 msgstr "%s: not a regular file"
 
-#: builtins/evalfile.c:141
+#: builtins/evalfile.c:142
 #, c-format
 msgid "%s: file is too large"
 msgstr "%s: file is too large"
@@ -362,20 +346,20 @@ msgstr "not login shell: use ‘\e[1mexit\e[0m’"
 msgid "There are stopped jobs.\n"
 msgstr "There are stopped jobs.\n"
 
-#: builtins/fc.def:252
+#: builtins/fc.def:259
 msgid "no command found"
 msgstr "no command found"
 
-#: builtins/fc.def:317
+#: builtins/fc.def:329
 msgid "history specification"
 msgstr "history specification"
 
-#: builtins/fc.def:338
+#: builtins/fc.def:350
 #, c-format
 msgid "%s: cannot open temp file: %s"
 msgstr "%s: cannot open temp file: %s"
 
-#: builtins/fg_bg.def:133
+#: builtins/fg_bg.def:149
 #, c-format
 msgid "job %d started without job control"
 msgstr "job %d started without job control"
@@ -440,15 +424,15 @@ msgstr ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 
-#: builtins/history.def:148
+#: builtins/history.def:150
 msgid "cannot use more than one of -anrw"
 msgstr "cannot use more than one of -anrw"
 
-#: builtins/history.def:180
+#: builtins/history.def:182
 msgid "history position"
 msgstr "history position"
 
-#: builtins/history.def:390
+#: builtins/history.def:400
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: history expansion failed"
@@ -462,212 +446,211 @@ msgstr "no other options allowed with ‘\e[1m-x\e[0m’"
 msgid "%s: arguments must be process or job IDs"
 msgstr "%s: arguments must be process or job IDs"
 
-#: builtins/kill.def:248
+#: builtins/kill.def:250
 msgid "Unknown error"
 msgstr "Unknown error"
 
-#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511
+#: builtins/let.def:94 builtins/let.def:119 expr.c:497 expr.c:512
 msgid "expression expected"
 msgstr "expression expected"
 
-#: builtins/printf.def:249
+#: builtins/printf.def:327
 #, c-format
 msgid "`%s': missing format character"
 msgstr "‘\e[1m%s\e[0m’: missing format character"
 
-#: builtins/printf.def:408
+#: builtins/printf.def:502
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "‘\e[1m%c\e[0m’: invalid format character"
 
-#: builtins/printf.def:601
+#: builtins/printf.def:708
 msgid "missing hex digit for \\x"
 msgstr "missing hex digit for \\x"
 
-#: builtins/pushd.def:168
+#: builtins/pushd.def:173
 msgid "no other directory"
 msgstr "no other directory"
 
-#: builtins/pushd.def:435
+#: builtins/pushd.def:440
 msgid "<no current directory>"
 msgstr "<no current directory>"
 
-#: builtins/pushd.def:652 builtins.c:1351
+#: builtins/pushd.def:657
 msgid "Display the list of currently remembered directories.  Directories"
 msgstr "Display the list of currently remembered directories.  Directories"
 
-#: builtins/pushd.def:653 builtins.c:1352
+#: builtins/pushd.def:658
 msgid "find their way onto the list with the `pushd' command; you can get"
 msgstr ""
 "find their way onto the list with the ‘\e[1mpushd\e[0m’ command; you can get"
 
-#: builtins/pushd.def:654 builtins.c:1353
+#: builtins/pushd.def:659
 msgid "back up through the list with the `popd' command."
 msgstr "back up through the list with the ‘\e[1mpopd\e[0m’ command."
 
-#: builtins/pushd.def:656 builtins.c:1355
+#: builtins/pushd.def:661
 msgid "The -l flag specifies that `dirs' should not print shorthand versions"
 msgstr ""
 "The -l flag specifies that ‘\e[1mdirs\e[0m’ should not print shorthand versions"
 
-#: builtins/pushd.def:657 builtins.c:1356
+#: builtins/pushd.def:662
 msgid "of directories which are relative to your home directory.  This means"
 msgstr "of directories which are relative to your home directory.  This means"
 
-#: builtins/pushd.def:658 builtins.c:1357
+#: builtins/pushd.def:663
 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
 msgstr ""
 "that ‘\e[1m~/bin\e[0m’ might be displayed as ‘\e[1m/homes/bfox/bin\e[0m’.  The -v "
 "flag"
 
-#: builtins/pushd.def:659 builtins.c:1358
+#: builtins/pushd.def:664
 msgid "causes `dirs' to print the directory stack with one entry per line,"
 msgstr ""
 "causes ‘\e[1mdirs\e[0m’ to print the directory stack with one entry per line,"
 
-#: builtins/pushd.def:660 builtins.c:1359
+#: builtins/pushd.def:665
 msgid "prepending the directory name with its position in the stack.  The -p"
 msgstr "prepending the directory name with its position in the stack.  The -p"
 
-#: builtins/pushd.def:661 builtins.c:1360
+#: builtins/pushd.def:666
 msgid "flag does the same thing, but the stack position is not prepended."
 msgstr "flag does the same thing, but the stack position is not prepended."
 
-#: builtins/pushd.def:662 builtins.c:1361
+#: builtins/pushd.def:667
 msgid "The -c flag clears the directory stack by deleting all of the elements."
 msgstr ""
 "The -c flag clears the directory stack by deleting all of the elements."
 
-#: builtins/pushd.def:664
+#: builtins/pushd.def:669
 msgid "+N   displays the Nth entry counting from the left of the list shown by"
 msgstr ""
 "+N   displays the Nth entry counting from the left of the list shown by"
 
-#: builtins/pushd.def:665 builtins/pushd.def:668
+#: builtins/pushd.def:670 builtins/pushd.def:673
 msgid "     dirs when invoked without options, starting with zero."
 msgstr "     dirs when invoked without options, starting with zero."
 
-#: builtins/pushd.def:667
+#: builtins/pushd.def:672
 msgid ""
 "-N   displays the Nth entry counting from the right of the list shown by"
 msgstr ""
 "-N   displays the Nth entry counting from the right of the list shown by"
 
-#: builtins/pushd.def:673 builtins.c:1302
+#: builtins/pushd.def:678
 msgid "Adds a directory to the top of the directory stack, or rotates"
 msgstr "Adds a directory to the top of the directory stack, or rotates"
 
-#: builtins/pushd.def:674 builtins.c:1303
+#: builtins/pushd.def:679
 msgid "the stack, making the new top of the stack the current working"
 msgstr "the stack, making the new top of the stack the current working"
 
-#: builtins/pushd.def:675 builtins.c:1304
+#: builtins/pushd.def:680
 msgid "directory.  With no arguments, exchanges the top two directories."
 msgstr "directory.  With no arguments, exchanges the top two directories."
 
-#: builtins/pushd.def:677
+#: builtins/pushd.def:682
 msgid "+N   Rotates the stack so that the Nth directory (counting"
 msgstr "+N   Rotates the stack so that the Nth directory (counting"
 
-#: builtins/pushd.def:678
+#: builtins/pushd.def:683
 msgid "     from the left of the list shown by `dirs', starting with"
 msgstr "     from the left of the list shown by ‘\e[1mdirs\e[0m’, starting with"
 
-#: builtins/pushd.def:679 builtins/pushd.def:683
+#: builtins/pushd.def:684 builtins/pushd.def:688
 msgid "     zero) is at the top."
 msgstr "     zero) is at the top."
 
-#: builtins/pushd.def:681
+#: builtins/pushd.def:686
 msgid "-N   Rotates the stack so that the Nth directory (counting"
 msgstr "-N   Rotates the stack so that the Nth directory (counting"
 
-#: builtins/pushd.def:682
+#: builtins/pushd.def:687
 msgid "     from the right of the list shown by `dirs', starting with"
 msgstr "     from the right of the list shown by ‘\e[1mdirs\e[0m’, starting with"
 
-#: builtins/pushd.def:685
+#: builtins/pushd.def:690
 msgid "-n   suppress the normal change of directory when adding directories"
 msgstr "-n   suppress the normal change of directory when adding directories"
 
-#: builtins/pushd.def:686
+#: builtins/pushd.def:691
 msgid "     to the stack, so only the stack is manipulated."
 msgstr "     to the stack, so only the stack is manipulated."
 
-#: builtins/pushd.def:688
+#: builtins/pushd.def:693
 msgid "dir  adds DIR to the directory stack at the top, making it the"
 msgstr "dir  adds DIR to the directory stack at the top, making it the"
 
-#: builtins/pushd.def:689
+#: builtins/pushd.def:694
 msgid "     new current working directory."
 msgstr "     new current working directory."
 
-#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320
-#: builtins.c:1343
+#: builtins/pushd.def:696 builtins/pushd.def:716
 msgid "You can see the directory stack with the `dirs' command."
 msgstr "You can see the directory stack with the ‘\e[1mdirs\e[0m’ command."
 
-#: builtins/pushd.def:696 builtins.c:1328
+#: builtins/pushd.def:701
 msgid "Removes entries from the directory stack.  With no arguments,"
 msgstr "Removes entries from the directory stack.  With no arguments,"
 
-#: builtins/pushd.def:697 builtins.c:1329
+#: builtins/pushd.def:702
 msgid "removes the top directory from the stack, and cd's to the new"
 msgstr "removes the top directory from the stack, and cd's to the new"
 
-#: builtins/pushd.def:698 builtins.c:1330
+#: builtins/pushd.def:703
 msgid "top directory."
 msgstr "top directory."
 
-#: builtins/pushd.def:700
+#: builtins/pushd.def:705
 msgid "+N   removes the Nth entry counting from the left of the list"
 msgstr "+N   removes the Nth entry counting from the left of the list"
 
-#: builtins/pushd.def:701
+#: builtins/pushd.def:706
 msgid "     shown by `dirs', starting with zero.  For example: `popd +0'"
 msgstr ""
 "     shown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd +0\e[0m’"
 
-#: builtins/pushd.def:702
+#: builtins/pushd.def:707
 msgid "     removes the first directory, `popd +1' the second."
 msgstr "     removes the first directory, ‘\e[1mpopd +1\e[0m’ the second."
 
-#: builtins/pushd.def:704
+#: builtins/pushd.def:709
 msgid "-N   removes the Nth entry counting from the right of the list"
 msgstr "-N   removes the Nth entry counting from the right of the list"
 
-#: builtins/pushd.def:705
+#: builtins/pushd.def:710
 msgid "     shown by `dirs', starting with zero.  For example: `popd -0'"
 msgstr ""
 "     shown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd -0\e[0m’"
 
-#: builtins/pushd.def:706
+#: builtins/pushd.def:711
 msgid "     removes the last directory, `popd -1' the next to last."
 msgstr "     removes the last directory, ‘\e[1mpopd -1\e[0m’ the next to last."
 
-#: builtins/pushd.def:708
+#: builtins/pushd.def:713
 msgid "-n   suppress the normal change of directory when removing directories"
 msgstr "-n   suppress the normal change of directory when removing directories"
 
-#: builtins/pushd.def:709
+#: builtins/pushd.def:714
 msgid "     from the stack, so only the stack is manipulated."
 msgstr "     from the stack, so only the stack is manipulated."
 
-#: builtins/read.def:207
+#: builtins/read.def:211
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: invalid timeout specification"
 
-#: builtins/read.def:230
+#: builtins/read.def:234
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: invalid file descriptor specification"
 
-#: builtins/read.def:237
+#: builtins/read.def:241
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: invalid file descriptor: %s"
 
-#: builtins/read.def:463
+#: builtins/read.def:474
 #, c-format
 msgid "read error: %d: %s"
 msgstr "read error: %d: %s"
@@ -676,26 +659,26 @@ msgstr "read error: %d: %s"
 msgid "can only `return' from a function or sourced script"
 msgstr "can only ‘\e[1mreturn\e[0m’ from a function or sourced script"
 
-#: builtins/set.def:743
+#: builtins/set.def:745
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "cannot simultaneously unset a function and a variable"
 
-#: builtins/set.def:780
+#: builtins/set.def:782
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: cannot unset"
 
-#: builtins/set.def:787
+#: builtins/set.def:789
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: cannot unset: readonly %s"
 
-#: builtins/set.def:798
+#: builtins/set.def:800
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: not an array variable"
 
-#: builtins/setattr.def:165
+#: builtins/setattr.def:166
 #, c-format
 msgid "%s: not a function"
 msgstr "%s: not a function"
@@ -704,11 +687,11 @@ msgstr "%s: not a function"
 msgid "shift count"
 msgstr "shift count"
 
-#: builtins/shopt.def:226
+#: builtins/shopt.def:227
 msgid "cannot set and unset shell options simultaneously"
 msgstr "cannot set and unset shell options simultaneously"
 
-#: builtins/shopt.def:291
+#: builtins/shopt.def:292
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: invalid shell option name"
@@ -730,52 +713,52 @@ msgstr "cannot suspend"
 msgid "cannot suspend a login shell"
 msgstr "cannot suspend a login shell"
 
-#: builtins/type.def:231
+#: builtins/type.def:232
 #, c-format
 msgid "%s is aliased to `%s'\n"
 msgstr "%s is aliased to ‘\e[1m%s\e[0m’\n"
 
-#: builtins/type.def:252
+#: builtins/type.def:253
 #, c-format
 msgid "%s is a shell keyword\n"
 msgstr "%s is a shell keyword\n"
 
-#: builtins/type.def:272
+#: builtins/type.def:273
 #, c-format
 msgid "%s is a function\n"
 msgstr "%s is a function\n"
 
-#: builtins/type.def:297
+#: builtins/type.def:298
 #, c-format
 msgid "%s is a shell builtin\n"
 msgstr "%s is a shell builtin\n"
 
-#: builtins/type.def:318
+#: builtins/type.def:319
 #, c-format
 msgid "%s is %s\n"
 msgstr "%s is %s\n"
 
-#: builtins/type.def:338
+#: builtins/type.def:339
 #, c-format
 msgid "%s is hashed (%s)\n"
 msgstr "%s is hashed (%s)\n"
 
-#: builtins/ulimit.def:332
+#: builtins/ulimit.def:344
 #, c-format
 msgid "%s: invalid limit argument"
 msgstr "%s: invalid limit argument"
 
-#: builtins/ulimit.def:358
+#: builtins/ulimit.def:370
 #, c-format
 msgid "`%c': bad command"
 msgstr "‘\e[1m%c\e[0m’: bad command"
 
-#: builtins/ulimit.def:387
+#: builtins/ulimit.def:399
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: cannot get limit: %s"
 
-#: builtins/ulimit.def:425
+#: builtins/ulimit.def:437
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: cannot modify limit: %s"
@@ -789,7 +772,7 @@ msgstr "octal number"
 msgid "`%c': invalid symbolic mode operator"
 msgstr "‘\e[1m%c\e[0m’: invalid symbolic mode operator"
 
-#: builtins/umask.def:279
+#: builtins/umask.def:281
 #, c-format
 msgid "`%c': invalid symbolic mode character"
 msgstr "‘\e[1m%c\e[0m’: invalid symbolic mode character"
@@ -829,11 +812,11 @@ msgstr "bad jump"
 msgid "%s: unbound variable"
 msgstr "%s: unbound variable"
 
-#: eval.c:175
+#: eval.c:176
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atimed out waiting for input: auto-logout\n"
 
-#: execute_cmd.c:466
+#: execute_cmd.c:471
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "cannot redirect standard input from /dev/null: %s"
@@ -843,88 +826,88 @@ msgstr "cannot redirect standard input from /dev/null: %s"
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: ‘\e[1m%c\e[0m’: invalid format character"
 
-#: execute_cmd.c:3521
+#: execute_cmd.c:3551
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restricted: cannot specify ‘\e[1m/\e[0m’ in command names"
 
-#: execute_cmd.c:3609
+#: execute_cmd.c:3639
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: command not found"
 
-#: execute_cmd.c:3839
+#: execute_cmd.c:3876
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: bad interpreter"
 
-#: execute_cmd.c:3876
+#: execute_cmd.c:3913
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: cannot execute binary file"
 
-#: execute_cmd.c:3988
+#: execute_cmd.c:4025
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "cannot duplicate fd %d to fd %d"
 
-#: expr.c:239
+#: expr.c:240
 msgid "expression recursion level exceeded"
 msgstr "expression recursion level exceeded"
 
-#: expr.c:263
+#: expr.c:264
 msgid "recursion stack underflow"
 msgstr "recursion stack underflow"
 
-#: expr.c:374
+#: expr.c:375
 msgid "syntax error in expression"
 msgstr "syntax error in expression"
 
-#: expr.c:414
+#: expr.c:415
 msgid "attempted assignment to non-variable"
 msgstr "attempted assignment to non-variable"
 
-#: expr.c:435 expr.c:440 expr.c:750
+#: expr.c:436 expr.c:441 expr.c:751
 msgid "division by 0"
 msgstr "division by 0"
 
-#: expr.c:466
+#: expr.c:467
 msgid "bug: bad expassign token"
 msgstr "bug: bad expassign token"
 
-#: expr.c:508
+#: expr.c:509
 msgid "`:' expected for conditional expression"
 msgstr "‘\e[1m:\e[0m’ expected for conditional expression"
 
-#: expr.c:775
+#: expr.c:776
 msgid "exponent less than 0"
 msgstr "exponent less than 0"
 
-#: expr.c:819
+#: expr.c:821
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifier expected after pre-increment or pre-decrement"
 
-#: expr.c:847
+#: expr.c:849
 msgid "missing `)'"
 msgstr "missing ‘\e[1m)\e[0m’"
 
-#: expr.c:871
+#: expr.c:892
 msgid "syntax error: operand expected"
 msgstr "syntax error: operand expected"
 
-#: expr.c:1146
+#: expr.c:1178
 msgid "invalid number"
 msgstr "invalid number"
 
-#: expr.c:1150
+#: expr.c:1182
 msgid "invalid arithmetic base"
 msgstr "invalid arithmetic base"
 
-#: expr.c:1170
+#: expr.c:1202
 msgid "value too great for base"
 msgstr "value too great for base"
 
-#: general.c:60
+#: general.c:62
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: cannot access parent directories"
 
@@ -938,42 +921,42 @@ msgstr "cannot allocate new file descriptor for bash input from fd %d"
 msgid "save_bash_input: buffer already exists for new fd %d"
 msgstr "save_bash_input: buffer already exists for new fd %d"
 
-#: jobs.c:693
+#: jobs.c:923
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "deleting stopped job %d with process group %ld"
 
-#: jobs.c:1001
+#: jobs.c:1308
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no such pid"
 
-#: jobs.c:1632 nojobs.c:648
+#: jobs.c:1981 nojobs.c:648
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld is not a child of this shell"
 
-#: jobs.c:1815
+#: jobs.c:2180
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: No record of process %ld"
 
-#: jobs.c:2062
+#: jobs.c:2435
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: job %d is stopped"
 
-#: jobs.c:2284
+#: jobs.c:2657
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: job has terminated"
 
-#: jobs.c:2293
+#: jobs.c:2666
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: job %d already in background"
 
-#: jobs.c:3037
+#: jobs.c:3452
 msgid "no job control in this shell"
 msgstr "no job control in this shell"
 
@@ -1085,139 +1068,139 @@ msgstr "%s: bad network path specification"
 msgid "network operations not supported"
 msgstr "network operations not supported"
 
-#: mailcheck.c:382
+#: mailcheck.c:386
 msgid "You have mail in $_"
 msgstr "You have mail in $_"
 
-#: mailcheck.c:407
+#: mailcheck.c:411
 msgid "You have new mail in $_"
 msgstr "You have new mail in $_"
 
-#: mailcheck.c:423
+#: mailcheck.c:427
 #, c-format
 msgid "The mail in %s has been read\n"
 msgstr "The mail in %s has been read\n"
 
-#: make_cmd.c:318
+#: make_cmd.c:322
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: arithmetic expression required"
 
-#: make_cmd.c:320
+#: make_cmd.c:324
 msgid "syntax error: `;' unexpected"
 msgstr "syntax error: ‘\e[1m;\e[0m’ unexpected"
 
-#: make_cmd.c:321
+#: make_cmd.c:325
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntax error: ‘\e[1m((%s))\e[0m’"
 
-#: make_cmd.c:560
+#: make_cmd.c:566
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: bad instruction type %d"
 
-#: make_cmd.c:730
+#: make_cmd.c:736
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: redirection instruction ‘\e[1m%d\e[0m’ out of range"
 
-#: parse.y:2726
+#: parse.y:2747
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "unexpected EOF while looking for matching ‘\e[1m%c\e[0m’"
 
-#: parse.y:3011
+#: parse.y:3043
 msgid "unexpected EOF while looking for `]]'"
 msgstr "unexpected EOF while looking for ‘\e[1m]]\e[0m’"
 
-#: parse.y:3016
+#: parse.y:3048
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error in conditional expression: unexpected token ‘\e[1m%s\e[0m’"
 
-#: parse.y:3020
+#: parse.y:3052
 msgid "syntax error in conditional expression"
 msgstr "syntax error in conditional expression"
 
-#: parse.y:3098
+#: parse.y:3130
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "unexpected token ‘\e[1m%s\e[0m’, expected ‘\e[1m)\e[0m’"
 
-#: parse.y:3102
+#: parse.y:3134
 msgid "expected `)'"
 msgstr "expected ‘\e[1m)\e[0m’"
 
-#: parse.y:3130
+#: parse.y:3162
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "unexpected argument ‘\e[1m%s\e[0m’ to conditional unary operator"
 
-#: parse.y:3134
+#: parse.y:3166
 msgid "unexpected argument to conditional unary operator"
 msgstr "unexpected argument to conditional unary operator"
 
-#: parse.y:3171
+#: parse.y:3203
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "unexpected token ‘\e[1m%s\e[0m’, conditional binary operator expected"
 
-#: parse.y:3175
+#: parse.y:3207
 msgid "conditional binary operator expected"
 msgstr "conditional binary operator expected"
 
-#: parse.y:3191
+#: parse.y:3223
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "unexpected argument ‘\e[1m%s\e[0m’ to conditional binary operator"
 
-#: parse.y:3195
+#: parse.y:3227
 msgid "unexpected argument to conditional binary operator"
 msgstr "unexpected argument to conditional binary operator"
 
-#: parse.y:3206
+#: parse.y:3238
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "unexpected token ‘\e[1m%c\e[0m’ in conditional command"
 
-#: parse.y:3209
+#: parse.y:3241
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "unexpected token ‘\e[1m%s\e[0m’ in conditional command"
 
-#: parse.y:3213
+#: parse.y:3245
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "unexpected token %d in conditional command"
 
-#: parse.y:4400
+#: parse.y:4461
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntax error near unexpected token ‘\e[1m%s\e[0m’"
 
-#: parse.y:4418
+#: parse.y:4479
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntax error near ‘\e[1m%s\e[0m’"
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: unexpected end of file"
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error"
 msgstr "syntax error"
 
-#: parse.y:4490
+#: parse.y:4551
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use “\e[1m%s\e[0m” to leave the shell.\n"
 
-#: parse.y:4649
+#: parse.y:4710
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "unexpected EOF while looking for matching ‘\e[1m)\e[0m’"
 
-#: pcomplete.c:988
+#: pcomplete.c:1001
 #, c-format
 msgid "completion: function `%s' not found"
 msgstr "completion: function ‘\e[1m%s\e[0m’ not found"
@@ -1227,12 +1210,12 @@ msgstr "completion: function ‘\e[1m%s\e[0m’ not found"
 msgid "progcomp_insert: %s: NULL COMPSPEC"
 msgstr "progcomp_insert: %s: NULL COMPSPEC"
 
-#: print_cmd.c:260
+#: print_cmd.c:264
 #, c-format
 msgid "print_command: bad connector `%d'"
 msgstr "print_command: bad connector ‘\e[1m%d\e[0m’"
 
-#: print_cmd.c:1172
+#: print_cmd.c:1236
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ‘\e[1m%c\e[0m’: invalid format character"
@@ -1265,28 +1248,28 @@ msgstr "cannot create temp file for here document: %s"
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port not supported without networking"
 
-#: redir.c:949
+#: redir.c:956
 msgid "redirection error: cannot duplicate fd"
 msgstr "redirection error: cannot duplicate fd"
 
-#: shell.c:302
+#: shell.c:309
 msgid "could not find /tmp, please create!"
 msgstr "could not find /tmp, please create!"
 
-#: shell.c:306
+#: shell.c:313
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp must be a valid directory name"
 
-#: shell.c:839
+#: shell.c:849
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: invalid option"
 
-#: shell.c:1590
+#: shell.c:1598
 msgid "I have no name!"
 msgstr "I have no name!"
 
-#: shell.c:1725
+#: shell.c:1733
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1295,116 +1278,116 @@ msgstr ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 
-#: shell.c:1727
+#: shell.c:1735
 msgid "GNU long options:\n"
 msgstr "GNU long options:\n"
 
-#: shell.c:1731
+#: shell.c:1739
 msgid "Shell options:\n"
 msgstr "Shell options:\n"
 
-#: shell.c:1732
+#: shell.c:1740
 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 
-#: shell.c:1747
+#: shell.c:1755
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s or -o option\n"
 
-#: shell.c:1753
+#: shell.c:1761
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Type ‘\e[1m%s -c “\e[1mhelp set\e[0m”\e[0m’ for more information about shell "
 "options.\n"
 
-#: shell.c:1754
+#: shell.c:1762
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Type ‘\e[1m%s -c help\e[0m’ for more information about shell builtin commands.\n"
 
-#: shell.c:1755
+#: shell.c:1763
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use the ‘\e[1mbashbug\e[0m’ command to report bugs.\n"
 
-#: sig.c:485
+#: sig.c:494
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: invalid operation"
 
-#: subst.c:1011
+#: subst.c:1123
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "bad substitution: no closing ‘\e[1m%s\e[0m’ in %s"
 
-#: subst.c:2020
+#: subst.c:2269
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: cannot assign list to array member"
 
-#: subst.c:3516 subst.c:3532
+#: subst.c:4208 subst.c:4224
 msgid "cannot make pipe for process substitution"
 msgstr "cannot make pipe for process substitution"
 
-#: subst.c:3563
+#: subst.c:4255
 msgid "cannot make child for process substitution"
 msgstr "cannot make child for process substitution"
 
-#: subst.c:3608
+#: subst.c:4300
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "cannot open named pipe %s for reading"
 
-#: subst.c:3610
+#: subst.c:4302
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "cannot open named pipe %s for writing"
 
-#: subst.c:3618
+#: subst.c:4310
 #, c-format
 msgid "cannout reset nodelay mode for fd %d"
 msgstr "cannout reset nodelay mode for fd %d"
 
-#: subst.c:3628
+#: subst.c:4320
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "cannot duplicate named pipe %s as fd %d"
 
-#: subst.c:3803
+#: subst.c:4495
 msgid "cannot make pipe for command substitution"
 msgstr "cannot make pipe for command substitution"
 
-#: subst.c:3832
+#: subst.c:4531
 msgid "cannot make child for command substitution"
 msgstr "cannot make child for command substitution"
 
-#: subst.c:3849
+#: subst.c:4548
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: cannot duplicate pipe as fd 1"
 
-#: subst.c:4284
+#: subst.c:5013
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter null or not set"
 
-#: subst.c:4529
+#: subst.c:5287
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expression < 0"
 
-#: subst.c:5209
+#: subst.c:6058
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: bad substitution"
 
-#: subst.c:5283
+#: subst.c:6134
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: cannot assign in this way"
 
-#: subst.c:6652
+#: subst.c:7687
 #, c-format
 msgid "no match: %s"
 msgstr "no match: %s"
@@ -1462,49 +1445,49 @@ msgstr ""
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: bad signal %d"
 
-#: variables.c:310
+#: variables.c:320
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error importing function definition for ‘\e[1m%s\e[0m’"
 
-#: variables.c:670
+#: variables.c:692
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell level (%d) too high, resetting to 1"
 
-#: variables.c:1610
+#: variables.c:1651
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2709
+#: variables.c:2807
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no function context at current scope"
 
-#: variables.c:2923 variables.c:2932
+#: variables.c:3021 variables.c:3030
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "invalid character %d in exportstr for %s"
 
-#: variables.c:2938
+#: variables.c:3036
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no ‘\e[1m=\e[0m’ in exportstr for %s"
 
-#: variables.c:3363
+#: variables.c:3463
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
-#: variables.c:3376
+#: variables.c:3476
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
-#: variables.c:3442
+#: variables.c:3548
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
 #: version.c:82
-msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n"
-msgstr "Copyright (C) 2004 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2005 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2005 Free Software Foundation, Inc.\n"
 
 #: xmalloc.c:93
 #, c-format
@@ -1547,2803 +1530,1931 @@ msgid "xrealloc: %s:%d: cannot allocate %lu bytes"
 msgstr "xrealloc: %s:%d: cannot allocate %lu bytes"
 
 #: builtins.c:244
-msgid "`alias' with no arguments or with the -p option prints the list"
-msgstr "‘\e[1malias\e[0m’ with no arguments or with the -p option prints the list"
-
-#: builtins.c:245
-msgid "of aliases in the form alias NAME=VALUE on standard output."
-msgstr "of aliases in the form alias NAME=VALUE on standard output."
-
-#: builtins.c:246
-msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-msgstr "Otherwise, an alias is defined for each NAME whose VALUE is given."
-
-#: builtins.c:247
-msgid "A trailing space in VALUE causes the next word to be checked for"
-msgstr "A trailing space in VALUE causes the next word to be checked for"
-
-#: builtins.c:248
-msgid "alias substitution when the alias is expanded.  Alias returns"
-msgstr "alias substitution when the alias is expanded.  Alias returns"
-
-#: builtins.c:249
-msgid "true unless a NAME is given for which no alias has been defined."
-msgstr "true unless a NAME is given for which no alias has been defined."
-
-#: builtins.c:257
-msgid ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-msgstr ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-
-#: builtins.c:258
-msgid "then remove all alias definitions."
-msgstr "then remove all alias definitions."
-
-#: builtins.c:266
-msgid "Bind a key sequence to a Readline function or a macro, or set"
-msgstr "Bind a key sequence to a Readline function or a macro, or set"
-
-#: builtins.c:267
-msgid "a Readline variable.  The non-option argument syntax is equivalent"
-msgstr "a Readline variable.  The non-option argument syntax is equivalent"
-
-#: builtins.c:268
-msgid "to that found in ~/.inputrc, but must be passed as a single argument:"
-msgstr "to that found in ~/.inputrc, but must be passed as a single argument:"
-
-#: builtins.c:269
-msgid "bind '\"\\C-x\\C-r\": re-read-init-file'."
-msgstr "bind '“\e[1m\\C-x\\C-r\e[0m”: re-read-init-file'."
-
-#: builtins.c:270
-msgid "bind accepts the following options:"
-msgstr "bind accepts the following options:"
-
-#: builtins.c:271
 msgid ""
-"  -m  keymap         Use `keymap' as the keymap for the duration of this"
+" `alias' with no arguments or with the -p option prints the list\n"
+"    of aliases in the form alias NAME=VALUE on standard output.\n"
+"    Otherwise, an alias is defined for each NAME whose VALUE is given.\n"
+"    A trailing space in VALUE causes the next word to be checked for\n"
+"    alias substitution when the alias is expanded.  Alias returns\n"
+"    true unless a NAME is given for which no alias has been defined."
 msgstr ""
-"  -m  keymap         Use ‘\e[1mkeymap\e[0m’ as the keymap for the duration of "
-"this"
+" ‘\e[1malias\e[0m’ with no arguments or with the -p option prints the list\n"
+"    of aliases in the form alias NAME=VALUE on standard output.\n"
+"    Otherwise, an alias is defined for each NAME whose VALUE is given.\n"
+"    A trailing space in VALUE causes the next word to be checked for\n"
+"    alias substitution when the alias is expanded.  Alias returns\n"
+"    true unless a NAME is given for which no alias has been defined."
 
-#: builtins.c:272
-msgid "                     command.  Acceptable keymap names are emacs,"
-msgstr "                     command.  Acceptable keymap names are emacs,"
-
-#: builtins.c:273
+#: builtins.c:257
 msgid ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+" Remove NAMEs from the list of defined aliases.  If the -a option is given,\n"
+"    then remove all alias definitions."
 msgstr ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-
-#: builtins.c:274
-msgid "                     vi-command, and vi-insert."
-msgstr "                     vi-command, and vi-insert."
-
-#: builtins.c:275
-msgid "  -l                 List names of functions."
-msgstr "  -l                 List names of functions."
-
-#: builtins.c:276
-msgid "  -P                 List function names and bindings."
-msgstr "  -P                 List function names and bindings."
-
-#: builtins.c:277
-msgid "  -p                 List functions and bindings in a form that can be"
-msgstr "  -p                 List functions and bindings in a form that can be"
-
-#: builtins.c:278
-msgid "                     reused as input."
-msgstr "                     reused as input."
-
-#: builtins.c:279
-msgid "  -r  keyseq         Remove the binding for KEYSEQ."
-msgstr "  -r  keyseq         Remove the binding for KEYSEQ."
+" Remove NAMEs from the list of defined aliases.  If the -a option is given,\n"
+"    then remove all alias definitions."
 
-#: builtins.c:280
-msgid "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-msgstr "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-
-#: builtins.c:281
-msgid "\t\t\t\tKEYSEQ is entered."
-msgstr "\t\t\t\tKEYSEQ is entered."
-
-#: builtins.c:282
-msgid "  -f  filename       Read key bindings from FILENAME."
-msgstr "  -f  filename       Read key bindings from FILENAME."
-
-#: builtins.c:283
-msgid "  -q  function-name  Query about which keys invoke the named function."
-msgstr "  -q  function-name  Query about which keys invoke the named function."
-
-#: builtins.c:284
+#: builtins.c:266
 msgid ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
-msgstr ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
-
-#: builtins.c:285
-msgid "  -V                 List variable names and values"
-msgstr "  -V                 List variable names and values"
-
-#: builtins.c:286
-msgid "  -v                 List variable names and values in a form that can"
-msgstr "  -v                 List variable names and values in a form that can"
+" Bind a key sequence to a Readline function or a macro, or set\n"
+"    a Readline variable.  The non-option argument syntax is equivalent\n"
+"    to that found in ~/.inputrc, but must be passed as a single argument:\n"
+"    bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    bind accepts the following options:\n"
+"      -m  keymap         Use `keymap' as the keymap for the duration of "
+"this\n"
+"                         command.  Acceptable keymap names are emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
+"                         vi-command, and vi-insert.\n"
+"      -l                 List names of functions.\n"
+"      -P                 List function names and bindings.\n"
+"      -p                 List functions and bindings in a form that can be\n"
+"                         reused as input.\n"
+"      -r  keyseq         Remove the binding for KEYSEQ.\n"
+"      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
+"    \t\t\t\tKEYSEQ is entered.\n"
+"      -f  filename       Read key bindings from FILENAME.\n"
+"      -q  function-name  Query about which keys invoke the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
+"      -V                 List variable names and values\n"
+"      -v                 List variable names and values in a form that can\n"
+"                         be reused as input.\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
+"                         in a form that can be reused as input."
+msgstr ""
+" Bind a key sequence to a Readline function or a macro, or set\n"
+"    a Readline variable.  The non-option argument syntax is equivalent\n"
+"    to that found in ~/.inputrc, but must be passed as a single argument:\n"
+"    bind '“\e[1m\\C-x\\C-r\e[0m”: re-read-init-file'.\n"
+"    bind accepts the following options:\n"
+"      -m  keymap         Use ‘\e[1mkeymap\e[0m’ as the keymap for the duration "
+"of this\n"
+"                         command.  Acceptable keymap names are emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
+"                         vi-command, and vi-insert.\n"
+"      -l                 List names of functions.\n"
+"      -P                 List function names and bindings.\n"
+"      -p                 List functions and bindings in a form that can be\n"
+"                         reused as input.\n"
+"      -r  keyseq         Remove the binding for KEYSEQ.\n"
+"      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
+"    \t\t\t\tKEYSEQ is entered.\n"
+"      -f  filename       Read key bindings from FILENAME.\n"
+"      -q  function-name  Query about which keys invoke the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
+"      -V                 List variable names and values\n"
+"      -v                 List variable names and values in a form that can\n"
+"                         be reused as input.\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
+"                         in a form that can be reused as input."
 
-#: builtins.c:287
-msgid "                     be reused as input."
-msgstr "                     be reused as input."
-
-#: builtins.c:288
+#: builtins.c:297
 msgid ""
-"  -S                 List key sequences that invoke macros and their values"
+" Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
+"    break N levels."
 msgstr ""
-"  -S                 List key sequences that invoke macros and their values"
+" Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
+"    break N levels."
 
-#: builtins.c:289
+#: builtins.c:304
 msgid ""
-"  -s                 List key sequences that invoke macros and their values"
+" Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.\n"
+"    If N is specified, resume at the N-th enclosing loop."
 msgstr ""
-"  -s                 List key sequences that invoke macros and their values"
-
-#: builtins.c:290
-msgid "                     in a form that can be reused as input."
-msgstr "                     in a form that can be reused as input."
-
-#: builtins.c:297
-msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-msgstr "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-
-#: builtins.c:298
-msgid "break N levels."
-msgstr "break N levels."
-
-#: builtins.c:304
-msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-msgstr "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-
-#: builtins.c:305
-msgid "If N is specified, resume at the N-th enclosing loop."
-msgstr "If N is specified, resume at the N-th enclosing loop."
+" Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.\n"
+"    If N is specified, resume at the N-th enclosing loop."
 
 #: builtins.c:311
-msgid "Run a shell builtin.  This is useful when you wish to rename a"
-msgstr "Run a shell builtin.  This is useful when you wish to rename a"
-
-#: builtins.c:312
-msgid "shell builtin to be a function, but need the functionality of the"
-msgstr "shell builtin to be a function, but need the functionality of the"
-
-#: builtins.c:313
-msgid "builtin within the function itself."
-msgstr "builtin within the function itself."
+msgid ""
+" Run a shell builtin.  This is useful when you wish to rename a\n"
+"    shell builtin to be a function, but need the functionality of the\n"
+"    builtin within the function itself."
+msgstr ""
+" Run a shell builtin.  This is useful when you wish to rename a\n"
+"    shell builtin to be a function, but need the functionality of the\n"
+"    builtin within the function itself."
+
+#: builtins.c:320
+msgid ""
+" Returns the context of the current subroutine call.\n"
+"    \n"
+"    Without EXPR, returns returns \"$line $filename\".  With EXPR,\n"
+"    returns \"$line $subroutine $filename\"; this extra information\n"
+"    can be used used to provide a stack trace.\n"
+"    \n"
+"    The value of EXPR indicates how many call frames to go back before the\n"
+"    current one; the top frame is frame 0."
+msgstr ""
+" Returns the context of the current subroutine call.\n"
+"    \n"
+"    Without EXPR, returns returns “\e[1m$line $filename\e[0m”.  With EXPR,\n"
+"    returns “\e[1m$line $subroutine $filename\e[0m”; this extra information\n"
+"    can be used used to provide a stack trace.\n"
+"    \n"
+"    The value of EXPR indicates how many call frames to go back before the\n"
+"    current one; the top frame is frame 0."
 
 #: builtins.c:334
-msgid "Change the current directory to DIR.  The variable $HOME is the"
-msgstr "Change the current directory to DIR.  The variable $HOME is the"
-
-#: builtins.c:335
-msgid "default DIR.  The variable CDPATH defines the search path for"
-msgstr "default DIR.  The variable CDPATH defines the search path for"
-
-#: builtins.c:336
-msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-msgstr "the directory containing DIR.  Alternative directory names in CDPATH"
-
-#: builtins.c:337
-msgid "are separated by a colon (:).  A null directory name is the same as"
-msgstr "are separated by a colon (:).  A null directory name is the same as"
-
-#: builtins.c:338
-msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-msgstr ""
-"the current directory, i.e. ‘\e[1m.\e[0m’.  If DIR begins with a slash (/),"
-
-#: builtins.c:339
-msgid "then CDPATH is not used.  If the directory is not found, and the"
-msgstr "then CDPATH is not used.  If the directory is not found, and the"
-
-#: builtins.c:340
-msgid "shell option `cdable_vars' is set, then try the word as a variable"
-msgstr ""
-"shell option ‘\e[1mcdable_vars\e[0m’ is set, then try the word as a variable"
-
-#: builtins.c:341
-msgid "name.  If that variable has a value, then cd to the value of that"
-msgstr "name.  If that variable has a value, then cd to the value of that"
-
-#: builtins.c:342
-msgid "variable.  The -P option says to use the physical directory structure"
-msgstr "variable.  The -P option says to use the physical directory structure"
-
-#: builtins.c:343
 msgid ""
-"instead of following symbolic links; the -L option forces symbolic links"
-msgstr ""
-"instead of following symbolic links; the -L option forces symbolic links"
-
-#: builtins.c:344
-msgid "to be followed."
-msgstr "to be followed."
+" Change the current directory to DIR.  The variable $HOME is the\n"
+"    default DIR.  The variable CDPATH defines the search path for\n"
+"    the directory containing DIR.  Alternative directory names in CDPATH\n"
+"    are separated by a colon (:).  A null directory name is the same as\n"
+"    the current directory, i.e. `.'.  If DIR begins with a slash (/),\n"
+"    then CDPATH is not used.  If the directory is not found, and the\n"
+"    shell option `cdable_vars' is set, then try the word as a variable\n"
+"    name.  If that variable has a value, then cd to the value of that\n"
+"    variable.  The -P option says to use the physical directory structure\n"
+"    instead of following symbolic links; the -L option forces symbolic "
+"links\n"
+"    to be followed."
+msgstr ""
+" Change the current directory to DIR.  The variable $HOME is the\n"
+"    default DIR.  The variable CDPATH defines the search path for\n"
+"    the directory containing DIR.  Alternative directory names in CDPATH\n"
+"    are separated by a colon (:).  A null directory name is the same as\n"
+"    the current directory, i.e. ‘\e[1m.\e[0m’.  If DIR begins with a slash (/),\n"
+"    then CDPATH is not used.  If the directory is not found, and the\n"
+"    shell option ‘\e[1mcdable_vars\e[0m’ is set, then try the word as a "
+"variable\n"
+"    name.  If that variable has a value, then cd to the value of that\n"
+"    variable.  The -P option says to use the physical directory structure\n"
+"    instead of following symbolic links; the -L option forces symbolic "
+"links\n"
+"    to be followed."
 
 #: builtins.c:350
-msgid "Print the current working directory.  With the -P option, pwd prints"
-msgstr "Print the current working directory.  With the -P option, pwd prints"
-
-#: builtins.c:351
-msgid "the physical directory, without any symbolic links; the -L option"
-msgstr "the physical directory, without any symbolic links; the -L option"
-
-#: builtins.c:352
-msgid "makes pwd follow symbolic links."
-msgstr "makes pwd follow symbolic links."
+msgid ""
+" Print the current working directory.  With the -P option, pwd prints\n"
+"    the physical directory, without any symbolic links; the -L option\n"
+"    makes pwd follow symbolic links."
+msgstr ""
+" Print the current working directory.  With the -P option, pwd prints\n"
+"    the physical directory, without any symbolic links; the -L option\n"
+"    makes pwd follow symbolic links."
 
 #: builtins.c:358
-msgid "No effect; the command does nothing.  A zero exit code is returned."
-msgstr "No effect; the command does nothing.  A zero exit code is returned."
+msgid " No effect; the command does nothing.  A zero exit code is returned."
+msgstr " No effect; the command does nothing.  A zero exit code is returned."
 
 #: builtins.c:364
-msgid "Return a successful result."
-msgstr "Return a successful result."
+msgid " Return a successful result."
+msgstr " Return a successful result."
 
 #: builtins.c:370
-msgid "Return an unsuccessful result."
-msgstr "Return an unsuccessful result."
+msgid " Return an unsuccessful result."
+msgstr " Return an unsuccessful result."
 
 #: builtins.c:376
-msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-msgstr "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-
-#: builtins.c:377
-msgid "function called `ls', and you wish to call the command `ls', you can"
-msgstr ""
-"function called ‘\e[1mls\e[0m’, and you wish to call the command ‘\e[1mls\e[0m’, you "
-"can"
-
-#: builtins.c:378
-msgid "say \"command ls\".  If the -p option is given, a default value is used"
-msgstr ""
-"say “\e[1mcommand ls\e[0m”.  If the -p option is given, a default value is used"
-
-#: builtins.c:379
-msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
-msgstr "for PATH that is guaranteed to find all of the standard utilities.  If"
-
-#: builtins.c:380
-msgid "the -V or -v option is given, a string is printed describing COMMAND."
-msgstr "the -V or -v option is given, a string is printed describing COMMAND."
-
-#: builtins.c:381
-msgid "The -V option produces a more verbose description."
-msgstr "The -V option produces a more verbose description."
+msgid ""
+" Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
+"    function called `ls', and you wish to call the command `ls', you can\n"
+"    say \"command ls\".  If the -p option is given, a default value is used\n"
+"    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+"    the -V or -v option is given, a string is printed describing COMMAND.\n"
+"    The -V option produces a more verbose description."
+msgstr ""
+" Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
+"    function called ‘\e[1mls\e[0m’, and you wish to call the command ‘\e[1mls\e[0m’, "
+"you can\n"
+"    say “\e[1mcommand ls\e[0m”.  If the -p option is given, a default value is "
+"used\n"
+"    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+"    the -V or -v option is given, a string is printed describing COMMAND.\n"
+"    The -V option produces a more verbose description."
 
 #: builtins.c:387
-msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-msgstr "Declare variables and/or give them attributes.  If no NAMEs are"
-
-#: builtins.c:388
-msgid "given, then display the values of variables instead.  The -p option"
-msgstr "given, then display the values of variables instead.  The -p option"
-
-#: builtins.c:389
-msgid "will display the attributes and values of each NAME."
-msgstr "will display the attributes and values of each NAME."
-
-#: builtins.c:391
-msgid "The flags are:"
-msgstr "The flags are:"
-
-#: builtins.c:393
-msgid "  -a\tto make NAMEs arrays (if supported)"
-msgstr "  -a\tto make NAMEs arrays (if supported)"
-
-#: builtins.c:394
-msgid "  -f\tto select from among function names only"
-msgstr "  -f\tto select from among function names only"
-
-#: builtins.c:395
 msgid ""
-"  -F\tto display function names (and line number and source file name if"
-msgstr ""
-"  -F\tto display function names (and line number and source file name if"
-
-#: builtins.c:396
-msgid "\tdebugging) without definitions"
-msgstr "\tdebugging) without definitions"
-
-#: builtins.c:397
-msgid "  -i\tto make NAMEs have the `integer' attribute"
-msgstr "  -i\tto make NAMEs have the ‘\e[1minteger\e[0m’ attribute"
-
-#: builtins.c:398
-msgid "  -r\tto make NAMEs readonly"
-msgstr "  -r\tto make NAMEs readonly"
-
-#: builtins.c:399
-msgid "  -t\tto make NAMEs have the `trace' attribute"
-msgstr "  -t\tto make NAMEs have the ‘\e[1mtrace\e[0m’ attribute"
-
-#: builtins.c:400
-msgid "  -x\tto make NAMEs export"
-msgstr "  -x\tto make NAMEs export"
-
-#: builtins.c:402
-msgid "Variables with the integer attribute have arithmetic evaluation (see"
-msgstr "Variables with the integer attribute have arithmetic evaluation (see"
-
-#: builtins.c:403
-msgid "`let') done when the variable is assigned to."
-msgstr "‘\e[1mlet\e[0m’) done when the variable is assigned to."
-
-#: builtins.c:405
-msgid "When displaying values of variables, -f displays a function's name"
-msgstr "When displaying values of variables, -f displays a function's name"
-
-#: builtins.c:406
-msgid "and definition.  The -F option restricts the display to function"
-msgstr "and definition.  The -F option restricts the display to function"
-
-#: builtins.c:407
-msgid "name only."
-msgstr "name only."
-
-#: builtins.c:409
-msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
-msgstr ""
-"Using ‘\e[1m+\e[0m’ instead of ‘\e[1m-\e[0m’ turns off the given attribute instead.  "
-"When"
-
-#: builtins.c:410
-msgid "used in a function, makes NAMEs local, as with the `local' command."
-msgstr ""
-"used in a function, makes NAMEs local, as with the ‘\e[1mlocal\e[0m’ command."
+" Declare variables and/or give them attributes.  If no NAMEs are\n"
+"    given, then display the values of variables instead.  The -p option\n"
+"    will display the attributes and values of each NAME.\n"
+"    \n"
+"    The flags are:\n"
+"    \n"
+"      -a\tto make NAMEs arrays (if supported)\n"
+"      -f\tto select from among function names only\n"
+"      -F\tto display function names (and line number and source file name "
+"if\n"
+"    \tdebugging) without definitions\n"
+"      -i\tto make NAMEs have the `integer' attribute\n"
+"      -r\tto make NAMEs readonly\n"
+"      -t\tto make NAMEs have the `trace' attribute\n"
+"      -x\tto make NAMEs export\n"
+"    \n"
+"    Variables with the integer attribute have arithmetic evaluation (see\n"
+"    `let') done when the variable is assigned to.\n"
+"    \n"
+"    When displaying values of variables, -f displays a function's name\n"
+"    and definition.  The -F option restricts the display to function\n"
+"    name only.\n"
+"    \n"
+"    Using `+' instead of `-' turns off the given attribute instead.  When\n"
+"    used in a function, makes NAMEs local, as with the `local' command."
+msgstr ""
+" Declare variables and/or give them attributes.  If no NAMEs are\n"
+"    given, then display the values of variables instead.  The -p option\n"
+"    will display the attributes and values of each NAME.\n"
+"    \n"
+"    The flags are:\n"
+"    \n"
+"      -a\tto make NAMEs arrays (if supported)\n"
+"      -f\tto select from among function names only\n"
+"      -F\tto display function names (and line number and source file name "
+"if\n"
+"    \tdebugging) without definitions\n"
+"      -i\tto make NAMEs have the ‘\e[1minteger\e[0m’ attribute\n"
+"      -r\tto make NAMEs readonly\n"
+"      -t\tto make NAMEs have the ‘\e[1mtrace\e[0m’ attribute\n"
+"      -x\tto make NAMEs export\n"
+"    \n"
+"    Variables with the integer attribute have arithmetic evaluation (see\n"
+"    ‘\e[1mlet\e[0m’) done when the variable is assigned to.\n"
+"    \n"
+"    When displaying values of variables, -f displays a function's name\n"
+"    and definition.  The -F option restricts the display to function\n"
+"    name only.\n"
+"    \n"
+"    Using ‘\e[1m+\e[0m’ instead of ‘\e[1m-\e[0m’ turns off the given attribute "
+"instead.  When\n"
+"    used in a function, makes NAMEs local, as with the ‘\e[1mlocal\e[0m’ command."
 
 #: builtins.c:416
-msgid "Obsolete.  See `declare'."
-msgstr "Obsolete.  See ‘\e[1mdeclare\e[0m’."
+msgid " Obsolete.  See `declare'."
+msgstr " Obsolete.  See ‘\e[1mdeclare\e[0m’."
 
 #: builtins.c:422
-msgid "Create a local variable called NAME, and give it VALUE.  LOCAL"
-msgstr "Create a local variable called NAME, and give it VALUE.  LOCAL"
-
-#: builtins.c:423
-msgid "can only be used within a function; it makes the variable NAME"
-msgstr "can only be used within a function; it makes the variable NAME"
-
-#: builtins.c:424
-msgid "have a visible scope restricted to that function and its children."
-msgstr "have a visible scope restricted to that function and its children."
+msgid ""
+" Create a local variable called NAME, and give it VALUE.  LOCAL\n"
+"    can only be used within a function; it makes the variable NAME\n"
+"    have a visible scope restricted to that function and its children."
+msgstr ""
+" Create a local variable called NAME, and give it VALUE.  LOCAL\n"
+"    can only be used within a function; it makes the variable NAME\n"
+"    have a visible scope restricted to that function and its children."
 
 #: builtins.c:431
-msgid "Output the ARGs.  If -n is specified, the trailing newline is"
-msgstr "Output the ARGs.  If -n is specified, the trailing newline is"
-
-#: builtins.c:432
-msgid "suppressed.  If the -e option is given, interpretation of the"
-msgstr "suppressed.  If the -e option is given, interpretation of the"
-
-#: builtins.c:433
-msgid "following backslash-escaped characters is turned on:"
-msgstr "following backslash-escaped characters is turned on:"
-
-#: builtins.c:434
-msgid "\t\\a\talert (bell)"
-msgstr "\t\\a\talert (bell)"
-
-#: builtins.c:435
-msgid "\t\\b\tbackspace"
-msgstr "\t\\b\tbackspace"
-
-#: builtins.c:436
-msgid "\t\\c\tsuppress trailing newline"
-msgstr "\t\\c\tsuppress trailing newline"
-
-#: builtins.c:437
-msgid "\t\\E\tescape character"
-msgstr "\t\\E\tescape character"
-
-#: builtins.c:438
-msgid "\t\\f\tform feed"
-msgstr "\t\\f\tform feed"
-
-#: builtins.c:439
-msgid "\t\\n\tnew line"
-msgstr "\t\\n\tnew line"
-
-#: builtins.c:440
-msgid "\t\\r\tcarriage return"
-msgstr "\t\\r\tcarriage return"
-
-#: builtins.c:441
-msgid "\t\\t\thorizontal tab"
-msgstr "\t\\t\thorizontal tab"
-
-#: builtins.c:442
-msgid "\t\\v\tvertical tab"
-msgstr "\t\\v\tvertical tab"
-
-#: builtins.c:443
-msgid "\t\\\\\tbackslash"
-msgstr "\t\\\\\tbackslash"
-
-#: builtins.c:444
-msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
-msgstr "\t\\num\tthe character whose ASCII code is NUM (octal)."
-
-#: builtins.c:446
-msgid "You can explicitly turn off the interpretation of the above characters"
-msgstr "You can explicitly turn off the interpretation of the above characters"
-
-#: builtins.c:447
-msgid "with the -E option."
-msgstr "with the -E option."
+msgid ""
+" Output the ARGs.  If -n is specified, the trailing newline is\n"
+"    suppressed.  If the -e option is given, interpretation of the\n"
+"    following backslash-escaped characters is turned on:\n"
+"    \t\\a\talert (bell)\n"
+"    \t\\b\tbackspace\n"
+"    \t\\c\tsuppress trailing newline\n"
+"    \t\\E\tescape character\n"
+"    \t\\f\tform feed\n"
+"    \t\\n\tnew line\n"
+"    \t\\r\tcarriage return\n"
+"    \t\\t\thorizontal tab\n"
+"    \t\\v\tvertical tab\n"
+"    \t\\\\\tbackslash\n"
+"    \t\\num\tthe character whose ASCII code is NUM (octal).\n"
+"    \n"
+"    You can explicitly turn off the interpretation of the above characters\n"
+"    with the -E option."
+msgstr ""
+" Output the ARGs.  If -n is specified, the trailing newline is\n"
+"    suppressed.  If the -e option is given, interpretation of the\n"
+"    following backslash-escaped characters is turned on:\n"
+"    \t\\a\talert (bell)\n"
+"    \t\\b\tbackspace\n"
+"    \t\\c\tsuppress trailing newline\n"
+"    \t\\E\tescape character\n"
+"    \t\\f\tform feed\n"
+"    \t\\n\tnew line\n"
+"    \t\\r\tcarriage return\n"
+"    \t\\t\thorizontal tab\n"
+"    \t\\v\tvertical tab\n"
+"    \t\\\\\tbackslash\n"
+"    \t\\num\tthe character whose ASCII code is NUM (octal).\n"
+"    \n"
+"    You can explicitly turn off the interpretation of the above characters\n"
+"    with the -E option."
 
 #: builtins.c:455
 msgid ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+" Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 msgstr ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+" Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 
 #: builtins.c:462
-msgid "Enable and disable builtin shell commands.  This allows"
-msgstr "Enable and disable builtin shell commands.  This allows"
-
-#: builtins.c:463
-msgid "you to use a disk command which has the same name as a shell"
-msgstr "you to use a disk command which has the same name as a shell"
-
-#: builtins.c:464
-msgid "builtin without specifying a full pathname.  If -n is used, the"
-msgstr "builtin without specifying a full pathname.  If -n is used, the"
-
-#: builtins.c:465
-msgid "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
-msgstr "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
-
-#: builtins.c:466
-msgid "to use the `test' found in $PATH instead of the shell builtin"
-msgstr "to use the ‘\e[1mtest\e[0m’ found in $PATH instead of the shell builtin"
-
-#: builtins.c:467
-msgid "version, type `enable -n test'.  On systems supporting dynamic"
-msgstr "version, type ‘\e[1menable -n test\e[0m’.  On systems supporting dynamic"
-
-#: builtins.c:468
-msgid "loading, the -f option may be used to load new builtins from the"
-msgstr "loading, the -f option may be used to load new builtins from the"
-
-#: builtins.c:469
-msgid "shared object FILENAME.  The -d option will delete a builtin"
-msgstr "shared object FILENAME.  The -d option will delete a builtin"
-
-#: builtins.c:470
-msgid "previously loaded with -f.  If no non-option names are given, or"
-msgstr "previously loaded with -f.  If no non-option names are given, or"
-
-#: builtins.c:471
-msgid "the -p option is supplied, a list of builtins is printed.  The"
-msgstr "the -p option is supplied, a list of builtins is printed.  The"
-
-#: builtins.c:472
-msgid "-a option means to print every builtin with an indication of whether"
-msgstr "-a option means to print every builtin with an indication of whether"
-
-#: builtins.c:473
-msgid ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
-msgstr ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
-
-#: builtins.c:474
 msgid ""
-"`special' builtins.  The -n option displays a list of all disabled builtins."
+" Enable and disable builtin shell commands.  This allows\n"
+"    you to use a disk command which has the same name as a shell\n"
+"    builtin without specifying a full pathname.  If -n is used, the\n"
+"    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
+"    to use the `test' found in $PATH instead of the shell builtin\n"
+"    version, type `enable -n test'.  On systems supporting dynamic\n"
+"    loading, the -f option may be used to load new builtins from the\n"
+"    shared object FILENAME.  The -d option will delete a builtin\n"
+"    previously loaded with -f.  If no non-option names are given, or\n"
+"    the -p option is supplied, a list of builtins is printed.  The\n"
+"    -a option means to print every builtin with an indication of whether\n"
+"    or not it is enabled.  The -s option restricts the output to the "
+"POSIX.2\n"
+"    `special' builtins.  The -n option displays a list of all disabled "
+"builtins."
 msgstr ""
-"‘\e[1mspecial\e[0m’ builtins.  The -n option displays a list of all disabled "
+" Enable and disable builtin shell commands.  This allows\n"
+"    you to use a disk command which has the same name as a shell\n"
+"    builtin without specifying a full pathname.  If -n is used, the\n"
+"    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
+"    to use the ‘\e[1mtest\e[0m’ found in $PATH instead of the shell builtin\n"
+"    version, type ‘\e[1menable -n test\e[0m’.  On systems supporting dynamic\n"
+"    loading, the -f option may be used to load new builtins from the\n"
+"    shared object FILENAME.  The -d option will delete a builtin\n"
+"    previously loaded with -f.  If no non-option names are given, or\n"
+"    the -p option is supplied, a list of builtins is printed.  The\n"
+"    -a option means to print every builtin with an indication of whether\n"
+"    or not it is enabled.  The -s option restricts the output to the "
+"POSIX.2\n"
+"    ‘\e[1mspecial\e[0m’ builtins.  The -n option displays a list of all disabled "
 "builtins."
 
 #: builtins.c:480
-msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-msgstr "Read ARGs as input to the shell and execute the resulting command(s)."
+msgid " Read ARGs as input to the shell and execute the resulting command(s)."
+msgstr " Read ARGs as input to the shell and execute the resulting command(s)."
 
 #: builtins.c:486
-msgid "Getopts is used by shell procedures to parse positional parameters."
-msgstr "Getopts is used by shell procedures to parse positional parameters."
-
-#: builtins.c:488
-msgid "OPTSTRING contains the option letters to be recognized; if a letter"
-msgstr "OPTSTRING contains the option letters to be recognized; if a letter"
-
-#: builtins.c:489
-msgid "is followed by a colon, the option is expected to have an argument,"
-msgstr "is followed by a colon, the option is expected to have an argument,"
-
-#: builtins.c:490
-msgid "which should be separated from it by white space."
-msgstr "which should be separated from it by white space."
-
-#: builtins.c:492
-msgid "Each time it is invoked, getopts will place the next option in the"
-msgstr "Each time it is invoked, getopts will place the next option in the"
-
-#: builtins.c:493
-msgid "shell variable $name, initializing name if it does not exist, and"
-msgstr "shell variable $name, initializing name if it does not exist, and"
-
-#: builtins.c:494
-msgid "the index of the next argument to be processed into the shell"
-msgstr "the index of the next argument to be processed into the shell"
-
-#: builtins.c:495
-msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-msgstr "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-
-#: builtins.c:496
-msgid "a shell script is invoked.  When an option requires an argument,"
-msgstr "a shell script is invoked.  When an option requires an argument,"
-
-#: builtins.c:497
-msgid "getopts places that argument into the shell variable OPTARG."
-msgstr "getopts places that argument into the shell variable OPTARG."
+msgid ""
+" Getopts is used by shell procedures to parse positional parameters.\n"
+"    \n"
+"    OPTSTRING contains the option letters to be recognized; if a letter\n"
+"    is followed by a colon, the option is expected to have an argument,\n"
+"    which should be separated from it by white space.\n"
+"    \n"
+"    Each time it is invoked, getopts will place the next option in the\n"
+"    shell variable $name, initializing name if it does not exist, and\n"
+"    the index of the next argument to be processed into the shell\n"
+"    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+"    a shell script is invoked.  When an option requires an argument,\n"
+"    getopts places that argument into the shell variable OPTARG.\n"
+"    \n"
+"    getopts reports errors in one of two ways.  If the first character\n"
+"    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+"    this mode, no error messages are printed.  If an invalid option is\n"
+"    seen, getopts places the option character found into OPTARG.  If a\n"
+"    required argument is not found, getopts places a ':' into NAME and\n"
+"    sets OPTARG to the option character found.  If getopts is not in\n"
+"    silent mode, and an invalid option is seen, getopts places '?' into\n"
+"    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
+"    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+"    printed.\n"
+"    \n"
+"    If the shell variable OPTERR has the value 0, getopts disables the\n"
+"    printing of error messages, even if the first character of\n"
+"    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+"    \n"
+"    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+"    more arguments are given, they are parsed instead."
+msgstr ""
+" Getopts is used by shell procedures to parse positional parameters.\n"
+"    \n"
+"    OPTSTRING contains the option letters to be recognized; if a letter\n"
+"    is followed by a colon, the option is expected to have an argument,\n"
+"    which should be separated from it by white space.\n"
+"    \n"
+"    Each time it is invoked, getopts will place the next option in the\n"
+"    shell variable $name, initializing name if it does not exist, and\n"
+"    the index of the next argument to be processed into the shell\n"
+"    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+"    a shell script is invoked.  When an option requires an argument,\n"
+"    getopts places that argument into the shell variable OPTARG.\n"
+"    \n"
+"    getopts reports errors in one of two ways.  If the first character\n"
+"    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+"    this mode, no error messages are printed.  If an invalid option is\n"
+"    seen, getopts places the option character found into OPTARG.  If a\n"
+"    required argument is not found, getopts places a ‘\e[1m:\e[0m’ into NAME "
+"and\n"
+"    sets OPTARG to the option character found.  If getopts is not in\n"
+"    silent mode, and an invalid option is seen, getopts places ‘\e[1m?\e[0m’ "
+"into\n"
+"    NAME and unsets OPTARG.  If a required argument is not found, a ‘\e[1m?\e"
+"[0m’\n"
+"    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+"    printed.\n"
+"    \n"
+"    If the shell variable OPTERR has the value 0, getopts disables the\n"
+"    printing of error messages, even if the first character of\n"
+"    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+"    \n"
+"    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+"    more arguments are given, they are parsed instead."
 
-#: builtins.c:499
-msgid "getopts reports errors in one of two ways.  If the first character"
-msgstr "getopts reports errors in one of two ways.  If the first character"
+#: builtins.c:521
+msgid ""
+" Exec FILE, replacing this shell with the specified program.\n"
+"    If FILE is not specified, the redirections take effect in this\n"
+"    shell.  If the first argument is `-l', then place a dash in the\n"
+"    zeroth arg passed to FILE, as login does.  If the `-c' option\n"
+"    is supplied, FILE is executed with a null environment.  The `-a'\n"
+"    option means to make set argv[0] of the executed process to NAME.\n"
+"    If the file cannot be executed and the shell is not interactive,\n"
+"    then the shell exits, unless the shell option `execfail' is set."
+msgstr ""
+" Exec FILE, replacing this shell with the specified program.\n"
+"    If FILE is not specified, the redirections take effect in this\n"
+"    shell.  If the first argument is ‘\e[1m-l\e[0m’, then place a dash in the\n"
+"    zeroth arg passed to FILE, as login does.  If the ‘\e[1m-c\e[0m’ option\n"
+"    is supplied, FILE is executed with a null environment.  The ‘\e[1m-a\e[0m’\n"
+"    option means to make set argv[0] of the executed process to NAME.\n"
+"    If the file cannot be executed and the shell is not interactive,\n"
+"    then the shell exits, unless the shell option ‘\e[1mexecfail\e[0m’ is set."
 
-#: builtins.c:500
-msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-msgstr "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
+#: builtins.c:534
+msgid ""
+" Exit the shell with a status of N.  If N is omitted, the exit status\n"
+"    is that of the last command executed."
+msgstr ""
+" Exit the shell with a status of N.  If N is omitted, the exit status\n"
+"    is that of the last command executed."
 
-#: builtins.c:501
-msgid "this mode, no error messages are printed.  If an invalid option is"
-msgstr "this mode, no error messages are printed.  If an invalid option is"
+#: builtins.c:541
+msgid " Logout of a login shell."
+msgstr " Logout of a login shell."
 
-#: builtins.c:502
-msgid "seen, getopts places the option character found into OPTARG.  If a"
-msgstr "seen, getopts places the option character found into OPTARG.  If a"
+#: builtins.c:548
+msgid ""
+" fc is used to list or edit and re-execute commands from the history list.\n"
+"    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
+"    string, which means the most recent command beginning with that\n"
+"    string.\n"
+"    \n"
+"       -e ENAME selects which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
+"          then vi.\n"
+"    \n"
+"       -l means list lines instead of editing.\n"
+"       -n means no line numbers listed.\n"
+"       -r means reverse the order of the lines (making it newest listed "
+"first).\n"
+"    \n"
+"    With the `fc -s [pat=rep ...] [command]' format, the command is\n"
+"    re-executed after the substitution OLD=NEW is performed.\n"
+"    \n"
+"    A useful alias to use with this is r='fc -s', so that typing `r cc'\n"
+"    runs the last command beginning with `cc' and typing `r' re-executes\n"
+"    the last command."
+msgstr ""
+" fc is used to list or edit and re-execute commands from the history list.\n"
+"    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
+"    string, which means the most recent command beginning with that\n"
+"    string.\n"
+"    \n"
+"       -e ENAME selects which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
+"          then vi.\n"
+"    \n"
+"       -l means list lines instead of editing.\n"
+"       -n means no line numbers listed.\n"
+"       -r means reverse the order of the lines (making it newest listed "
+"first).\n"
+"    \n"
+"    With the ‘\e[1mfc -s [pat=rep ...] [command]\e[0m’ format, the command is\n"
+"    re-executed after the substitution OLD=NEW is performed.\n"
+"    \n"
+"    A useful alias to use with this is r='fc -s', so that typing ‘\e[1mr cc\e"
+"[0m’\n"
+"    runs the last command beginning with ‘\e[1mcc\e[0m’ and typing ‘\e[1mr\e[0m’ re-"
+"executes\n"
+"    the last command."
 
-#: builtins.c:503
-msgid "required argument is not found, getopts places a ':' into NAME and"
+#: builtins.c:573
+msgid ""
+" Place JOB_SPEC in the foreground, and make it the current job.  If\n"
+"    JOB_SPEC is not present, the shell's notion of the current job is\n"
+"    used."
 msgstr ""
-"required argument is not found, getopts places a ‘\e[1m:\e[0m’ into NAME and"
+" Place JOB_SPEC in the foreground, and make it the current job.  If\n"
+"    JOB_SPEC is not present, the shell's notion of the current job is\n"
+"    used."
 
-#: builtins.c:504
-msgid "sets OPTARG to the option character found.  If getopts is not in"
-msgstr "sets OPTARG to the option character found.  If getopts is not in"
-
-#: builtins.c:505
-msgid "silent mode, and an invalid option is seen, getopts places '?' into"
+#: builtins.c:583
+msgid ""
+" Place each JOB_SPEC in the background, as if it had been started with\n"
+"    `&'.  If JOB_SPEC is not present, the shell's notion of the current\n"
+"    job is used."
 msgstr ""
-"silent mode, and an invalid option is seen, getopts places ‘\e[1m?\e[0m’ into"
+" Place each JOB_SPEC in the background, as if it had been started with\n"
+"    ‘\e[1m&\e[0m’.  If JOB_SPEC is not present, the shell's notion of the "
+"current\n"
+"    job is used."
 
-#: builtins.c:506
-msgid "NAME and unsets OPTARG.  If a required argument is not found, a '?'"
+#: builtins.c:592
+msgid ""
+" For each NAME, the full pathname of the command is determined and\n"
+"    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
+"    full pathname of NAME, and no path search is performed.  The -r\n"
+"    option causes the shell to forget all remembered locations.  The -d\n"
+"    option causes the shell to forget the remembered location of each NAME.\n"
+"    If the -t option is supplied the full pathname to which each NAME\n"
+"    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+"    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+"    causes output to be displayed in a format that may be reused as input.\n"
+"    If no arguments are given, information about remembered commands is "
+"displayed."
 msgstr ""
-"NAME and unsets OPTARG.  If a required argument is not found, a ‘\e[1m?\e[0m’"
+" For each NAME, the full pathname of the command is determined and\n"
+"    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
+"    full pathname of NAME, and no path search is performed.  The -r\n"
+"    option causes the shell to forget all remembered locations.  The -d\n"
+"    option causes the shell to forget the remembered location of each NAME.\n"
+"    If the -t option is supplied the full pathname to which each NAME\n"
+"    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+"    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+"    causes output to be displayed in a format that may be reused as input.\n"
+"    If no arguments are given, information about remembered commands is "
+"displayed."
 
-#: builtins.c:507
-msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-msgstr "is placed in NAME, OPTARG is unset, and a diagnostic message is"
+#: builtins.c:608
+msgid ""
+" Display helpful information about builtin commands.  If PATTERN is\n"
+"    specified, gives detailed help on all commands matching PATTERN,\n"
+"    otherwise a list of the builtins is printed.  The -s option\n"
+"    restricts the output for each builtin command matching PATTERN to\n"
+"    a short usage synopsis."
+msgstr ""
+" Display helpful information about builtin commands.  If PATTERN is\n"
+"    specified, gives detailed help on all commands matching PATTERN,\n"
+"    otherwise a list of the builtins is printed.  The -s option\n"
+"    restricts the output for each builtin command matching PATTERN to\n"
+"    a short usage synopsis."
 
-#: builtins.c:508
-msgid "printed."
-msgstr "printed."
+#: builtins.c:620
+msgid ""
+" Display the history list with line numbers.  Lines listed with\n"
+"    with a `*' have been modified.  Argument of N says to list only\n"
+"    the last N lines.  The `-c' option causes the history list to be\n"
+"    cleared by deleting all of the entries.  The `-d' option deletes\n"
+"    the history entry at offset OFFSET.  The `-w' option writes out the\n"
+"    current history to the history file;  `-r' means to read the file and\n"
+"    append the contents to the history list instead.  `-a' means\n"
+"    to append history lines from this session to the history file.\n"
+"    Argument `-n' means to read all history lines not already read\n"
+"    from the history file and append them to the history list.\n"
+"    \n"
+"    If FILENAME is given, then that is used as the history file else\n"
+"    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
+"    If the -s option is supplied, the non-option ARGs are appended to\n"
+"    the history list as a single entry.  The -p option means to perform\n"
+"    history expansion on each ARG and display the result, without storing\n"
+"    anything in the history list.\n"
+"    \n"
+"    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
+"    as a format string for strftime(3) to print the time stamp associated\n"
+"    with each displayed history entry.  No time stamps are printed otherwise."
+msgstr ""
+" Display the history list with line numbers.  Lines listed with\n"
+"    with a ‘\e[1m*\e[0m’ have been modified.  Argument of N says to list only\n"
+"    the last N lines.  The ‘\e[1m-c\e[0m’ option causes the history list to be\n"
+"    cleared by deleting all of the entries.  The ‘\e[1m-d\e[0m’ option deletes\n"
+"    the history entry at offset OFFSET.  The ‘\e[1m-w\e[0m’ option writes out "
+"the\n"
+"    current history to the history file;  ‘\e[1m-r\e[0m’ means to read the file "
+"and\n"
+"    append the contents to the history list instead.  ‘\e[1m-a\e[0m’ means\n"
+"    to append history lines from this session to the history file.\n"
+"    Argument ‘\e[1m-n\e[0m’ means to read all history lines not already read\n"
+"    from the history file and append them to the history list.\n"
+"    \n"
+"    If FILENAME is given, then that is used as the history file else\n"
+"    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
+"    If the -s option is supplied, the non-option ARGs are appended to\n"
+"    the history list as a single entry.  The -p option means to perform\n"
+"    history expansion on each ARG and display the result, without storing\n"
+"    anything in the history list.\n"
+"    \n"
+"    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
+"    as a format string for strftime(3) to print the time stamp associated\n"
+"    with each displayed history entry.  No time stamps are printed otherwise."
 
-#: builtins.c:510
-msgid "If the shell variable OPTERR has the value 0, getopts disables the"
-msgstr "If the shell variable OPTERR has the value 0, getopts disables the"
+#: builtins.c:648
+msgid ""
+" Lists the active jobs.  The -l option lists process id's in addition\n"
+"    to the normal information; the -p option lists process id's only.\n"
+"    If -n is given, only processes that have changed status since the last\n"
+"    notification are printed.  JOBSPEC restricts output to that job.  The\n"
+"    -r and -s options restrict output to running and stopped jobs only,\n"
+"    respectively.  Without options, the status of all active jobs is\n"
+"    printed.  If -x is given, COMMAND is run after all job specifications\n"
+"    that appear in ARGS have been replaced with the process ID of that "
+"job's\n"
+"    process group leader."
+msgstr ""
+" Lists the active jobs.  The -l option lists process id's in addition\n"
+"    to the normal information; the -p option lists process id's only.\n"
+"    If -n is given, only processes that have changed status since the last\n"
+"    notification are printed.  JOBSPEC restricts output to that job.  The\n"
+"    -r and -s options restrict output to running and stopped jobs only,\n"
+"    respectively.  Without options, the status of all active jobs is\n"
+"    printed.  If -x is given, COMMAND is run after all job specifications\n"
+"    that appear in ARGS have been replaced with the process ID of that "
+"job's\n"
+"    process group leader."
 
-#: builtins.c:511
-msgid "printing of error messages, even if the first character of"
-msgstr "printing of error messages, even if the first character of"
+#: builtins.c:664
+msgid ""
+" By default, removes each JOBSPEC argument from the table of active jobs.\n"
+"    If the -h option is given, the job is not removed from the table, but "
+"is\n"
+"    marked so that SIGHUP is not sent to the job if the shell receives a\n"
+"    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
+"all\n"
+"    jobs from the job table; the -r option means to remove only running jobs."
+msgstr ""
+" By default, removes each JOBSPEC argument from the table of active jobs.\n"
+"    If the -h option is given, the job is not removed from the table, but "
+"is\n"
+"    marked so that SIGHUP is not sent to the job if the shell receives a\n"
+"    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
+"all\n"
+"    jobs from the job table; the -r option means to remove only running jobs."
 
-#: builtins.c:512
-msgid "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
-msgstr "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
+#: builtins.c:675
+msgid ""
+" Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If\n"
+"    SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'\n"
+"    lists the signal names; if arguments follow `-l' they are assumed to\n"
+"    be signal numbers for which names should be listed.  Kill is a shell\n"
+"    builtin for two reasons: it allows job IDs to be used instead of\n"
+"    process IDs, and, if you have reached the limit on processes that\n"
+"    you can create, you don't have to start a process to kill another one."
+msgstr ""
+" Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If\n"
+"    SIGSPEC is not present, then SIGTERM is assumed.  An argument of ‘\e[1m-l\e"
+"[0m’\n"
+"    lists the signal names; if arguments follow ‘\e[1m-l\e[0m’ they are assumed "
+"to\n"
+"    be signal numbers for which names should be listed.  Kill is a shell\n"
+"    builtin for two reasons: it allows job IDs to be used instead of\n"
+"    process IDs, and, if you have reached the limit on processes that\n"
+"    you can create, you don't have to start a process to kill another one."
 
-#: builtins.c:514
-msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-msgstr "Getopts normally parses the positional parameters ($0 - $9), but if"
+#: builtins.c:687
+msgid ""
+" Each ARG is an arithmetic expression to be evaluated.  Evaluation\n"
+"    is done in fixed-width integers with no check for overflow, though\n"
+"    division by 0 is trapped and flagged as an error.  The following\n"
+"    list of operators is grouped into levels of equal-precedence operators.\n"
+"    The levels are listed in order of decreasing precedence.\n"
+"    \n"
+"    \tid++, id--\tvariable post-increment, post-decrement\n"
+"    \t++id, --id\tvariable pre-increment, pre-decrement\n"
+"    \t-, +\t\tunary minus, plus\n"
+"    \t!, ~\t\tlogical and bitwise negation\n"
+"    \t**\t\texponentiation\n"
+"    \t*, /, %\t\tmultiplication, division, remainder\n"
+"    \t+, -\t\taddition, subtraction\n"
+"    \t<<, >>\t\tleft and right bitwise shifts\n"
+"    \t<=, >=, <, >\tcomparison\n"
+"    \t==, !=\t\tequality, inequality\n"
+"    \t&\t\tbitwise AND\n"
+"    \t^\t\tbitwise XOR\n"
+"    \t|\t\tbitwise OR\n"
+"    \t&&\t\tlogical AND\n"
+"    \t||\t\tlogical OR\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\tconditional operator\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tassignment\n"
+"    \n"
+"    Shell variables are allowed as operands.  The name of the variable\n"
+"    is replaced by its value (coerced to a fixed-width integer) within\n"
+"    an expression.  The variable need not have its integer attribute\n"
+"    turned on to be used in an expression.\n"
+"    \n"
+"    Operators are evaluated in order of precedence.  Sub-expressions in\n"
+"    parentheses are evaluated first and may override the precedence\n"
+"    rules above.\n"
+"    \n"
+"    If the last ARG evaluates to 0, let returns 1; 0 is returned\n"
+"    otherwise."
+msgstr ""
+" Each ARG is an arithmetic expression to be evaluated.  Evaluation\n"
+"    is done in fixed-width integers with no check for overflow, though\n"
+"    division by 0 is trapped and flagged as an error.  The following\n"
+"    list of operators is grouped into levels of equal-precedence operators.\n"
+"    The levels are listed in order of decreasing precedence.\n"
+"    \n"
+"    \tid++, id--\tvariable post-increment, post-decrement\n"
+"    \t++id, --id\tvariable pre-increment, pre-decrement\n"
+"    \t-, +\t\tunary minus, plus\n"
+"    \t!, ~\t\tlogical and bitwise negation\n"
+"    \t**\t\texponentiation\n"
+"    \t*, /, %\t\tmultiplication, division, remainder\n"
+"    \t+, -\t\taddition, subtraction\n"
+"    \t<<, >>\t\tleft and right bitwise shifts\n"
+"    \t<=, >=, <, >\tcomparison\n"
+"    \t==, !=\t\tequality, inequality\n"
+"    \t&\t\tbitwise AND\n"
+"    \t^\t\tbitwise XOR\n"
+"    \t|\t\tbitwise OR\n"
+"    \t&&\t\tlogical AND\n"
+"    \t||\t\tlogical OR\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\tconditional operator\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tassignment\n"
+"    \n"
+"    Shell variables are allowed as operands.  The name of the variable\n"
+"    is replaced by its value (coerced to a fixed-width integer) within\n"
+"    an expression.  The variable need not have its integer attribute\n"
+"    turned on to be used in an expression.\n"
+"    \n"
+"    Operators are evaluated in order of precedence.  Sub-expressions in\n"
+"    parentheses are evaluated first and may override the precedence\n"
+"    rules above.\n"
+"    \n"
+"    If the last ARG evaluates to 0, let returns 1; 0 is returned\n"
+"    otherwise."
 
-#: builtins.c:515
-msgid "more arguments are given, they are parsed instead."
-msgstr "more arguments are given, they are parsed instead."
+#: builtins.c:730
+msgid ""
+" One line is read from the standard input, or from file descriptor FD if "
+"the\n"
+"    -u option is supplied, and the first word is assigned to the first "
+"NAME,\n"
+"    the second word to the second NAME, and so on, with leftover words "
+"assigned\n"
+"    to the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters.  If no NAMEs are supplied, the line read is stored in the "
+"REPLY\n"
+"    variable.  If the -r option is given, this signifies `raw' input, and\n"
+"    backslash escaping is disabled.  The -d option causes read to continue\n"
+"    until the first character of DELIM is read, rather than newline.  If the "
+"-p\n"
+"    option is supplied, the string PROMPT is output without a trailing "
+"newline\n"
+"    before attempting to read.  If -a is supplied, the words read are "
+"assigned\n"
+"    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
+"and\n"
+"    the shell is interactive, readline is used to obtain the line.  If -n "
+"is\n"
+"    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+"    characters have been read.  The -s option causes input coming from a\n"
+"    terminal to not be echoed.\n"
+"    \n"
+"    The -t option causes read to time out and return failure if a complete "
+"line\n"
+"    of input is not read within TIMEOUT seconds.  If the TMOUT variable is "
+"set,\n"
+"    its value is the default timeout.  The return code is zero, unless end-"
+"of-file\n"
+"    is encountered, read times out, or an invalid file descriptor is "
+"supplied as\n"
+"    the argument to -u."
+msgstr ""
+" One line is read from the standard input, or from file descriptor FD if "
+"the\n"
+"    -u option is supplied, and the first word is assigned to the first "
+"NAME,\n"
+"    the second word to the second NAME, and so on, with leftover words "
+"assigned\n"
+"    to the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters.  If no NAMEs are supplied, the line read is stored in the "
+"REPLY\n"
+"    variable.  If the -r option is given, this signifies ‘\e[1mraw\e[0m’ input, "
+"and\n"
+"    backslash escaping is disabled.  The -d option causes read to continue\n"
+"    until the first character of DELIM is read, rather than newline.  If the "
+"-p\n"
+"    option is supplied, the string PROMPT is output without a trailing "
+"newline\n"
+"    before attempting to read.  If -a is supplied, the words read are "
+"assigned\n"
+"    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
+"and\n"
+"    the shell is interactive, readline is used to obtain the line.  If -n "
+"is\n"
+"    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+"    characters have been read.  The -s option causes input coming from a\n"
+"    terminal to not be echoed.\n"
+"    \n"
+"    The -t option causes read to time out and return failure if a complete "
+"line\n"
+"    of input is not read within TIMEOUT seconds.  If the TMOUT variable is "
+"set,\n"
+"    its value is the default timeout.  The return code is zero, unless end-"
+"of-file\n"
+"    is encountered, read times out, or an invalid file descriptor is "
+"supplied as\n"
+"    the argument to -u."
 
-#: builtins.c:521
-msgid "Exec FILE, replacing this shell with the specified program."
-msgstr "Exec FILE, replacing this shell with the specified program."
+#: builtins.c:756
+msgid ""
+" Causes a function to exit with the return value specified by N.  If N\n"
+"    is omitted, the return status is that of the last command."
+msgstr ""
+" Causes a function to exit with the return value specified by N.  If N\n"
+"    is omitted, the return status is that of the last command."
 
-#: builtins.c:522
-msgid "If FILE is not specified, the redirections take effect in this"
-msgstr "If FILE is not specified, the redirections take effect in this"
+#: builtins.c:763
+msgid ""
+"     -a  Mark variables which are modified or created for export.\n"
+"        -b  Notify of job termination immediately.\n"
+"        -e  Exit immediately if a command exits with a non-zero status.\n"
+"        -f  Disable file name generation (globbing).\n"
+"        -h  Remember the location of commands as they are looked up.\n"
+"        -k  All assignment arguments are placed in the environment for a\n"
+"            command, not just those that precede the command name.\n"
+"        -m  Job control is enabled.\n"
+"        -n  Read commands but do not execute them.\n"
+"        -o option-name\n"
+"            Set the variable corresponding to option-name:\n"
+"                allexport    same as -a\n"
+"                braceexpand  same as -B\n"
+"                emacs        use an emacs-style line editing interface\n"
+"                errexit      same as -e\n"
+"                errtrace     same as -E\n"
+"                functrace    same as -T\n"
+"                hashall      same as -h\n"
+"                histexpand   same as -H\n"
+"                history      enable command history\n"
+"                ignoreeof    the shell will not exit upon reading EOF\n"
+"                interactive-comments\n"
+"                             allow comments to appear in interactive "
+"commands\n"
+"                keyword      same as -k\n"
+"                monitor      same as -m\n"
+"                noclobber    same as -C\n"
+"                noexec       same as -n\n"
+"                noglob       same as -f\n"
+"                nolog        currently accepted but ignored\n"
+"                notify       same as -b\n"
+"                nounset      same as -u\n"
+"                onecmd       same as -t\n"
+"                physical     same as -P\n"
+"                pipefail     the return value of a pipeline is the status "
+"of\n"
+"                             the last command to exit with a non-zero "
+"status,\n"
+"                             or zero if no command exited with a non-zero "
+"status\n"
+"                posix        change the behavior of bash where the default\n"
+"                             operation differs from the 1003.2 standard to\n"
+"                             match the standard\n"
+"                privileged   same as -p\n"
+"                verbose      same as -v\n"
+"                vi           use a vi-style line editing interface\n"
+"                xtrace       same as -x\n"
+"        -p  Turned on whenever the real and effective user ids do not "
+"match.\n"
+"            Disables processing of the $ENV file and importing of shell\n"
+"            functions.  Turning this option off causes the effective uid "
+"and\n"
+"            gid to be set to the real uid and gid.\n"
+"        -t  Exit after reading and executing one command.\n"
+"        -u  Treat unset variables as an error when substituting.\n"
+"        -v  Print shell input lines as they are read.\n"
+"        -x  Print commands and their arguments as they are executed.\n"
+"        -B  the shell will perform brace expansion\n"
+"        -C  If set, disallow existing regular files to be overwritten\n"
+"            by redirection of output.\n"
+"        -E  If set, the ERR trap is inherited by shell functions.\n"
+"        -H  Enable ! style history substitution.  This flag is on\n"
+"            by default when the shell is interactive.\n"
+"        -P  If set, do not follow symbolic links when executing commands\n"
+"            such as cd which change the current directory.\n"
+"        -T  If set, the DEBUG trap is inherited by shell functions.\n"
+"        -   Assign any remaining arguments to the positional parameters.\n"
+"            The -x and -v options are turned off.\n"
+"    \n"
+"    Using + rather than - causes these flags to be turned off.  The\n"
+"    flags can also be used upon invocation of the shell.  The current\n"
+"    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+"    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
+"    ARGs are given, all shell variables are printed."
+msgstr ""
+"     -a  Mark variables which are modified or created for export.\n"
+"        -b  Notify of job termination immediately.\n"
+"        -e  Exit immediately if a command exits with a non-zero status.\n"
+"        -f  Disable file name generation (globbing).\n"
+"        -h  Remember the location of commands as they are looked up.\n"
+"        -k  All assignment arguments are placed in the environment for a\n"
+"            command, not just those that precede the command name.\n"
+"        -m  Job control is enabled.\n"
+"        -n  Read commands but do not execute them.\n"
+"        -o option-name\n"
+"            Set the variable corresponding to option-name:\n"
+"                allexport    same as -a\n"
+"                braceexpand  same as -B\n"
+"                emacs        use an emacs-style line editing interface\n"
+"                errexit      same as -e\n"
+"                errtrace     same as -E\n"
+"                functrace    same as -T\n"
+"                hashall      same as -h\n"
+"                histexpand   same as -H\n"
+"                history      enable command history\n"
+"                ignoreeof    the shell will not exit upon reading EOF\n"
+"                interactive-comments\n"
+"                             allow comments to appear in interactive "
+"commands\n"
+"                keyword      same as -k\n"
+"                monitor      same as -m\n"
+"                noclobber    same as -C\n"
+"                noexec       same as -n\n"
+"                noglob       same as -f\n"
+"                nolog        currently accepted but ignored\n"
+"                notify       same as -b\n"
+"                nounset      same as -u\n"
+"                onecmd       same as -t\n"
+"                physical     same as -P\n"
+"                pipefail     the return value of a pipeline is the status "
+"of\n"
+"                             the last command to exit with a non-zero "
+"status,\n"
+"                             or zero if no command exited with a non-zero "
+"status\n"
+"                posix        change the behavior of bash where the default\n"
+"                             operation differs from the 1003.2 standard to\n"
+"                             match the standard\n"
+"                privileged   same as -p\n"
+"                verbose      same as -v\n"
+"                vi           use a vi-style line editing interface\n"
+"                xtrace       same as -x\n"
+"        -p  Turned on whenever the real and effective user ids do not "
+"match.\n"
+"            Disables processing of the $ENV file and importing of shell\n"
+"            functions.  Turning this option off causes the effective uid "
+"and\n"
+"            gid to be set to the real uid and gid.\n"
+"        -t  Exit after reading and executing one command.\n"
+"        -u  Treat unset variables as an error when substituting.\n"
+"        -v  Print shell input lines as they are read.\n"
+"        -x  Print commands and their arguments as they are executed.\n"
+"        -B  the shell will perform brace expansion\n"
+"        -C  If set, disallow existing regular files to be overwritten\n"
+"            by redirection of output.\n"
+"        -E  If set, the ERR trap is inherited by shell functions.\n"
+"        -H  Enable ! style history substitution.  This flag is on\n"
+"            by default when the shell is interactive.\n"
+"        -P  If set, do not follow symbolic links when executing commands\n"
+"            such as cd which change the current directory.\n"
+"        -T  If set, the DEBUG trap is inherited by shell functions.\n"
+"        -   Assign any remaining arguments to the positional parameters.\n"
+"            The -x and -v options are turned off.\n"
+"    \n"
+"    Using + rather than - causes these flags to be turned off.  The\n"
+"    flags can also be used upon invocation of the shell.  The current\n"
+"    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+"    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
+"    ARGs are given, all shell variables are printed."
 
-#: builtins.c:523
-msgid "shell.  If the first argument is `-l', then place a dash in the"
-msgstr "shell.  If the first argument is ‘\e[1m-l\e[0m’, then place a dash in the"
+#: builtins.c:836
+msgid ""
+" For each NAME, remove the corresponding variable or function.  Given\n"
+"    the `-v', unset will only act on variables.  Given the `-f' flag,\n"
+"    unset will only act on functions.  With neither flag, unset first\n"
+"    tries to unset a variable, and if that fails, then tries to unset a\n"
+"    function.  Some variables cannot be unset; also see readonly."
+msgstr ""
+" For each NAME, remove the corresponding variable or function.  Given\n"
+"    the ‘\e[1m-v\e[0m’, unset will only act on variables.  Given the ‘\e[1m-f\e[0m’ "
+"flag,\n"
+"    unset will only act on functions.  With neither flag, unset first\n"
+"    tries to unset a variable, and if that fails, then tries to unset a\n"
+"    function.  Some variables cannot be unset; also see readonly."
 
-#: builtins.c:524
-msgid "zeroth arg passed to FILE, as login does.  If the `-c' option"
-msgstr "zeroth arg passed to FILE, as login does.  If the ‘\e[1m-c\e[0m’ option"
+#: builtins.c:846
+msgid ""
+" NAMEs are marked for automatic export to the environment of\n"
+"    subsequently executed commands.  If the -f option is given,\n"
+"    the NAMEs refer to functions.  If no NAMEs are given, or if `-p'\n"
+"    is given, a list of all names that are exported in this shell is\n"
+"    printed.  An argument of `-n' says to remove the export property\n"
+"    from subsequent NAMEs.  An argument of `--' disables further option\n"
+"    processing."
+msgstr ""
+" NAMEs are marked for automatic export to the environment of\n"
+"    subsequently executed commands.  If the -f option is given,\n"
+"    the NAMEs refer to functions.  If no NAMEs are given, or if ‘\e[1m-p\e[0m’\n"
+"    is given, a list of all names that are exported in this shell is\n"
+"    printed.  An argument of ‘\e[1m-n\e[0m’ says to remove the export property\n"
+"    from subsequent NAMEs.  An argument of ‘\e[1m--\e[0m’ disables further "
+"option\n"
+"    processing."
 
-#: builtins.c:525
-msgid "is supplied, FILE is executed with a null environment.  The `-a'"
-msgstr "is supplied, FILE is executed with a null environment.  The ‘\e[1m-a\e[0m’"
+#: builtins.c:858
+msgid ""
+" The given NAMEs are marked readonly and the values of these NAMEs may\n"
+"    not be changed by subsequent assignment.  If the -f option is given,\n"
+"    then functions corresponding to the NAMEs are so marked.  If no\n"
+"    arguments are given, or if `-p' is given, a list of all readonly names\n"
+"    is printed.  The `-a' option means to treat each NAME as\n"
+"    an array variable.  An argument of `--' disables further option\n"
+"    processing."
+msgstr ""
+" The given NAMEs are marked readonly and the values of these NAMEs may\n"
+"    not be changed by subsequent assignment.  If the -f option is given,\n"
+"    then functions corresponding to the NAMEs are so marked.  If no\n"
+"    arguments are given, or if ‘\e[1m-p\e[0m’ is given, a list of all readonly "
+"names\n"
+"    is printed.  The ‘\e[1m-a\e[0m’ option means to treat each NAME as\n"
+"    an array variable.  An argument of ‘\e[1m--\e[0m’ disables further option\n"
+"    processing."
 
-#: builtins.c:526
-msgid "option means to make set argv[0] of the executed process to NAME."
-msgstr "option means to make set argv[0] of the executed process to NAME."
+#: builtins.c:870
+msgid ""
+" The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
+"    not given, it is assumed to be 1."
+msgstr ""
+" The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
+"    not given, it is assumed to be 1."
+
+#: builtins.c:877 builtins.c:886
+msgid ""
+" Read and execute commands from FILENAME and return.  The pathnames\n"
+"    in $PATH are used to find the directory containing FILENAME.  If any\n"
+"    ARGUMENTS are supplied, they become the positional parameters when\n"
+"    FILENAME is executed."
+msgstr ""
+" Read and execute commands from FILENAME and return.  The pathnames\n"
+"    in $PATH are used to find the directory containing FILENAME.  If any\n"
+"    ARGUMENTS are supplied, they become the positional parameters when\n"
+"    FILENAME is executed."
+
+#: builtins.c:896
+msgid ""
+" Suspend the execution of this shell until it receives a SIGCONT\n"
+"    signal.  The `-f' if specified says not to complain about this\n"
+"    being a login shell if it is; just suspend anyway."
+msgstr ""
+" Suspend the execution of this shell until it receives a SIGCONT\n"
+"    signal.  The ‘\e[1m-f\e[0m’ if specified says not to complain about this\n"
+"    being a login shell if it is; just suspend anyway."
+
+#: builtins.c:905
+msgid ""
+" Exits with a status of 0 (true) or 1 (false) depending on\n"
+"    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
+"    expressions are often used to examine the status of a file.  There\n"
+"    are string operators as well, and numeric comparison operators.\n"
+"    \n"
+"    File operators:\n"
+"    \n"
+"        -a FILE        True if file exists.\n"
+"        -b FILE        True if file is block special.\n"
+"        -c FILE        True if file is character special.\n"
+"        -d FILE        True if file is a directory.\n"
+"        -e FILE        True if file exists.\n"
+"        -f FILE        True if file exists and is a regular file.\n"
+"        -g FILE        True if file is set-group-id.\n"
+"        -h FILE        True if file is a symbolic link.\n"
+"        -L FILE        True if file is a symbolic link.\n"
+"        -k FILE        True if file has its `sticky' bit set.\n"
+"        -p FILE        True if file is a named pipe.\n"
+"        -r FILE        True if file is readable by you.\n"
+"        -s FILE        True if file exists and is not empty.\n"
+"        -S FILE        True if file is a socket.\n"
+"        -t FD          True if FD is opened on a terminal.\n"
+"        -u FILE        True if the file is set-user-id.\n"
+"        -w FILE        True if the file is writable by you.\n"
+"        -x FILE        True if the file is executable by you.\n"
+"        -O FILE        True if the file is effectively owned by you.\n"
+"        -G FILE        True if the file is effectively owned by your group.\n"
+"        -N FILE        True if the file has been modified since it was last "
+"read.\n"
+"    \n"
+"      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
+"                       modification date).\n"
+"    \n"
+"      FILE1 -ot FILE2  True if file1 is older than file2.\n"
+"    \n"
+"      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
+"    \n"
+"    String operators:\n"
+"    \n"
+"        -z STRING      True if string is empty.\n"
+"    \n"
+"        -n STRING\n"
+"        STRING         True if string is not empty.\n"
+"    \n"
+"        STRING1 = STRING2\n"
+"                       True if the strings are equal.\n"
+"        STRING1 != STRING2\n"
+"                       True if the strings are not equal.\n"
+"        STRING1 < STRING2\n"
+"                       True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
+"        STRING1 > STRING2\n"
+"                       True if STRING1 sorts after STRING2 "
+"lexicographically.\n"
+"    \n"
+"    Other operators:\n"
+"    \n"
+"        -o OPTION      True if the shell option OPTION is enabled.\n"
+"        ! EXPR         True if expr is false.\n"
+"        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
+"        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
+"    \n"
+"        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
+"                       -lt, -le, -gt, or -ge.\n"
+"    \n"
+"    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
+"    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
+"    than ARG2."
+msgstr ""
+" Exits with a status of 0 (true) or 1 (false) depending on\n"
+"    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
+"    expressions are often used to examine the status of a file.  There\n"
+"    are string operators as well, and numeric comparison operators.\n"
+"    \n"
+"    File operators:\n"
+"    \n"
+"        -a FILE        True if file exists.\n"
+"        -b FILE        True if file is block special.\n"
+"        -c FILE        True if file is character special.\n"
+"        -d FILE        True if file is a directory.\n"
+"        -e FILE        True if file exists.\n"
+"        -f FILE        True if file exists and is a regular file.\n"
+"        -g FILE        True if file is set-group-id.\n"
+"        -h FILE        True if file is a symbolic link.\n"
+"        -L FILE        True if file is a symbolic link.\n"
+"        -k FILE        True if file has its ‘\e[1msticky\e[0m’ bit set.\n"
+"        -p FILE        True if file is a named pipe.\n"
+"        -r FILE        True if file is readable by you.\n"
+"        -s FILE        True if file exists and is not empty.\n"
+"        -S FILE        True if file is a socket.\n"
+"        -t FD          True if FD is opened on a terminal.\n"
+"        -u FILE        True if the file is set-user-id.\n"
+"        -w FILE        True if the file is writable by you.\n"
+"        -x FILE        True if the file is executable by you.\n"
+"        -O FILE        True if the file is effectively owned by you.\n"
+"        -G FILE        True if the file is effectively owned by your group.\n"
+"        -N FILE        True if the file has been modified since it was last "
+"read.\n"
+"    \n"
+"      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
+"                       modification date).\n"
+"    \n"
+"      FILE1 -ot FILE2  True if file1 is older than file2.\n"
+"    \n"
+"      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
+"    \n"
+"    String operators:\n"
+"    \n"
+"        -z STRING      True if string is empty.\n"
+"    \n"
+"        -n STRING\n"
+"        STRING         True if string is not empty.\n"
+"    \n"
+"        STRING1 = STRING2\n"
+"                       True if the strings are equal.\n"
+"        STRING1 != STRING2\n"
+"                       True if the strings are not equal.\n"
+"        STRING1 < STRING2\n"
+"                       True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
+"        STRING1 > STRING2\n"
+"                       True if STRING1 sorts after STRING2 "
+"lexicographically.\n"
+"    \n"
+"    Other operators:\n"
+"    \n"
+"        -o OPTION      True if the shell option OPTION is enabled.\n"
+"        ! EXPR         True if expr is false.\n"
+"        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
+"        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
+"    \n"
+"        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
+"                       -lt, -le, -gt, or -ge.\n"
+"    \n"
+"    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
+"    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
+"    than ARG2."
 
-#: builtins.c:527
-msgid "If the file cannot be executed and the shell is not interactive,"
-msgstr "If the file cannot be executed and the shell is not interactive,"
+#: builtins.c:975
+msgid ""
+" This is a synonym for the \"test\" builtin, but the last\n"
+"    argument must be a literal `]', to match the opening `['."
+msgstr ""
+" This is a synonym for the “\e[1mtest\e[0m” builtin, but the last\n"
+"    argument must be a literal ‘\e[1m]\e[0m’, to match the opening ‘\e[1m[\e[0m’."
+
+#: builtins.c:982
+msgid ""
+" Print the accumulated user and system times for processes run from\n"
+"    the shell."
+msgstr ""
+" Print the accumulated user and system times for processes run from\n"
+"    the shell."
+
+#: builtins.c:989
+msgid ""
+" The command ARG is to be read and executed when the shell receives\n"
+"    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC\n"
+"    is supplied) or `-', each specified signal is reset to its original\n"
+"    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
+"    shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)\n"
+"    the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC\n"
+"    is DEBUG, ARG is executed after every simple command.  If the`-p' "
+"option\n"
+"    is supplied then the trap commands associated with each SIGNAL_SPEC are\n"
+"    displayed.  If no arguments are supplied or if only `-p' is given, trap\n"
+"    prints the list of commands associated with each signal.  Each "
+"SIGNAL_SPEC\n"
+"    is either a signal name in <signal.h> or a signal number.  Signal names\n"
+"    are case insensitive and the SIG prefix is optional.  `trap -l' prints\n"
+"    a list of signal names and their corresponding numbers.  Note that a\n"
+"    signal can be sent to the shell with \"kill -signal $$\"."
+msgstr ""
+" The command ARG is to be read and executed when the shell receives\n"
+"    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC\n"
+"    is supplied) or ‘\e[1m-\e[0m’, each specified signal is reset to its "
+"original\n"
+"    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
+"    shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)\n"
+"    the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC\n"
+"    is DEBUG, ARG is executed after every simple command.  If the‘\e[1m-p\e[0m’ "
+"option\n"
+"    is supplied then the trap commands associated with each SIGNAL_SPEC are\n"
+"    displayed.  If no arguments are supplied or if only ‘\e[1m-p\e[0m’ is given, "
+"trap\n"
+"    prints the list of commands associated with each signal.  Each "
+"SIGNAL_SPEC\n"
+"    is either a signal name in <signal.h> or a signal number.  Signal names\n"
+"    are case insensitive and the SIG prefix is optional.  ‘\e[1mtrap -l\e[0m’ "
+"prints\n"
+"    a list of signal names and their corresponding numbers.  Note that a\n"
+"    signal can be sent to the shell with “\e[1mkill -signal $$\e[0m”."
 
-#: builtins.c:528
-msgid "then the shell exits, unless the shell option `execfail' is set."
-msgstr "then the shell exits, unless the shell option ‘\e[1mexecfail\e[0m’ is set."
+#: builtins.c:1008
+msgid ""
+" For each NAME, indicate how it would be interpreted if used as a\n"
+"    command name.\n"
+"    \n"
+"    If the -t option is used, `type' outputs a single word which is one of\n"
+"    `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n"
+"    alias, shell reserved word, shell function, shell builtin, disk file,\n"
+"    or unfound, respectively.\n"
+"    \n"
+"    If the -p flag is used, `type' either returns the name of the disk\n"
+"    file that would be executed, or nothing if `type -t NAME' would not\n"
+"    return `file'.\n"
+"    \n"
+"    If the -a flag is used, `type' displays all of the places that contain\n"
+"    an executable named `file'.  This includes aliases, builtins, and\n"
+"    functions, if and only if the -p flag is not also used.\n"
+"    \n"
+"    The -f flag suppresses shell function lookup.\n"
+"    \n"
+"    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+"    builtin, or function, and returns the name of the disk file that would\n"
+"    be executed."
+msgstr ""
+" For each NAME, indicate how it would be interpreted if used as a\n"
+"    command name.\n"
+"    \n"
+"    If the -t option is used, ‘\e[1mtype\e[0m’ outputs a single word which is "
+"one of\n"
+"    ‘\e[1malias\e[0m’, ‘\e[1mkeyword\e[0m’, ‘\e[1mfunction\e[0m’, ‘\e[1mbuiltin\e[0m’, "
+"‘\e[1mfile\e[0m’ or ‘\e[1m\e[0m’, if NAME is an\n"
+"    alias, shell reserved word, shell function, shell builtin, disk file,\n"
+"    or unfound, respectively.\n"
+"    \n"
+"    If the -p flag is used, ‘\e[1mtype\e[0m’ either returns the name of the "
+"disk\n"
+"    file that would be executed, or nothing if ‘\e[1mtype -t NAME\e[0m’ would "
+"not\n"
+"    return ‘\e[1mfile\e[0m’.\n"
+"    \n"
+"    If the -a flag is used, ‘\e[1mtype\e[0m’ displays all of the places that "
+"contain\n"
+"    an executable named ‘\e[1mfile\e[0m’.  This includes aliases, builtins, and\n"
+"    functions, if and only if the -p flag is not also used.\n"
+"    \n"
+"    The -f flag suppresses shell function lookup.\n"
+"    \n"
+"    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+"    builtin, or function, and returns the name of the disk file that would\n"
+"    be executed."
 
-#: builtins.c:534
-msgid "Exit the shell with a status of N.  If N is omitted, the exit status"
-msgstr "Exit the shell with a status of N.  If N is omitted, the exit status"
+#: builtins.c:1035
+msgid ""
+" Ulimit provides control over the resources available to processes\n"
+"    started by the shell, on systems that allow such control.  If an\n"
+"    option is given, it is interpreted as follows:\n"
+"    \n"
+"        -S\tuse the `soft' resource limit\n"
+"        -H\tuse the `hard' resource limit\n"
+"        -a\tall current limits are reported\n"
+"        -c\tthe maximum size of core files created\n"
+"        -d\tthe maximum size of a process's data segment\n"
+"        -f\tthe maximum size of files created by the shell\n"
+"        -i  the maximum number of pending signals\n"
+"        -l\tthe maximum size a process may lock into memory\n"
+"        -m\tthe maximum resident set size\n"
+"        -n\tthe maximum number of open file descriptors\n"
+"        -p\tthe pipe buffer size\n"
+"        -q  the maximum number of bytes in POSIX message queues\n"
+"        -s\tthe maximum stack size\n"
+"        -t\tthe maximum amount of cpu time in seconds\n"
+"        -u\tthe maximum number of user processes\n"
+"        -v\tthe size of virtual memory\n"
+"        -x  the maximum number of file locks\n"
+"    \n"
+"    If LIMIT is given, it is the new value of the specified resource;\n"
+"    the special LIMIT values `soft', `hard', and `unlimited' stand for\n"
+"    the current soft limit, the current hard limit, and no limit, "
+"respectively.\n"
+"    Otherwise, the current value of the specified resource is printed.\n"
+"    If no option is given, then -f is assumed.  Values are in 1024-byte\n"
+"    increments, except for -t, which is in seconds, -p, which is in\n"
+"    increments of 512 bytes, and -u, which is an unscaled number of\n"
+"    processes."
+msgstr ""
+" Ulimit provides control over the resources available to processes\n"
+"    started by the shell, on systems that allow such control.  If an\n"
+"    option is given, it is interpreted as follows:\n"
+"    \n"
+"        -S\tuse the ‘\e[1msoft\e[0m’ resource limit\n"
+"        -H\tuse the ‘\e[1mhard\e[0m’ resource limit\n"
+"        -a\tall current limits are reported\n"
+"        -c\tthe maximum size of core files created\n"
+"        -d\tthe maximum size of a process's data segment\n"
+"        -f\tthe maximum size of files created by the shell\n"
+"        -i  the maximum number of pending signals\n"
+"        -l\tthe maximum size a process may lock into memory\n"
+"        -m\tthe maximum resident set size\n"
+"        -n\tthe maximum number of open file descriptors\n"
+"        -p\tthe pipe buffer size\n"
+"        -q  the maximum number of bytes in POSIX message queues\n"
+"        -s\tthe maximum stack size\n"
+"        -t\tthe maximum amount of cpu time in seconds\n"
+"        -u\tthe maximum number of user processes\n"
+"        -v\tthe size of virtual memory\n"
+"        -x  the maximum number of file locks\n"
+"    \n"
+"    If LIMIT is given, it is the new value of the specified resource;\n"
+"    the special LIMIT values ‘\e[1msoft\e[0m’, ‘\e[1mhard\e[0m’, and ‘\e[1munlimited\e"
+"[0m’ stand for\n"
+"    the current soft limit, the current hard limit, and no limit, "
+"respectively.\n"
+"    Otherwise, the current value of the specified resource is printed.\n"
+"    If no option is given, then -f is assumed.  Values are in 1024-byte\n"
+"    increments, except for -t, which is in seconds, -p, which is in\n"
+"    increments of 512 bytes, and -u, which is an unscaled number of\n"
+"    processes."
+
+#: builtins.c:1071
+msgid ""
+" The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
+"    `-S' is supplied, the current value of the mask is printed.  The `-S'\n"
+"    option makes the output symbolic; otherwise an octal number is output.\n"
+"    If `-p' is supplied, and MODE is omitted, the output is in a form\n"
+"    that may be used as input.  If MODE begins with a digit, it is\n"
+"    interpreted as an octal number, otherwise it is a symbolic mode string\n"
+"    like that accepted by chmod(1)."
+msgstr ""
+" The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
+"    ‘\e[1m-S\e[0m’ is supplied, the current value of the mask is printed.  The "
+"‘\e[1m-S\e[0m’\n"
+"    option makes the output symbolic; otherwise an octal number is output.\n"
+"    If ‘\e[1m-p\e[0m’ is supplied, and MODE is omitted, the output is in a form\n"
+"    that may be used as input.  If MODE begins with a digit, it is\n"
+"    interpreted as an octal number, otherwise it is a symbolic mode string\n"
+"    like that accepted by chmod(1)."
+
+#: builtins.c:1084
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N may be a process ID or a job\n"
+"    specification; if a job spec is given, all processes in the job's\n"
+"    pipeline are waited for."
+msgstr ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N may be a process ID or a job\n"
+"    specification; if a job spec is given, all processes in the job's\n"
+"    pipeline are waited for."
+
+#: builtins.c:1096
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N is a process ID; if it is not given,\n"
+"    all child processes of the shell are waited for."
+msgstr ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N is a process ID; if it is not given,\n"
+"    all child processes of the shell are waited for."
+
+#: builtins.c:1106
+msgid ""
+" The `for' loop executes a sequence of commands for each member in a\n"
+"    list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is\n"
+"    assumed.  For each element in WORDS, NAME is set to that element, and\n"
+"    the COMMANDS are executed."
+msgstr ""
+" The ‘\e[1mfor\e[0m’ loop executes a sequence of commands for each member in a\n"
+"    list of items.  If ‘\e[1min WORDS ...;\e[0m’ is not present, then ‘\e[1min “\e[1m"
+"$@\e[0m”\e[0m’ is\n"
+"    assumed.  For each element in WORDS, NAME is set to that element, and\n"
+"    the COMMANDS are executed."
 
-#: builtins.c:535
-msgid "is that of the last command executed."
-msgstr "is that of the last command executed."
+#: builtins.c:1115
+msgid ""
+" Equivalent to\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMMANDS\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is\n"
+"    omitted, it behaves as if it evaluates to 1."
+msgstr ""
+" Equivalent to\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMMANDS\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is\n"
+"    omitted, it behaves as if it evaluates to 1."
 
-#: builtins.c:541
-msgid "Logout of a login shell."
-msgstr "Logout of a login shell."
+#: builtins.c:1128
+msgid ""
+" The WORDS are expanded, generating a list of words.  The\n"
+"    set of expanded words is printed on the standard error, each\n"
+"    preceded by a number.  If `in WORDS' is not present, `in \"$@\"'\n"
+"    is assumed.  The PS3 prompt is then displayed and a line read\n"
+"    from the standard input.  If the line consists of the number\n"
+"    corresponding to one of the displayed words, then NAME is set\n"
+"    to that word.  If the line is empty, WORDS and the prompt are\n"
+"    redisplayed.  If EOF is read, the command completes.  Any other\n"
+"    value read causes NAME to be set to null.  The line read is saved\n"
+"    in the variable REPLY.  COMMANDS are executed after each selection\n"
+"    until a break command is executed."
+msgstr ""
+" The WORDS are expanded, generating a list of words.  The\n"
+"    set of expanded words is printed on the standard error, each\n"
+"    preceded by a number.  If ‘\e[1min WORDS\e[0m’ is not present, ‘\e[1min “\e[1m$@\e"
+"[0m”\e[0m’\n"
+"    is assumed.  The PS3 prompt is then displayed and a line read\n"
+"    from the standard input.  If the line consists of the number\n"
+"    corresponding to one of the displayed words, then NAME is set\n"
+"    to that word.  If the line is empty, WORDS and the prompt are\n"
+"    redisplayed.  If EOF is read, the command completes.  Any other\n"
+"    value read causes NAME to be set to null.  The line read is saved\n"
+"    in the variable REPLY.  COMMANDS are executed after each selection\n"
+"    until a break command is executed."
 
-#: builtins.c:548
+#: builtins.c:1144
 msgid ""
-"fc is used to list or edit and re-execute commands from the history list."
+" Execute PIPELINE and print a summary of the real time, user CPU time,\n"
+"    and system CPU time spent executing PIPELINE when it terminates.\n"
+"    The return status is the return status of PIPELINE.  The `-p' option\n"
+"    prints the timing summary in a slightly different format.  This uses\n"
+"    the value of the TIMEFORMAT variable as the output format."
 msgstr ""
-"fc is used to list or edit and re-execute commands from the history list."
-
-#: builtins.c:549
-msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-msgstr "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-
-#: builtins.c:550
-msgid "string, which means the most recent command beginning with that"
-msgstr "string, which means the most recent command beginning with that"
-
-#: builtins.c:551
-msgid "string."
-msgstr "string."
+" Execute PIPELINE and print a summary of the real time, user CPU time,\n"
+"    and system CPU time spent executing PIPELINE when it terminates.\n"
+"    The return status is the return status of PIPELINE.  The ‘\e[1m-p\e[0m’ "
+"option\n"
+"    prints the timing summary in a slightly different format.  This uses\n"
+"    the value of the TIMEFORMAT variable as the output format."
 
-#: builtins.c:553
+#: builtins.c:1154
 msgid ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
+" Selectively execute COMMANDS based upon WORD matching PATTERN.  The\n"
+"    `|' is used to separate multiple patterns."
 msgstr ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-
-#: builtins.c:554
-msgid "      then vi."
-msgstr "      then vi."
-
-#: builtins.c:556
-msgid "   -l means list lines instead of editing."
-msgstr "   -l means list lines instead of editing."
-
-#: builtins.c:557
-msgid "   -n means no line numbers listed."
-msgstr "   -n means no line numbers listed."
+" Selectively execute COMMANDS based upon WORD matching PATTERN.  The\n"
+"    ‘\e[1m|\e[0m’ is used to separate multiple patterns."
 
-#: builtins.c:558
+#: builtins.c:1161
 msgid ""
-"   -r means reverse the order of the lines (making it newest listed first)."
-msgstr ""
-"   -r means reverse the order of the lines (making it newest listed first)."
+" The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
+"    executed in turn, and if its exit status is zero, the corresponding\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
+"    if no condition tested true."
+msgstr ""
+" The ‘\e[1mif COMMANDS\e[0m’ list is executed.  If its exit status is zero, then "
+"the\n"
+"    ‘\e[1mthen COMMANDS\e[0m’ list is executed.  Otherwise, each ‘\e[1melif "
+"COMMANDS\e[0m’ list is\n"
+"    executed in turn, and if its exit status is zero, the corresponding\n"
+"    ‘\e[1mthen COMMANDS\e[0m’ list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the ‘\e[1melse COMMANDS\e[0m’ list is executed, if present.  The exit status "
+"of the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
+"    if no condition tested true."
+
+#: builtins.c:1173
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `while' COMMANDS has an exit status of zero."
+msgstr ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    ‘\e[1mwhile\e[0m’ COMMANDS has an exit status of zero."
+
+#: builtins.c:1180
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `until' COMMANDS has an exit status which is not zero."
+msgstr ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    ‘\e[1muntil\e[0m’ COMMANDS has an exit status which is not zero."
+
+#: builtins.c:1187
+msgid ""
+" Create a simple command invoked by NAME which runs COMMANDS.\n"
+"    Arguments on the command line along with NAME are passed to the\n"
+"    function as $0 .. $n."
+msgstr ""
+" Create a simple command invoked by NAME which runs COMMANDS.\n"
+"    Arguments on the command line along with NAME are passed to the\n"
+"    function as $0 .. $n."
+
+#: builtins.c:1195
+msgid ""
+" Run a set of commands in a group.  This is one way to redirect an\n"
+"    entire set of commands."
+msgstr ""
+" Run a set of commands in a group.  This is one way to redirect an\n"
+"    entire set of commands."
+
+#: builtins.c:1202
+msgid ""
+" Equivalent to the JOB_SPEC argument to the `fg' command.  Resume a\n"
+"    stopped or background job.  JOB_SPEC can specify either a job name\n"
+"    or a job number.  Following JOB_SPEC with a `&' places the job in\n"
+"    the background, as if the job specification had been supplied as an\n"
+"    argument to `bg'."
+msgstr ""
+" Equivalent to the JOB_SPEC argument to the ‘\e[1mfg\e[0m’ command.  Resume a\n"
+"    stopped or background job.  JOB_SPEC can specify either a job name\n"
+"    or a job number.  Following JOB_SPEC with a ‘\e[1m&\e[0m’ places the job in\n"
+"    the background, as if the job specification had been supplied as an\n"
+"    argument to ‘\e[1mbg\e[0m’."
+
+#: builtins.c:1212
+msgid ""
+" The EXPRESSION is evaluated according to the rules for arithmetic\n"
+"    evaluation.  Equivalent to \"let EXPRESSION\"."
+msgstr ""
+" The EXPRESSION is evaluated according to the rules for arithmetic\n"
+"    evaluation.  Equivalent to “\e[1mlet EXPRESSION\e[0m”."
+
+#: builtins.c:1219
+msgid ""
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators\n"
+"    \n"
+"    \t( EXPRESSION )\tReturns the value of EXPRESSION\n"
+"    \t! EXPRESSION\tTrue if EXPRESSION is false; else false\n"
+"    \tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false\n"
+"    \tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false\n"
+"    \n"
+"    When the `==' and `!=' operators are used, the string to the right of "
+"the\n"
+"    operator is used as a pattern and pattern matching is performed.  The\n"
+"    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to\n"
+"    determine the expression's value."
+msgstr ""
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the ‘\e[1mtest\e[0m’ builtin, and may be combined using the following "
+"operators\n"
+"    \n"
+"    \t( EXPRESSION )\tReturns the value of EXPRESSION\n"
+"    \t! EXPRESSION\tTrue if EXPRESSION is false; else false\n"
+"    \tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false\n"
+"    \tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false\n"
+"    \n"
+"    When the ‘\e[1m==\e[0m’ and ‘\e[1m!=\e[0m’ operators are used, the string to the "
+"right of the\n"
+"    operator is used as a pattern and pattern matching is performed.  The\n"
+"    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to\n"
+"    determine the expression's value."
+
+#: builtins.c:1237
+msgid ""
+" BASH_VERSION    Version information for this Bash.\n"
+"    CDPATH          A colon-separated list of directories to search\n"
+"    \t\tfor directries given as arguments to `cd'.\n"
+"    GLOBIGNORE\tA colon-separated list of patterns describing filenames to\n"
+"    \t\tbe ignored by pathname expansion.\n"
+"    HISTFILE        The name of the file where your command history is "
+"stored.\n"
+"    HISTFILESIZE    The maximum number of lines this file can contain.\n"
+"    HISTSIZE        The maximum number of history lines that a running\n"
+"    \t\tshell can access.\n"
+"    HOME            The complete pathname to your login directory.\n"
+"    HOSTNAME\tThe name of the current host.\n"
+"    HOSTTYPE        The type of CPU this version of Bash is running under.\n"
+"    IGNOREEOF       Controls the action of the shell on receipt of an EOF\n"
+"    \t\tcharacter as the sole input.  If set, then the value\n"
+"    \t\tof it is the number of EOF characters that can be seen\n"
+"    \t\tin a row on an empty line before the shell will exit\n"
+"    \t\t(default 10).  When unset, EOF signifies the end of input.\n"
+"    MACHTYPE\tA string describing the current system Bash is running on.\n"
+"    MAILCHECK\tHow often, in seconds, Bash checks for new mail.\n"
+"    MAILPATH\tA colon-separated list of filenames which Bash checks\n"
+"    \t\tfor new mail.\n"
+"    OSTYPE\t\tThe version of Unix this version of Bash is running on.\n"
+"    PATH            A colon-separated list of directories to search when\n"
+"    \t\tlooking for commands.\n"
+"    PROMPT_COMMAND  A command to be executed before the printing of each\n"
+"    \t\tprimary prompt.\n"
+"    PS1             The primary prompt string.\n"
+"    PS2             The secondary prompt string.\n"
+"    PWD\t\tThe full pathname of the current directory.\n"
+"    SHELLOPTS\tA colon-separated list of enabled shell options.\n"
+"    TERM            The name of the current terminal type.\n"
+"    TIMEFORMAT\tThe output format for timing statistics displayed by the\n"
+"    \t\t`time' reserved word.\n"
+"    auto_resume     Non-null means a command word appearing on a line by\n"
+"    \t\titself is first looked for in the list of currently\n"
+"    \t\tstopped jobs.  If found there, that job is foregrounded.\n"
+"    \t\tA value of `exact' means that the command word must\n"
+"    \t\texactly match a command in the list of stopped jobs.  A\n"
+"    \t\tvalue of `substring' means that the command word must\n"
+"    \t\tmatch a substring of the job.  Any other value means that\n"
+"    \t\tthe command must be a prefix of a stopped job.\n"
+"    histchars       Characters controlling history expansion and quick\n"
+"    \t\tsubstitution.  The first character is the history\n"
+"    \t\tsubstitution character, usually `!'.  The second is\n"
+"    \t\tthe `quick substitution' character, usually `^'.  The\n"
+"    \t\tthird is the `history comment' character, usually `#'.\n"
+"    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
+"    \t\tcommands should be saved on the history list.\n"
+msgstr ""
+" BASH_VERSION    Version information for this Bash.\n"
+"    CDPATH          A colon-separated list of directories to search\n"
+"    \t\tfor directries given as arguments to ‘\e[1mcd\e[0m’.\n"
+"    GLOBIGNORE\tA colon-separated list of patterns describing filenames to\n"
+"    \t\tbe ignored by pathname expansion.\n"
+"    HISTFILE        The name of the file where your command history is "
+"stored.\n"
+"    HISTFILESIZE    The maximum number of lines this file can contain.\n"
+"    HISTSIZE        The maximum number of history lines that a running\n"
+"    \t\tshell can access.\n"
+"    HOME            The complete pathname to your login directory.\n"
+"    HOSTNAME\tThe name of the current host.\n"
+"    HOSTTYPE        The type of CPU this version of Bash is running under.\n"
+"    IGNOREEOF       Controls the action of the shell on receipt of an EOF\n"
+"    \t\tcharacter as the sole input.  If set, then the value\n"
+"    \t\tof it is the number of EOF characters that can be seen\n"
+"    \t\tin a row on an empty line before the shell will exit\n"
+"    \t\t(default 10).  When unset, EOF signifies the end of input.\n"
+"    MACHTYPE\tA string describing the current system Bash is running on.\n"
+"    MAILCHECK\tHow often, in seconds, Bash checks for new mail.\n"
+"    MAILPATH\tA colon-separated list of filenames which Bash checks\n"
+"    \t\tfor new mail.\n"
+"    OSTYPE\t\tThe version of Unix this version of Bash is running on.\n"
+"    PATH            A colon-separated list of directories to search when\n"
+"    \t\tlooking for commands.\n"
+"    PROMPT_COMMAND  A command to be executed before the printing of each\n"
+"    \t\tprimary prompt.\n"
+"    PS1             The primary prompt string.\n"
+"    PS2             The secondary prompt string.\n"
+"    PWD\t\tThe full pathname of the current directory.\n"
+"    SHELLOPTS\tA colon-separated list of enabled shell options.\n"
+"    TERM            The name of the current terminal type.\n"
+"    TIMEFORMAT\tThe output format for timing statistics displayed by the\n"
+"    \t\t‘\e[1mtime\e[0m’ reserved word.\n"
+"    auto_resume     Non-null means a command word appearing on a line by\n"
+"    \t\titself is first looked for in the list of currently\n"
+"    \t\tstopped jobs.  If found there, that job is foregrounded.\n"
+"    \t\tA value of ‘\e[1mexact\e[0m’ means that the command word must\n"
+"    \t\texactly match a command in the list of stopped jobs.  A\n"
+"    \t\tvalue of ‘\e[1msubstring\e[0m’ means that the command word must\n"
+"    \t\tmatch a substring of the job.  Any other value means that\n"
+"    \t\tthe command must be a prefix of a stopped job.\n"
+"    histchars       Characters controlling history expansion and quick\n"
+"    \t\tsubstitution.  The first character is the history\n"
+"    \t\tsubstitution character, usually ‘\e[1m!\e[0m’.  The second is\n"
+"    \t\tthe ‘\e[1mquick substitution\e[0m’ character, usually ‘\e[1m^\e[0m’.  The\n"
+"    \t\tthird is the ‘\e[1mhistory comment\e[0m’ character, usually ‘\e[1m#\e[0m’.\n"
+"    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
+"    \t\tcommands should be saved on the history list.\n"
+
+#: builtins.c:1292
+msgid ""
+" Adds a directory to the top of the directory stack, or rotates\n"
+"    the stack, making the new top of the stack the current working\n"
+"    directory.  With no arguments, exchanges the top two directories.\n"
+"    \n"
+"    +N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the left of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the right of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when adding directories\n"
+"    \tto the stack, so only the stack is manipulated.\n"
+"    \n"
+"    dir\tadds DIR to the directory stack at the top, making it the\n"
+"    \tnew current working directory.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
+msgstr ""
+" Adds a directory to the top of the directory stack, or rotates\n"
+"    the stack, making the new top of the stack the current working\n"
+"    directory.  With no arguments, exchanges the top two directories.\n"
+"    \n"
+"    +N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the left of the list shown by ‘\e[1mdirs\e[0m’, starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the right of the list shown by ‘\e[1mdirs\e[0m’, starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when adding directories\n"
+"    \tto the stack, so only the stack is manipulated.\n"
+"    \n"
+"    dir\tadds DIR to the directory stack at the top, making it the\n"
+"    \tnew current working directory.\n"
+"    \n"
+"    You can see the directory stack with the ‘\e[1mdirs\e[0m’ command."
 
-#: builtins.c:560
-msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-msgstr "With the ‘\e[1mfc -s [pat=rep ...] [command]\e[0m’ format, the command is"
+#: builtins.c:1318
+msgid ""
+" Removes entries from the directory stack.  With no arguments,\n"
+"    removes the top directory from the stack, and cd's to the new\n"
+"    top directory.\n"
+"    \n"
+"    +N\tremoves the Nth entry counting from the left of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd +0'\n"
+"    \tremoves the first directory, `popd +1' the second.\n"
+"    \n"
+"    -N\tremoves the Nth entry counting from the right of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd -0'\n"
+"    \tremoves the last directory, `popd -1' the next to last.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when removing directories\n"
+"    \tfrom the stack, so only the stack is manipulated.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
+msgstr ""
+" Removes entries from the directory stack.  With no arguments,\n"
+"    removes the top directory from the stack, and cd's to the new\n"
+"    top directory.\n"
+"    \n"
+"    +N\tremoves the Nth entry counting from the left of the list\n"
+"    \tshown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd +0\e"
+"[0m’\n"
+"    \tremoves the first directory, ‘\e[1mpopd +1\e[0m’ the second.\n"
+"    \n"
+"    -N\tremoves the Nth entry counting from the right of the list\n"
+"    \tshown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd -0\e"
+"[0m’\n"
+"    \tremoves the last directory, ‘\e[1mpopd -1\e[0m’ the next to last.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when removing directories\n"
+"    \tfrom the stack, so only the stack is manipulated.\n"
+"    \n"
+"    You can see the directory stack with the ‘\e[1mdirs\e[0m’ command."
 
-#: builtins.c:561
-msgid "re-executed after the substitution OLD=NEW is performed."
-msgstr "re-executed after the substitution OLD=NEW is performed."
+#: builtins.c:1341
+msgid ""
+" Display the list of currently remembered directories.  Directories\n"
+"    find their way onto the list with the `pushd' command; you can get\n"
+"    back up through the list with the `popd' command.\n"
+"    \n"
+"    The -l flag specifies that `dirs' should not print shorthand versions\n"
+"    of directories which are relative to your home directory.  This means\n"
+"    that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag\n"
+"    causes `dirs' to print the directory stack with one entry per line,\n"
+"    prepending the directory name with its position in the stack.  The -p\n"
+"    flag does the same thing, but the stack position is not prepended.\n"
+"    The -c flag clears the directory stack by deleting all of the elements.\n"
+"    \n"
+"    +N\tdisplays the Nth entry counting from the left of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero.\n"
+"    \n"
+"    -N\tdisplays the Nth entry counting from the right of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero."
+msgstr ""
+" Display the list of currently remembered directories.  Directories\n"
+"    find their way onto the list with the ‘\e[1mpushd\e[0m’ command; you can "
+"get\n"
+"    back up through the list with the ‘\e[1mpopd\e[0m’ command.\n"
+"    \n"
+"    The -l flag specifies that ‘\e[1mdirs\e[0m’ should not print shorthand "
+"versions\n"
+"    of directories which are relative to your home directory.  This means\n"
+"    that ‘\e[1m~/bin\e[0m’ might be displayed as ‘\e[1m/homes/bfox/bin\e[0m’.  The -"
+"v flag\n"
+"    causes ‘\e[1mdirs\e[0m’ to print the directory stack with one entry per "
+"line,\n"
+"    prepending the directory name with its position in the stack.  The -p\n"
+"    flag does the same thing, but the stack position is not prepended.\n"
+"    The -c flag clears the directory stack by deleting all of the elements.\n"
+"    \n"
+"    +N\tdisplays the Nth entry counting from the left of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero.\n"
+"    \n"
+"    -N\tdisplays the Nth entry counting from the right of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero."
+
+#: builtins.c:1364
+msgid ""
+" Toggle the values of variables controlling optional behavior.\n"
+"    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
+"    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
+"    status indicates whether each OPTNAME is set or unset.  The -o\n"
+"    option restricts the OPTNAMEs to those defined for use with\n"
+"    `set -o'.  With no options, or with the -p option, a list of all\n"
+"    settable options is displayed, with an indication of whether or\n"
+"    not each is set."
+msgstr ""
+" Toggle the values of variables controlling optional behavior.\n"
+"    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
+"    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
+"    status indicates whether each OPTNAME is set or unset.  The -o\n"
+"    option restricts the OPTNAMEs to those defined for use with\n"
+"    ‘\e[1mset -o\e[0m’.  With no options, or with the -p option, a list of all\n"
+"    settable options is displayed, with an indication of whether or\n"
+"    not each is set."
 
-#: builtins.c:563
-msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-msgstr ""
-"A useful alias to use with this is r='fc -s', so that typing ‘\e[1mr cc\e[0m’"
+#: builtins.c:1377
+msgid ""
+" printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT\n"
+"    is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output, character "
+"escape\n"
+"    sequences which are converted and copied to the standard output, and\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
+"    argument.  In addition to the standard printf(1) formats, %b means to\n"
+"    expand backslash escape sequences in the corresponding argument, and %q\n"
+"    means to quote the argument in a way that can be reused as shell input.\n"
+"    If the -v option is supplied, the output is placed into the value of "
+"the\n"
+"    shell variable VAR rather than being sent to the standard output."
+msgstr ""
+" printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT\n"
+"    is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output, character "
+"escape\n"
+"    sequences which are converted and copied to the standard output, and\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
+"    argument.  In addition to the standard printf(1) formats, %b means to\n"
+"    expand backslash escape sequences in the corresponding argument, and %q\n"
+"    means to quote the argument in a way that can be reused as shell input.\n"
+"    If the -v option is supplied, the output is placed into the value of "
+"the\n"
+"    shell variable VAR rather than being sent to the standard output."
 
-#: builtins.c:564
-msgid "runs the last command beginning with `cc' and typing `r' re-executes"
+#: builtins.c:1393
+msgid ""
+" For each NAME, specify how arguments are to be completed.\n"
+"    If the -p option is supplied, or if no options are supplied, existing\n"
+"    completion specifications are printed in a way that allows them to be\n"
+"    reused as input.  The -r option removes a completion specification for\n"
+"    each NAME, or, if no NAMEs are supplied, all completion specifications."
 msgstr ""
-"runs the last command beginning with ‘\e[1mcc\e[0m’ and typing ‘\e[1mr\e[0m’ re-"
-"executes"
-
-#: builtins.c:565
-msgid "the last command."
-msgstr "the last command."
-
-#: builtins.c:573
-msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-msgstr "Place JOB_SPEC in the foreground, and make it the current job.  If"
-
-#: builtins.c:574
-msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-msgstr "JOB_SPEC is not present, the shell's notion of the current job is"
-
-#: builtins.c:575
-msgid "used."
-msgstr "used."
-
-#: builtins.c:583
-msgid "Place JOB_SPEC in the background, as if it had been started with"
-msgstr "Place JOB_SPEC in the background, as if it had been started with"
-
-#: builtins.c:584
-msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-msgstr ""
-"‘\e[1m&\e[0m’.  If JOB_SPEC is not present, the shell's notion of the current"
-
-#: builtins.c:585
-msgid "job is used."
-msgstr "job is used."
-
-#: builtins.c:592
-msgid "For each NAME, the full pathname of the command is determined and"
-msgstr "For each NAME, the full pathname of the command is determined and"
-
-#: builtins.c:593
-msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-msgstr "remembered.  If the -p option is supplied, PATHNAME is used as the"
-
-#: builtins.c:594
-msgid "full pathname of NAME, and no path search is performed.  The -r"
-msgstr "full pathname of NAME, and no path search is performed.  The -r"
-
-#: builtins.c:595
-msgid "option causes the shell to forget all remembered locations.  The -d"
-msgstr "option causes the shell to forget all remembered locations.  The -d"
-
-#: builtins.c:596
-msgid "option causes the shell to forget the remembered location of each NAME."
-msgstr ""
-"option causes the shell to forget the remembered location of each NAME."
-
-#: builtins.c:597
-msgid "If the -t option is supplied the full pathname to which each NAME"
-msgstr "If the -t option is supplied the full pathname to which each NAME"
-
-#: builtins.c:598
-msgid "corresponds is printed.  If multiple NAME arguments are supplied with"
-msgstr "corresponds is printed.  If multiple NAME arguments are supplied with"
-
-#: builtins.c:599
-msgid "-t, the NAME is printed before the hashed full pathname.  The -l option"
-msgstr ""
-"-t, the NAME is printed before the hashed full pathname.  The -l option"
-
-#: builtins.c:600
-msgid "causes output to be displayed in a format that may be reused as input."
-msgstr "causes output to be displayed in a format that may be reused as input."
-
-#: builtins.c:601
-msgid ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-msgstr ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-
-#: builtins.c:608
-msgid "Display helpful information about builtin commands.  If PATTERN is"
-msgstr "Display helpful information about builtin commands.  If PATTERN is"
-
-#: builtins.c:609
-msgid "specified, gives detailed help on all commands matching PATTERN,"
-msgstr "specified, gives detailed help on all commands matching PATTERN,"
-
-#: builtins.c:610
-msgid "otherwise a list of the builtins is printed.  The -s option"
-msgstr "otherwise a list of the builtins is printed.  The -s option"
-
-#: builtins.c:611
-msgid "restricts the output for each builtin command matching PATTERN to"
-msgstr "restricts the output for each builtin command matching PATTERN to"
-
-#: builtins.c:612
-msgid "a short usage synopsis."
-msgstr "a short usage synopsis."
-
-#: builtins.c:620
-msgid "Display the history list with line numbers.  Lines listed with"
-msgstr "Display the history list with line numbers.  Lines listed with"
-
-#: builtins.c:621
-msgid "with a `*' have been modified.  Argument of N says to list only"
-msgstr "with a ‘\e[1m*\e[0m’ have been modified.  Argument of N says to list only"
-
-#: builtins.c:622
-msgid "the last N lines.  The `-c' option causes the history list to be"
-msgstr "the last N lines.  The ‘\e[1m-c\e[0m’ option causes the history list to be"
-
-#: builtins.c:623
-msgid "cleared by deleting all of the entries.  The `-d' option deletes"
-msgstr "cleared by deleting all of the entries.  The ‘\e[1m-d\e[0m’ option deletes"
-
-#: builtins.c:624
-msgid "the history entry at offset OFFSET.  The `-w' option writes out the"
-msgstr ""
-"the history entry at offset OFFSET.  The ‘\e[1m-w\e[0m’ option writes out the"
-
-#: builtins.c:625
-msgid "current history to the history file;  `-r' means to read the file and"
-msgstr ""
-"current history to the history file;  ‘\e[1m-r\e[0m’ means to read the file and"
-
-#: builtins.c:626
-msgid "append the contents to the history list instead.  `-a' means"
-msgstr "append the contents to the history list instead.  ‘\e[1m-a\e[0m’ means"
-
-#: builtins.c:627
-msgid "to append history lines from this session to the history file."
-msgstr "to append history lines from this session to the history file."
-
-#: builtins.c:628
-msgid "Argument `-n' means to read all history lines not already read"
-msgstr "Argument ‘\e[1m-n\e[0m’ means to read all history lines not already read"
-
-#: builtins.c:629
-msgid "from the history file and append them to the history list."
-msgstr "from the history file and append them to the history list."
-
-#: builtins.c:631
-msgid "If FILENAME is given, then that is used as the history file else"
-msgstr "If FILENAME is given, then that is used as the history file else"
-
-#: builtins.c:632
-msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-msgstr "if $HISTFILE has a value, that is used, else ~/.bash_history."
-
-#: builtins.c:633
-msgid "If the -s option is supplied, the non-option ARGs are appended to"
-msgstr "If the -s option is supplied, the non-option ARGs are appended to"
-
-#: builtins.c:634
-msgid "the history list as a single entry.  The -p option means to perform"
-msgstr "the history list as a single entry.  The -p option means to perform"
-
-#: builtins.c:635
-msgid "history expansion on each ARG and display the result, without storing"
-msgstr "history expansion on each ARG and display the result, without storing"
-
-#: builtins.c:636
-msgid "anything in the history list."
-msgstr "anything in the history list."
-
-#: builtins.c:638
-msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-msgstr "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-
-#: builtins.c:639
-msgid "as a format string for strftime(3) to print the time stamp associated"
-msgstr "as a format string for strftime(3) to print the time stamp associated"
-
-#: builtins.c:640
-msgid ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-msgstr ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-
-#: builtins.c:648
-msgid "Lists the active jobs.  The -l option lists process id's in addition"
-msgstr "Lists the active jobs.  The -l option lists process id's in addition"
-
-#: builtins.c:649
-msgid "to the normal information; the -p option lists process id's only."
-msgstr "to the normal information; the -p option lists process id's only."
-
-#: builtins.c:650
-msgid "If -n is given, only processes that have changed status since the last"
-msgstr "If -n is given, only processes that have changed status since the last"
-
-#: builtins.c:651
-msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-msgstr "notification are printed.  JOBSPEC restricts output to that job.  The"
-
-#: builtins.c:652
-msgid "-r and -s options restrict output to running and stopped jobs only,"
-msgstr "-r and -s options restrict output to running and stopped jobs only,"
-
-#: builtins.c:653
-msgid "respectively.  Without options, the status of all active jobs is"
-msgstr "respectively.  Without options, the status of all active jobs is"
-
-#: builtins.c:654
-msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-msgstr "printed.  If -x is given, COMMAND is run after all job specifications"
-
-#: builtins.c:655
-msgid ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-msgstr ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-
-#: builtins.c:656
-msgid "process group leader."
-msgstr "process group leader."
-
-#: builtins.c:664
-msgid ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-msgstr ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-
-#: builtins.c:665
-msgid ""
-"If the -h option is given, the job is not removed from the table, but is"
-msgstr ""
-"If the -h option is given, the job is not removed from the table, but is"
-
-#: builtins.c:666
-msgid "marked so that SIGHUP is not sent to the job if the shell receives a"
-msgstr "marked so that SIGHUP is not sent to the job if the shell receives a"
-
-#: builtins.c:667
-msgid ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-msgstr ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-
-#: builtins.c:668
-msgid ""
-"jobs from the job table; the -r option means to remove only running jobs."
-msgstr ""
-"jobs from the job table; the -r option means to remove only running jobs."
-
-#: builtins.c:675
-msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-msgstr "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-
-#: builtins.c:676
-msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-msgstr ""
-"SIGSPEC is not present, then SIGTERM is assumed.  An argument of ‘\e[1m-l\e[0m’"
-
-#: builtins.c:677
-msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-msgstr ""
-"lists the signal names; if arguments follow ‘\e[1m-l\e[0m’ they are assumed to"
-
-#: builtins.c:678
-msgid "be signal numbers for which names should be listed.  Kill is a shell"
-msgstr "be signal numbers for which names should be listed.  Kill is a shell"
-
-#: builtins.c:679
-msgid "builtin for two reasons: it allows job IDs to be used instead of"
-msgstr "builtin for two reasons: it allows job IDs to be used instead of"
-
-#: builtins.c:680
-msgid "process IDs, and, if you have reached the limit on processes that"
-msgstr "process IDs, and, if you have reached the limit on processes that"
-
-#: builtins.c:681
-msgid "you can create, you don't have to start a process to kill another one."
-msgstr "you can create, you don't have to start a process to kill another one."
-
-#: builtins.c:687
-msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-msgstr "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-
-#: builtins.c:688
-msgid "is done in fixed-width integers with no check for overflow, though"
-msgstr "is done in fixed-width integers with no check for overflow, though"
-
-#: builtins.c:689
-msgid "division by 0 is trapped and flagged as an error.  The following"
-msgstr "division by 0 is trapped and flagged as an error.  The following"
-
-#: builtins.c:690
-msgid "list of operators is grouped into levels of equal-precedence operators."
-msgstr ""
-"list of operators is grouped into levels of equal-precedence operators."
-
-#: builtins.c:691
-msgid "The levels are listed in order of decreasing precedence."
-msgstr "The levels are listed in order of decreasing precedence."
-
-#: builtins.c:693
-msgid "\tid++, id--\tvariable post-increment, post-decrement"
-msgstr "\tid++, id--\tvariable post-increment, post-decrement"
-
-#: builtins.c:694
-msgid "\t++id, --id\tvariable pre-increment, pre-decrement"
-msgstr "\t++id, --id\tvariable pre-increment, pre-decrement"
-
-#: builtins.c:695
-msgid "\t-, +\t\tunary minus, plus"
-msgstr "\t-, +\t\tunary minus, plus"
-
-#: builtins.c:696
-msgid "\t!, ~\t\tlogical and bitwise negation"
-msgstr "\t!, ~\t\tlogical and bitwise negation"
-
-#: builtins.c:697
-msgid "\t**\t\texponentiation"
-msgstr "\t**\t\texponentiation"
-
-#: builtins.c:698
-msgid "\t*, /, %\t\tmultiplication, division, remainder"
-msgstr "\t*, /, %\t\tmultiplication, division, remainder"
-
-#: builtins.c:699
-msgid "\t+, -\t\taddition, subtraction"
-msgstr "\t+, -\t\taddition, subtraction"
-
-#: builtins.c:700
-msgid "\t<<, >>\t\tleft and right bitwise shifts"
-msgstr "\t<<, >>\t\tleft and right bitwise shifts"
-
-#: builtins.c:701
-msgid "\t<=, >=, <, >\tcomparison"
-msgstr "\t<=, >=, <, >\tcomparison"
-
-#: builtins.c:702
-msgid "\t==, !=\t\tequality, inequality"
-msgstr "\t==, !=\t\tequality, inequality"
-
-#: builtins.c:703
-msgid "\t&\t\tbitwise AND"
-msgstr "\t&\t\tbitwise AND"
-
-#: builtins.c:704
-msgid "\t^\t\tbitwise XOR"
-msgstr "\t^\t\tbitwise XOR"
-
-#: builtins.c:705
-msgid "\t|\t\tbitwise OR"
-msgstr "\t|\t\tbitwise OR"
-
-#: builtins.c:706
-msgid "\t&&\t\tlogical AND"
-msgstr "\t&&\t\tlogical AND"
-
-#: builtins.c:707
-msgid "\t||\t\tlogical OR"
-msgstr "\t||\t\tlogical OR"
-
-#: builtins.c:708
-msgid "\texpr ? expr : expr"
-msgstr "\texpr ? expr : expr"
-
-#: builtins.c:709
-msgid "\t\t\tconditional operator"
-msgstr "\t\t\tconditional operator"
-
-#: builtins.c:710
-msgid "\t=, *=, /=, %=,"
-msgstr "\t=, *=, /=, %=,"
-
-#: builtins.c:711
-msgid "\t+=, -=, <<=, >>=,"
-msgstr "\t+=, -=, <<=, >>=,"
-
-#: builtins.c:712
-msgid "\t&=, ^=, |=\tassignment"
-msgstr "\t&=, ^=, |=\tassignment"
-
-#: builtins.c:714
-msgid "Shell variables are allowed as operands.  The name of the variable"
-msgstr "Shell variables are allowed as operands.  The name of the variable"
-
-#: builtins.c:715
-msgid "is replaced by its value (coerced to a fixed-width integer) within"
-msgstr "is replaced by its value (coerced to a fixed-width integer) within"
-
-#: builtins.c:716
-msgid "an expression.  The variable need not have its integer attribute"
-msgstr "an expression.  The variable need not have its integer attribute"
-
-#: builtins.c:717
-msgid "turned on to be used in an expression."
-msgstr "turned on to be used in an expression."
-
-#: builtins.c:719
-msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-msgstr "Operators are evaluated in order of precedence.  Sub-expressions in"
-
-#: builtins.c:720
-msgid "parentheses are evaluated first and may override the precedence"
-msgstr "parentheses are evaluated first and may override the precedence"
-
-#: builtins.c:721
-msgid "rules above."
-msgstr "rules above."
-
-#: builtins.c:723
-msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-msgstr "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-
-#: builtins.c:724
-msgid "otherwise."
-msgstr "otherwise."
-
-#: builtins.c:730
-msgid ""
-"One line is read from the standard input, or from file descriptor FD if the"
-msgstr ""
-"One line is read from the standard input, or from file descriptor FD if the"
-
-#: builtins.c:731
-msgid ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-msgstr ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-
-#: builtins.c:732
-msgid ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-msgstr ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-
-#: builtins.c:733
-msgid ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-msgstr ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-
-#: builtins.c:734
-msgid ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-msgstr ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-
-#: builtins.c:735
-msgid "variable.  If the -r option is given, this signifies `raw' input, and"
-msgstr ""
-"variable.  If the -r option is given, this signifies ‘\e[1mraw\e[0m’ input, and"
-
-#: builtins.c:736
-msgid "backslash escaping is disabled.  The -d option causes read to continue"
-msgstr "backslash escaping is disabled.  The -d option causes read to continue"
-
-#: builtins.c:737
-msgid ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-msgstr ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-
-#: builtins.c:738
-msgid ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-msgstr ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-
-#: builtins.c:739
-msgid ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-msgstr ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-
-#: builtins.c:740
-msgid ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-msgstr ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-
-#: builtins.c:741
-msgid ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-msgstr ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-
-#: builtins.c:742
-msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-msgstr "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-
-#: builtins.c:743
-msgid "characters have been read.  The -s option causes input coming from a"
-msgstr "characters have been read.  The -s option causes input coming from a"
-
-#: builtins.c:744
-msgid "terminal to not be echoed."
-msgstr "terminal to not be echoed."
-
-#: builtins.c:746
-msgid ""
-"The -t option causes read to time out and return failure if a complete line"
-msgstr ""
-"The -t option causes read to time out and return failure if a complete line"
-
-#: builtins.c:747
-msgid ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-msgstr ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-
-#: builtins.c:748
-msgid ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-msgstr ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-
-#: builtins.c:749
-msgid ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-msgstr ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-
-#: builtins.c:750
-msgid "the argument to -u."
-msgstr "the argument to -u."
-
-#: builtins.c:756
-msgid "Causes a function to exit with the return value specified by N.  If N"
-msgstr "Causes a function to exit with the return value specified by N.  If N"
-
-#: builtins.c:757
-msgid "is omitted, the return status is that of the last command."
-msgstr "is omitted, the return status is that of the last command."
-
-#: builtins.c:763
-msgid "    -a  Mark variables which are modified or created for export."
-msgstr "    -a  Mark variables which are modified or created for export."
-
-#: builtins.c:764
-msgid "    -b  Notify of job termination immediately."
-msgstr "    -b  Notify of job termination immediately."
-
-#: builtins.c:765
-msgid "    -e  Exit immediately if a command exits with a non-zero status."
-msgstr "    -e  Exit immediately if a command exits with a non-zero status."
-
-#: builtins.c:766
-msgid "    -f  Disable file name generation (globbing)."
-msgstr "    -f  Disable file name generation (globbing)."
-
-#: builtins.c:767
-msgid "    -h  Remember the location of commands as they are looked up."
-msgstr "    -h  Remember the location of commands as they are looked up."
-
-#: builtins.c:768
-msgid "    -k  All assignment arguments are placed in the environment for a"
-msgstr "    -k  All assignment arguments are placed in the environment for a"
-
-#: builtins.c:769
-msgid "        command, not just those that precede the command name."
-msgstr "        command, not just those that precede the command name."
-
-#: builtins.c:770
-msgid "    -m  Job control is enabled."
-msgstr "    -m  Job control is enabled."
-
-#: builtins.c:771
-msgid "    -n  Read commands but do not execute them."
-msgstr "    -n  Read commands but do not execute them."
-
-#: builtins.c:772
-msgid "    -o option-name"
-msgstr "    -o option-name"
-
-#: builtins.c:773
-msgid "        Set the variable corresponding to option-name:"
-msgstr "        Set the variable corresponding to option-name:"
-
-#: builtins.c:774
-msgid "            allexport    same as -a"
-msgstr "            allexport    same as -a"
-
-#: builtins.c:775
-msgid "            braceexpand  same as -B"
-msgstr "            braceexpand  same as -B"
-
-#: builtins.c:777
-msgid "            emacs        use an emacs-style line editing interface"
-msgstr "            emacs        use an emacs-style line editing interface"
-
-#: builtins.c:779
-msgid "            errexit      same as -e"
-msgstr "            errexit      same as -e"
-
-#: builtins.c:780
-msgid "            errtrace     same as -E"
-msgstr "            errtrace     same as -E"
-
-#: builtins.c:781
-msgid "            functrace    same as -T"
-msgstr "            functrace    same as -T"
-
-#: builtins.c:782
-msgid "            hashall      same as -h"
-msgstr "            hashall      same as -h"
-
-#: builtins.c:784
-msgid "            histexpand   same as -H"
-msgstr "            histexpand   same as -H"
-
-#: builtins.c:787
-msgid "            history      enable command history"
-msgstr "            history      enable command history"
-
-#: builtins.c:789
-msgid "            ignoreeof    the shell will not exit upon reading EOF"
-msgstr "            ignoreeof    the shell will not exit upon reading EOF"
-
-#: builtins.c:790
-msgid "            interactive-comments"
-msgstr "            interactive-comments"
-
-#: builtins.c:791
-msgid ""
-"                         allow comments to appear in interactive commands"
-msgstr ""
-"                         allow comments to appear in interactive commands"
-
-#: builtins.c:792
-msgid "            keyword      same as -k"
-msgstr "            keyword      same as -k"
-
-#: builtins.c:793
-msgid "            monitor      same as -m"
-msgstr "            monitor      same as -m"
-
-#: builtins.c:794
-msgid "            noclobber    same as -C"
-msgstr "            noclobber    same as -C"
-
-#: builtins.c:795
-msgid "            noexec       same as -n"
-msgstr "            noexec       same as -n"
-
-#: builtins.c:796
-msgid "            noglob       same as -f"
-msgstr "            noglob       same as -f"
-
-#: builtins.c:797
-msgid "            nolog        currently accepted but ignored"
-msgstr "            nolog        currently accepted but ignored"
-
-#: builtins.c:798
-msgid "            notify       same as -b"
-msgstr "            notify       same as -b"
-
-#: builtins.c:799
-msgid "            nounset      same as -u"
-msgstr "            nounset      same as -u"
-
-#: builtins.c:800
-msgid "            onecmd       same as -t"
-msgstr "            onecmd       same as -t"
-
-#: builtins.c:801
-msgid "            physical     same as -P"
-msgstr "            physical     same as -P"
-
-#: builtins.c:802
-msgid ""
-"            pipefail     the return value of a pipeline is the status of"
-msgstr ""
-"            pipefail     the return value of a pipeline is the status of"
-
-#: builtins.c:803
-msgid ""
-"                         the last command to exit with a non-zero status,"
-msgstr ""
-"                         the last command to exit with a non-zero status,"
-
-#: builtins.c:804
-msgid ""
-"                         or zero if no command exited with a non-zero status"
-msgstr ""
-"                         or zero if no command exited with a non-zero status"
-
-#: builtins.c:805
-msgid "            posix        change the behavior of bash where the default"
-msgstr "            posix        change the behavior of bash where the default"
-
-#: builtins.c:806
-msgid "                         operation differs from the 1003.2 standard to"
-msgstr "                         operation differs from the 1003.2 standard to"
-
-#: builtins.c:807
-msgid "                         match the standard"
-msgstr "                         match the standard"
-
-#: builtins.c:808
-msgid "            privileged   same as -p"
-msgstr "            privileged   same as -p"
-
-#: builtins.c:809
-msgid "            verbose      same as -v"
-msgstr "            verbose      same as -v"
-
-#: builtins.c:811
-msgid "            vi           use a vi-style line editing interface"
-msgstr "            vi           use a vi-style line editing interface"
-
-#: builtins.c:813
-msgid "            xtrace       same as -x"
-msgstr "            xtrace       same as -x"
-
-#: builtins.c:814
-msgid ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-msgstr ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-
-#: builtins.c:815
-msgid "        Disables processing of the $ENV file and importing of shell"
-msgstr "        Disables processing of the $ENV file and importing of shell"
-
-#: builtins.c:816
-msgid ""
-"        functions.  Turning this option off causes the effective uid and"
-msgstr ""
-"        functions.  Turning this option off causes the effective uid and"
-
-#: builtins.c:817
-msgid "        gid to be set to the real uid and gid."
-msgstr "        gid to be set to the real uid and gid."
-
-#: builtins.c:818
-msgid "    -t  Exit after reading and executing one command."
-msgstr "    -t  Exit after reading and executing one command."
-
-#: builtins.c:819
-msgid "    -u  Treat unset variables as an error when substituting."
-msgstr "    -u  Treat unset variables as an error when substituting."
-
-#: builtins.c:820
-msgid "    -v  Print shell input lines as they are read."
-msgstr "    -v  Print shell input lines as they are read."
-
-#: builtins.c:821
-msgid "    -x  Print commands and their arguments as they are executed."
-msgstr "    -x  Print commands and their arguments as they are executed."
-
-#: builtins.c:823
-msgid "    -B  the shell will perform brace expansion"
-msgstr "    -B  the shell will perform brace expansion"
-
-#: builtins.c:825
-msgid "    -C  If set, disallow existing regular files to be overwritten"
-msgstr "    -C  If set, disallow existing regular files to be overwritten"
-
-#: builtins.c:826
-msgid "        by redirection of output."
-msgstr "        by redirection of output."
-
-#: builtins.c:827
-msgid "    -E  If set, the ERR trap is inherited by shell functions."
-msgstr "    -E  If set, the ERR trap is inherited by shell functions."
-
-#: builtins.c:829
-msgid "    -H  Enable ! style history substitution.  This flag is on"
-msgstr "    -H  Enable ! style history substitution.  This flag is on"
-
-#: builtins.c:830
-msgid "        by default."
-msgstr "        by default."
-
-#: builtins.c:832
-msgid "    -P  If set, do not follow symbolic links when executing commands"
-msgstr "    -P  If set, do not follow symbolic links when executing commands"
-
-#: builtins.c:833
-msgid "        such as cd which change the current directory."
-msgstr "        such as cd which change the current directory."
-
-#: builtins.c:834
-msgid "    -T  If set, the DEBUG trap is inherited by shell functions."
-msgstr "    -T  If set, the DEBUG trap is inherited by shell functions."
-
-#: builtins.c:836
-msgid "Using + rather than - causes these flags to be turned off.  The"
-msgstr "Using + rather than - causes these flags to be turned off.  The"
-
-#: builtins.c:837
-msgid "flags can also be used upon invocation of the shell.  The current"
-msgstr "flags can also be used upon invocation of the shell.  The current"
-
-#: builtins.c:838
-msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
-msgstr "set of flags may be found in $-.  The remaining n ARGs are positional"
-
-#: builtins.c:839
-msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-msgstr "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-
-#: builtins.c:840
-msgid "ARGs are given, all shell variables are printed."
-msgstr "ARGs are given, all shell variables are printed."
-
-#: builtins.c:846
-msgid "For each NAME, remove the corresponding variable or function.  Given"
-msgstr "For each NAME, remove the corresponding variable or function.  Given"
-
-#: builtins.c:847
-msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-msgstr ""
-"the ‘\e[1m-v\e[0m’, unset will only act on variables.  Given the ‘\e[1m-f\e[0m’ flag,"
-
-#: builtins.c:848
-msgid "unset will only act on functions.  With neither flag, unset first"
-msgstr "unset will only act on functions.  With neither flag, unset first"
-
-#: builtins.c:849
-msgid "tries to unset a variable, and if that fails, then tries to unset a"
-msgstr "tries to unset a variable, and if that fails, then tries to unset a"
-
-#: builtins.c:850
-msgid "function.  Some variables cannot be unset; also see readonly."
-msgstr "function.  Some variables cannot be unset; also see readonly."
-
-#: builtins.c:856
-msgid "NAMEs are marked for automatic export to the environment of"
-msgstr "NAMEs are marked for automatic export to the environment of"
-
-#: builtins.c:857
-msgid "subsequently executed commands.  If the -f option is given,"
-msgstr "subsequently executed commands.  If the -f option is given,"
-
-#: builtins.c:858
-msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-msgstr "the NAMEs refer to functions.  If no NAMEs are given, or if ‘\e[1m-p\e[0m’"
-
-#: builtins.c:859
-msgid "is given, a list of all names that are exported in this shell is"
-msgstr "is given, a list of all names that are exported in this shell is"
-
-#: builtins.c:860
-msgid "printed.  An argument of `-n' says to remove the export property"
-msgstr "printed.  An argument of ‘\e[1m-n\e[0m’ says to remove the export property"
-
-#: builtins.c:861
-msgid "from subsequent NAMEs.  An argument of `--' disables further option"
-msgstr ""
-"from subsequent NAMEs.  An argument of ‘\e[1m--\e[0m’ disables further option"
-
-#: builtins.c:862 builtins.c:874
-msgid "processing."
-msgstr "processing."
-
-#: builtins.c:868
-msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-msgstr "The given NAMEs are marked readonly and the values of these NAMEs may"
-
-#: builtins.c:869
-msgid "not be changed by subsequent assignment.  If the -f option is given,"
-msgstr "not be changed by subsequent assignment.  If the -f option is given,"
-
-#: builtins.c:870
-msgid "then functions corresponding to the NAMEs are so marked.  If no"
-msgstr "then functions corresponding to the NAMEs are so marked.  If no"
-
-#: builtins.c:871
-msgid "arguments are given, or if `-p' is given, a list of all readonly names"
-msgstr ""
-"arguments are given, or if ‘\e[1m-p\e[0m’ is given, a list of all readonly names"
-
-#: builtins.c:872
-msgid "is printed.  The `-a' option means to treat each NAME as"
-msgstr "is printed.  The ‘\e[1m-a\e[0m’ option means to treat each NAME as"
-
-#: builtins.c:873
-msgid "an array variable.  An argument of `--' disables further option"
-msgstr "an array variable.  An argument of ‘\e[1m--\e[0m’ disables further option"
-
-#: builtins.c:880
-msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-msgstr "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-
-#: builtins.c:881
-msgid "not given, it is assumed to be 1."
-msgstr "not given, it is assumed to be 1."
-
-#: builtins.c:887 builtins.c:896
-msgid "Read and execute commands from FILENAME and return.  The pathnames"
-msgstr "Read and execute commands from FILENAME and return.  The pathnames"
-
-#: builtins.c:888 builtins.c:897
-msgid "in $PATH are used to find the directory containing FILENAME.  If any"
-msgstr "in $PATH are used to find the directory containing FILENAME.  If any"
-
-#: builtins.c:889 builtins.c:898
-msgid "ARGUMENTS are supplied, they become the positional parameters when"
-msgstr "ARGUMENTS are supplied, they become the positional parameters when"
-
-#: builtins.c:890 builtins.c:899
-msgid "FILENAME is executed."
-msgstr "FILENAME is executed."
-
-#: builtins.c:906
-msgid "Suspend the execution of this shell until it receives a SIGCONT"
-msgstr "Suspend the execution of this shell until it receives a SIGCONT"
-
-#: builtins.c:907
-msgid "signal.  The `-f' if specified says not to complain about this"
-msgstr "signal.  The ‘\e[1m-f\e[0m’ if specified says not to complain about this"
-
-#: builtins.c:908
-msgid "being a login shell if it is; just suspend anyway."
-msgstr "being a login shell if it is; just suspend anyway."
-
-#: builtins.c:915
-msgid "Exits with a status of 0 (true) or 1 (false) depending on"
-msgstr "Exits with a status of 0 (true) or 1 (false) depending on"
-
-#: builtins.c:916
-msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-msgstr "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-
-#: builtins.c:917
-msgid "expressions are often used to examine the status of a file.  There"
-msgstr "expressions are often used to examine the status of a file.  There"
-
-#: builtins.c:918
-msgid "are string operators as well, and numeric comparison operators."
-msgstr "are string operators as well, and numeric comparison operators."
-
-#: builtins.c:920
-msgid "File operators:"
-msgstr "File operators:"
-
-#: builtins.c:922
-msgid "    -a FILE        True if file exists."
-msgstr "    -a FILE        True if file exists."
-
-#: builtins.c:923
-msgid "    -b FILE        True if file is block special."
-msgstr "    -b FILE        True if file is block special."
-
-#: builtins.c:924
-msgid "    -c FILE        True if file is character special."
-msgstr "    -c FILE        True if file is character special."
-
-#: builtins.c:925
-msgid "    -d FILE        True if file is a directory."
-msgstr "    -d FILE        True if file is a directory."
-
-#: builtins.c:926
-msgid "    -e FILE        True if file exists."
-msgstr "    -e FILE        True if file exists."
-
-#: builtins.c:927
-msgid "    -f FILE        True if file exists and is a regular file."
-msgstr "    -f FILE        True if file exists and is a regular file."
-
-#: builtins.c:928
-msgid "    -g FILE        True if file is set-group-id."
-msgstr "    -g FILE        True if file is set-group-id."
-
-#: builtins.c:929
-msgid "    -h FILE        True if file is a symbolic link."
-msgstr "    -h FILE        True if file is a symbolic link."
-
-#: builtins.c:930
-msgid "    -L FILE        True if file is a symbolic link."
-msgstr "    -L FILE        True if file is a symbolic link."
-
-#: builtins.c:931
-msgid "    -k FILE        True if file has its `sticky' bit set."
-msgstr "    -k FILE        True if file has its ‘\e[1msticky\e[0m’ bit set."
-
-#: builtins.c:932
-msgid "    -p FILE        True if file is a named pipe."
-msgstr "    -p FILE        True if file is a named pipe."
-
-#: builtins.c:933
-msgid "    -r FILE        True if file is readable by you."
-msgstr "    -r FILE        True if file is readable by you."
-
-#: builtins.c:934
-msgid "    -s FILE        True if file exists and is not empty."
-msgstr "    -s FILE        True if file exists and is not empty."
-
-#: builtins.c:935
-msgid "    -S FILE        True if file is a socket."
-msgstr "    -S FILE        True if file is a socket."
-
-#: builtins.c:936
-msgid "    -t FD          True if FD is opened on a terminal."
-msgstr "    -t FD          True if FD is opened on a terminal."
-
-#: builtins.c:937
-msgid "    -u FILE        True if the file is set-user-id."
-msgstr "    -u FILE        True if the file is set-user-id."
-
-#: builtins.c:938
-msgid "    -w FILE        True if the file is writable by you."
-msgstr "    -w FILE        True if the file is writable by you."
-
-#: builtins.c:939
-msgid "    -x FILE        True if the file is executable by you."
-msgstr "    -x FILE        True if the file is executable by you."
-
-#: builtins.c:940
-msgid "    -O FILE        True if the file is effectively owned by you."
-msgstr "    -O FILE        True if the file is effectively owned by you."
-
-#: builtins.c:941
-msgid "    -G FILE        True if the file is effectively owned by your group."
-msgstr ""
-"    -G FILE        True if the file is effectively owned by your group."
-
-#: builtins.c:942
-msgid ""
-"    -N FILE        True if the file has been modified since it was last read."
-msgstr ""
-"    -N FILE        True if the file has been modified since it was last read."
-
-#: builtins.c:944
-msgid "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-msgstr "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-
-#: builtins.c:945
-msgid "                   modification date)."
-msgstr "                   modification date)."
-
-#: builtins.c:947
-msgid "  FILE1 -ot FILE2  True if file1 is older than file2."
-msgstr "  FILE1 -ot FILE2  True if file1 is older than file2."
-
-#: builtins.c:949
-msgid "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-msgstr "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-
-#: builtins.c:951
-msgid "String operators:"
-msgstr "String operators:"
-
-#: builtins.c:953
-msgid "    -z STRING      True if string is empty."
-msgstr "    -z STRING      True if string is empty."
-
-#: builtins.c:955
-msgid "    -n STRING"
-msgstr "    -n STRING"
-
-#: builtins.c:956
-msgid "    STRING         True if string is not empty."
-msgstr "    STRING         True if string is not empty."
-
-#: builtins.c:958
-msgid "    STRING1 = STRING2"
-msgstr "    STRING1 = STRING2"
-
-#: builtins.c:959
-msgid "                   True if the strings are equal."
-msgstr "                   True if the strings are equal."
-
-#: builtins.c:960
-msgid "    STRING1 != STRING2"
-msgstr "    STRING1 != STRING2"
-
-#: builtins.c:961
-msgid "                   True if the strings are not equal."
-msgstr "                   True if the strings are not equal."
-
-#: builtins.c:962
-msgid "    STRING1 < STRING2"
-msgstr "    STRING1 < STRING2"
-
-#: builtins.c:963
-msgid ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-msgstr ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-
-#: builtins.c:964
-msgid "    STRING1 > STRING2"
-msgstr "    STRING1 > STRING2"
-
-#: builtins.c:965
-msgid ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-msgstr ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-
-#: builtins.c:967
-msgid "Other operators:"
-msgstr "Other operators:"
-
-#: builtins.c:969
-msgid "    -o OPTION      True if the shell option OPTION is enabled."
-msgstr "    -o OPTION      True if the shell option OPTION is enabled."
-
-#: builtins.c:970
-msgid "    ! EXPR         True if expr is false."
-msgstr "    ! EXPR         True if expr is false."
-
-#: builtins.c:971
-msgid "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-msgstr "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-
-#: builtins.c:972
-msgid "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-msgstr "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-
-#: builtins.c:974
-msgid "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-msgstr "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-
-#: builtins.c:975
-msgid "                   -lt, -le, -gt, or -ge."
-msgstr "                   -lt, -le, -gt, or -ge."
-
-#: builtins.c:977
-msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-msgstr "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-
-#: builtins.c:978
-msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-msgstr "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-
-#: builtins.c:979
-msgid "than ARG2."
-msgstr "than ARG2."
-
-#: builtins.c:985
-msgid "This is a synonym for the \"test\" builtin, but the last"
-msgstr "This is a synonym for the “\e[1mtest\e[0m” builtin, but the last"
-
-#: builtins.c:986
-msgid "argument must be a literal `]', to match the opening `['."
-msgstr "argument must be a literal ‘\e[1m]\e[0m’, to match the opening ‘\e[1m[\e[0m’."
-
-#: builtins.c:992
-msgid "Print the accumulated user and system times for processes run from"
-msgstr "Print the accumulated user and system times for processes run from"
-
-#: builtins.c:993
-msgid "the shell."
-msgstr "the shell."
-
-#: builtins.c:999
-msgid "The command ARG is to be read and executed when the shell receives"
-msgstr "The command ARG is to be read and executed when the shell receives"
-
-#: builtins.c:1000
-msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-msgstr "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-
-#: builtins.c:1001
-msgid "reset to their original values.  If ARG is the null string each"
-msgstr "reset to their original values.  If ARG is the null string each"
-
-#: builtins.c:1002
-msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-
-#: builtins.c:1003
-msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-
-#: builtins.c:1004
-msgid "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-msgstr "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-
-#: builtins.c:1005
-msgid "command.  If ARG is `-p' then the trap commands associated with"
-msgstr "command.  If ARG is ‘\e[1m-p\e[0m’ then the trap commands associated with"
-
-#: builtins.c:1006
-msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-msgstr "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-
-#: builtins.c:1007
-msgid "only `-p' is given, trap prints the list of commands associated with"
-msgstr ""
-"only ‘\e[1m-p\e[0m’ is given, trap prints the list of commands associated with"
-
-#: builtins.c:1008
-msgid ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-msgstr ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-
-#: builtins.c:1009
-msgid "or a signal number.  `trap -l' prints a list of signal names and their"
-msgstr ""
-"or a signal number.  ‘\e[1mtrap -l\e[0m’ prints a list of signal names and their"
-
-#: builtins.c:1010
-msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-msgstr "corresponding numbers.  Note that a signal can be sent to the shell"
-
-#: builtins.c:1011
-msgid "with \"kill -signal $$\"."
-msgstr "with “\e[1mkill -signal $$\e[0m”."
-
-#: builtins.c:1017
-msgid "For each NAME, indicate how it would be interpreted if used as a"
-msgstr "For each NAME, indicate how it would be interpreted if used as a"
-
-#: builtins.c:1018
-msgid "command name."
-msgstr "command name."
-
-#: builtins.c:1020
-msgid "If the -t option is used, `type' outputs a single word which is one of"
-msgstr ""
-"If the -t option is used, ‘\e[1mtype\e[0m’ outputs a single word which is one of"
-
-#: builtins.c:1021
-msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-msgstr ""
-"‘\e[1malias\e[0m’, ‘\e[1mkeyword\e[0m’, ‘\e[1mfunction\e[0m’, ‘\e[1mbuiltin\e[0m’, ‘\e[1mfile\e"
-"[0m’ or ‘\e[1m\e[0m’, if NAME is an"
-
-#: builtins.c:1022
-msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
-msgstr "alias, shell reserved word, shell function, shell builtin, disk file,"
-
-#: builtins.c:1023
-msgid "or unfound, respectively."
-msgstr "or unfound, respectively."
-
-#: builtins.c:1025
-msgid "If the -p flag is used, `type' either returns the name of the disk"
-msgstr ""
-"If the -p flag is used, ‘\e[1mtype\e[0m’ either returns the name of the disk"
-
-#: builtins.c:1026
-msgid "file that would be executed, or nothing if `type -t NAME' would not"
-msgstr ""
-"file that would be executed, or nothing if ‘\e[1mtype -t NAME\e[0m’ would not"
-
-#: builtins.c:1027
-msgid "return `file'."
-msgstr "return ‘\e[1mfile\e[0m’."
-
-#: builtins.c:1029
-msgid "If the -a flag is used, `type' displays all of the places that contain"
-msgstr ""
-"If the -a flag is used, ‘\e[1mtype\e[0m’ displays all of the places that contain"
-
-#: builtins.c:1030
-msgid "an executable named `file'.  This includes aliases, builtins, and"
-msgstr ""
-"an executable named ‘\e[1mfile\e[0m’.  This includes aliases, builtins, and"
-
-#: builtins.c:1031
-msgid "functions, if and only if the -p flag is not also used."
-msgstr "functions, if and only if the -p flag is not also used."
-
-#: builtins.c:1033
-msgid "The -f flag suppresses shell function lookup."
-msgstr "The -f flag suppresses shell function lookup."
-
-#: builtins.c:1035
-msgid "The -P flag forces a PATH search for each NAME, even if it is an alias,"
-msgstr ""
-"The -P flag forces a PATH search for each NAME, even if it is an alias,"
-
-#: builtins.c:1036
-msgid "builtin, or function, and returns the name of the disk file that would"
-msgstr "builtin, or function, and returns the name of the disk file that would"
-
-#: builtins.c:1037
-msgid "be executed."
-msgstr "be executed."
-
-#: builtins.c:1044
-msgid "Ulimit provides control over the resources available to processes"
-msgstr "Ulimit provides control over the resources available to processes"
-
-#: builtins.c:1045
-msgid "started by the shell, on systems that allow such control.  If an"
-msgstr "started by the shell, on systems that allow such control.  If an"
-
-#: builtins.c:1046
-msgid "option is given, it is interpreted as follows:"
-msgstr "option is given, it is interpreted as follows:"
-
-#: builtins.c:1048
-msgid "    -S\tuse the `soft' resource limit"
-msgstr "    -S\tuse the ‘\e[1msoft\e[0m’ resource limit"
-
-#: builtins.c:1049
-msgid "    -H\tuse the `hard' resource limit"
-msgstr "    -H\tuse the ‘\e[1mhard\e[0m’ resource limit"
-
-#: builtins.c:1050
-msgid "    -a\tall current limits are reported"
-msgstr "    -a\tall current limits are reported"
-
-#: builtins.c:1051
-msgid "    -c\tthe maximum size of core files created"
-msgstr "    -c\tthe maximum size of core files created"
-
-#: builtins.c:1052
-msgid "    -d\tthe maximum size of a process's data segment"
-msgstr "    -d\tthe maximum size of a process's data segment"
-
-#: builtins.c:1053
-msgid "    -f\tthe maximum size of files created by the shell"
-msgstr "    -f\tthe maximum size of files created by the shell"
-
-#: builtins.c:1054
-msgid "    -l\tthe maximum size a process may lock into memory"
-msgstr "    -l\tthe maximum size a process may lock into memory"
-
-#: builtins.c:1055
-msgid "    -m\tthe maximum resident set size"
-msgstr "    -m\tthe maximum resident set size"
-
-#: builtins.c:1056
-msgid "    -n\tthe maximum number of open file descriptors"
-msgstr "    -n\tthe maximum number of open file descriptors"
-
-#: builtins.c:1057
-msgid "    -p\tthe pipe buffer size"
-msgstr "    -p\tthe pipe buffer size"
-
-#: builtins.c:1058
-msgid "    -s\tthe maximum stack size"
-msgstr "    -s\tthe maximum stack size"
-
-#: builtins.c:1059
-msgid "    -t\tthe maximum amount of cpu time in seconds"
-msgstr "    -t\tthe maximum amount of cpu time in seconds"
-
-#: builtins.c:1060
-msgid "    -u\tthe maximum number of user processes"
-msgstr "    -u\tthe maximum number of user processes"
-
-#: builtins.c:1061
-msgid "    -v\tthe size of virtual memory"
-msgstr "    -v\tthe size of virtual memory"
-
-#: builtins.c:1063
-msgid "If LIMIT is given, it is the new value of the specified resource;"
-msgstr "If LIMIT is given, it is the new value of the specified resource;"
-
-#: builtins.c:1064
-msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for"
-msgstr ""
-"the special LIMIT values ‘\e[1msoft\e[0m’, ‘\e[1mhard\e[0m’, and ‘\e[1munlimited\e[0m’ "
-"stand for"
-
-#: builtins.c:1065
-msgid ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-msgstr ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-
-#: builtins.c:1066
-msgid "Otherwise, the current value of the specified resource is printed."
-msgstr "Otherwise, the current value of the specified resource is printed."
-
-#: builtins.c:1067
-msgid "If no option is given, then -f is assumed.  Values are in 1024-byte"
-msgstr "If no option is given, then -f is assumed.  Values are in 1024-byte"
-
-#: builtins.c:1068
-msgid "increments, except for -t, which is in seconds, -p, which is in"
-msgstr "increments, except for -t, which is in seconds, -p, which is in"
-
-#: builtins.c:1069
-msgid "increments of 512 bytes, and -u, which is an unscaled number of"
-msgstr "increments of 512 bytes, and -u, which is an unscaled number of"
-
-#: builtins.c:1070
-msgid "processes."
-msgstr "processes."
-
-#: builtins.c:1077
-msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-msgstr "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-
-#: builtins.c:1078
-msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-msgstr ""
-"‘\e[1m-S\e[0m’ is supplied, the current value of the mask is printed.  The ‘\e[1m-S\e"
-"[0m’"
-
-#: builtins.c:1079
-msgid "option makes the output symbolic; otherwise an octal number is output."
-msgstr "option makes the output symbolic; otherwise an octal number is output."
-
-#: builtins.c:1080
-msgid "If `-p' is supplied, and MODE is omitted, the output is in a form"
-msgstr ""
-"If ‘\e[1m-p\e[0m’ is supplied, and MODE is omitted, the output is in a form"
-
-#: builtins.c:1081
-msgid "that may be used as input.  If MODE begins with a digit, it is"
-msgstr "that may be used as input.  If MODE begins with a digit, it is"
-
-#: builtins.c:1082
-msgid "interpreted as an octal number, otherwise it is a symbolic mode string"
-msgstr "interpreted as an octal number, otherwise it is a symbolic mode string"
-
-#: builtins.c:1083
-msgid "like that accepted by chmod(1)."
-msgstr "like that accepted by chmod(1)."
-
-#: builtins.c:1090 builtins.c:1102
-msgid "Wait for the specified process and report its termination status.  If"
-msgstr "Wait for the specified process and report its termination status.  If"
-
-#: builtins.c:1091 builtins.c:1103
-msgid "N is not given, all currently active child processes are waited for,"
-msgstr "N is not given, all currently active child processes are waited for,"
-
-#: builtins.c:1092
-msgid "and the return code is zero.  N may be a process ID or a job"
-msgstr "and the return code is zero.  N may be a process ID or a job"
-
-#: builtins.c:1093
-msgid "specification; if a job spec is given, all processes in the job's"
-msgstr "specification; if a job spec is given, all processes in the job's"
-
-#: builtins.c:1094
-msgid "pipeline are waited for."
-msgstr "pipeline are waited for."
-
-#: builtins.c:1104
-msgid "and the return code is zero.  N is a process ID; if it is not given,"
-msgstr "and the return code is zero.  N is a process ID; if it is not given,"
-
-#: builtins.c:1105
-msgid "all child processes of the shell are waited for."
-msgstr "all child processes of the shell are waited for."
-
-#: builtins.c:1112
-msgid "The `for' loop executes a sequence of commands for each member in a"
-msgstr ""
-"The ‘\e[1mfor\e[0m’ loop executes a sequence of commands for each member in a"
-
-#: builtins.c:1113
-msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-msgstr ""
-"list of items.  If ‘\e[1min WORDS ...;\e[0m’ is not present, then ‘\e[1min “\e[1m$@\e"
-"[0m”\e[0m’ is"
-
-#: builtins.c:1114
-msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
-msgstr "assumed.  For each element in WORDS, NAME is set to that element, and"
-
-#: builtins.c:1115
-msgid "the COMMANDS are executed."
-msgstr "the COMMANDS are executed."
-
-#: builtins.c:1121
-msgid "Equivalent to"
-msgstr "Equivalent to"
-
-#: builtins.c:1122
-msgid "\t(( EXP1 ))"
-msgstr "\t(( EXP1 ))"
-
-#: builtins.c:1123
-msgid "\twhile (( EXP2 )); do"
-msgstr "\twhile (( EXP2 )); do"
-
-#: builtins.c:1124
-msgid "\t\tCOMMANDS"
-msgstr "\t\tCOMMANDS"
-
-#: builtins.c:1125
-msgid "\t\t(( EXP3 ))"
-msgstr "\t\t(( EXP3 ))"
-
-#: builtins.c:1126
-msgid "\tdone"
-msgstr "\tdone"
-
-#: builtins.c:1127
-msgid "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-
-#: builtins.c:1128
-msgid "omitted, it behaves as if it evaluates to 1."
-msgstr "omitted, it behaves as if it evaluates to 1."
-
-#: builtins.c:1134
-msgid "The WORDS are expanded, generating a list of words.  The"
-msgstr "The WORDS are expanded, generating a list of words.  The"
-
-#: builtins.c:1135
-msgid "set of expanded words is printed on the standard error, each"
-msgstr "set of expanded words is printed on the standard error, each"
-
-#: builtins.c:1136
-msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-msgstr ""
-"preceded by a number.  If ‘\e[1min WORDS\e[0m’ is not present, ‘\e[1min “\e[1m$@\e"
-"[0m”\e[0m’"
-
-#: builtins.c:1137
-msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-msgstr "is assumed.  The PS3 prompt is then displayed and a line read"
-
-#: builtins.c:1138
-msgid "from the standard input.  If the line consists of the number"
-msgstr "from the standard input.  If the line consists of the number"
-
-#: builtins.c:1139
-msgid "corresponding to one of the displayed words, then NAME is set"
-msgstr "corresponding to one of the displayed words, then NAME is set"
-
-#: builtins.c:1140
-msgid "to that word.  If the line is empty, WORDS and the prompt are"
-msgstr "to that word.  If the line is empty, WORDS and the prompt are"
-
-#: builtins.c:1141
-msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-msgstr "redisplayed.  If EOF is read, the command completes.  Any other"
-
-#: builtins.c:1142
-msgid "value read causes NAME to be set to null.  The line read is saved"
-msgstr "value read causes NAME to be set to null.  The line read is saved"
-
-#: builtins.c:1143
-msgid "in the variable REPLY.  COMMANDS are executed after each selection"
-msgstr "in the variable REPLY.  COMMANDS are executed after each selection"
-
-#: builtins.c:1144
-msgid "until a break command is executed."
-msgstr "until a break command is executed."
-
-#: builtins.c:1150
-msgid "Execute PIPELINE and print a summary of the real time, user CPU time,"
-msgstr "Execute PIPELINE and print a summary of the real time, user CPU time,"
-
-#: builtins.c:1151
-msgid "and system CPU time spent executing PIPELINE when it terminates."
-msgstr "and system CPU time spent executing PIPELINE when it terminates."
-
-#: builtins.c:1152
-msgid "The return status is the return status of PIPELINE.  The `-p' option"
-msgstr ""
-"The return status is the return status of PIPELINE.  The ‘\e[1m-p\e[0m’ option"
-
-#: builtins.c:1153
-msgid "prints the timing summary in a slightly different format.  This uses"
-msgstr "prints the timing summary in a slightly different format.  This uses"
-
-#: builtins.c:1154
-msgid "the value of the TIMEFORMAT variable as the output format."
-msgstr "the value of the TIMEFORMAT variable as the output format."
-
-#: builtins.c:1160
-msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-
-#: builtins.c:1161
-msgid "`|' is used to separate multiple patterns."
-msgstr "‘\e[1m|\e[0m’ is used to separate multiple patterns."
-
-#: builtins.c:1167
-msgid ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-msgstr ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-
-#: builtins.c:1168
-msgid ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-msgstr ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-
-#: builtins.c:1169
-msgid ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-msgstr ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-
-#: builtins.c:1170
-msgid ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-msgstr ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-
-#: builtins.c:1171
-msgid ""
-"are executed, if present.  The exit status is the exit status of the last"
-msgstr ""
-"are executed, if present.  The exit status is the exit status of the last"
-
-#: builtins.c:1172
-msgid "command executed, or zero if no condition tested true."
-msgstr "command executed, or zero if no condition tested true."
-
-#: builtins.c:1178 builtins.c:1185
-msgid "Expand and execute COMMANDS as long as the final command in the"
-msgstr "Expand and execute COMMANDS as long as the final command in the"
-
-#: builtins.c:1179
-msgid "`while' COMMANDS has an exit status of zero."
-msgstr "‘\e[1mwhile\e[0m’ COMMANDS has an exit status of zero."
-
-#: builtins.c:1186
-msgid "`until' COMMANDS has an exit status which is not zero."
-msgstr "‘\e[1muntil\e[0m’ COMMANDS has an exit status which is not zero."
-
-#: builtins.c:1192
-msgid "Create a simple command invoked by NAME which runs COMMANDS."
-msgstr "Create a simple command invoked by NAME which runs COMMANDS."
-
-#: builtins.c:1193
-msgid "Arguments on the command line along with NAME are passed to the"
-msgstr "Arguments on the command line along with NAME are passed to the"
-
-#: builtins.c:1194
-msgid "function as $0 .. $n."
-msgstr "function as $0 .. $n."
-
-#: builtins.c:1200
-msgid "Run a set of commands in a group.  This is one way to redirect an"
-msgstr "Run a set of commands in a group.  This is one way to redirect an"
-
-#: builtins.c:1201
-msgid "entire set of commands."
-msgstr "entire set of commands."
-
-#: builtins.c:1207
-msgid "This is similar to the `fg' command.  Resume a stopped or background"
-msgstr ""
-"This is similar to the ‘\e[1mfg\e[0m’ command.  Resume a stopped or background"
-
-#: builtins.c:1208
-msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-msgstr "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-
-#: builtins.c:1209
-msgid "WORD, then the job whose name begins with WORD is used.  Following the"
-msgstr "WORD, then the job whose name begins with WORD is used.  Following the"
-
-#: builtins.c:1210
-msgid "job specification with a `&' places the job in the background."
-msgstr "job specification with a ‘\e[1m&\e[0m’ places the job in the background."
-
-#: builtins.c:1216
-msgid "The EXPRESSION is evaluated according to the rules for arithmetic"
-msgstr "The EXPRESSION is evaluated according to the rules for arithmetic"
-
-#: builtins.c:1217
-msgid "evaluation.  Equivalent to \"let EXPRESSION\"."
-msgstr "evaluation.  Equivalent to “\e[1mlet EXPRESSION\e[0m”."
-
-#: builtins.c:1223
-msgid ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-msgstr ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-
-#: builtins.c:1224
-msgid ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-msgstr ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-
-#: builtins.c:1225
-msgid ""
-"by the `test' builtin, and may be combined using the following operators"
-msgstr ""
-"by the ‘\e[1mtest\e[0m’ builtin, and may be combined using the following "
-"operators"
-
-#: builtins.c:1227
-msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-msgstr "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-
-#: builtins.c:1228
-msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-msgstr "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-
-#: builtins.c:1229
-msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-msgstr "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-
-#: builtins.c:1230
-msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-msgstr "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-
-#: builtins.c:1232
-msgid ""
-"When the `==' and `!=' operators are used, the string to the right of the"
-msgstr ""
-"When the ‘\e[1m==\e[0m’ and ‘\e[1m!=\e[0m’ operators are used, the string to the "
-"right of the"
-
-#: builtins.c:1233
-msgid "operator is used as a pattern and pattern matching is performed.  The"
-msgstr "operator is used as a pattern and pattern matching is performed.  The"
-
-#: builtins.c:1234
-msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-msgstr "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-
-#: builtins.c:1235
-msgid "determine the expression's value."
-msgstr "determine the expression's value."
-
-#: builtins.c:1241
-msgid "BASH_VERSION    Version information for this Bash."
-msgstr "BASH_VERSION    Version information for this Bash."
-
-#: builtins.c:1242
-msgid "CDPATH          A colon separated list of directories to search"
-msgstr "CDPATH          A colon separated list of directories to search"
-
-#: builtins.c:1243
-msgid "\t\twhen the argument to `cd' is not found in the current"
-msgstr "\t\twhen the argument to ‘\e[1mcd\e[0m’ is not found in the current"
-
-#: builtins.c:1244
-msgid "\t\tdirectory."
-msgstr "\t\tdirectory."
-
-#: builtins.c:1245
-msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-
-#: builtins.c:1246
-msgid "\t\tbe ignored by pathname expansion."
-msgstr "\t\tbe ignored by pathname expansion."
-
-#: builtins.c:1248
-msgid ""
-"HISTFILE        The name of the file where your command history is stored."
-msgstr ""
-"HISTFILE        The name of the file where your command history is stored."
-
-#: builtins.c:1249
-msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-msgstr "HISTFILESIZE    The maximum number of lines this file can contain."
-
-#: builtins.c:1250
-msgid "HISTSIZE        The maximum number of history lines that a running"
-msgstr "HISTSIZE        The maximum number of history lines that a running"
-
-#: builtins.c:1251
-msgid "\t\tshell can access."
-msgstr "\t\tshell can access."
-
-#: builtins.c:1253
-msgid "HOME            The complete pathname to your login directory."
-msgstr "HOME            The complete pathname to your login directory."
-
-#: builtins.c:1254
-msgid "HOSTNAME\tThe name of the current host."
-msgstr "HOSTNAME\tThe name of the current host."
-
-#: builtins.c:1255
-msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-msgstr "HOSTTYPE        The type of CPU this version of Bash is running under."
-
-#: builtins.c:1256
-msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-msgstr "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-
-#: builtins.c:1257
-msgid "\t\tcharacter as the sole input.  If set, then the value"
-msgstr "\t\tcharacter as the sole input.  If set, then the value"
-
-#: builtins.c:1258
-msgid "\t\tof it is the number of EOF characters that can be seen"
-msgstr "\t\tof it is the number of EOF characters that can be seen"
-
-#: builtins.c:1259
-msgid "\t\tin a row on an empty line before the shell will exit"
-msgstr "\t\tin a row on an empty line before the shell will exit"
-
-#: builtins.c:1260
-msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-msgstr "\t\t(default 10).  When unset, EOF signifies the end of input."
-
-#: builtins.c:1261
-msgid "MACHTYPE\tA string describing the current system Bash is running on."
-msgstr "MACHTYPE\tA string describing the current system Bash is running on."
-
-#: builtins.c:1262
-msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-
-#: builtins.c:1263
-msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks"
-
-#: builtins.c:1264
-msgid "\t\tfor new mail."
-msgstr "\t\tfor new mail."
-
-#: builtins.c:1265
-msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-
-#: builtins.c:1266
-msgid "PATH            A colon-separated list of directories to search when"
-msgstr "PATH            A colon-separated list of directories to search when"
-
-#: builtins.c:1267
-msgid "\t\tlooking for commands."
-msgstr "\t\tlooking for commands."
-
-#: builtins.c:1268
-msgid "PROMPT_COMMAND  A command to be executed before the printing of each"
-msgstr "PROMPT_COMMAND  A command to be executed before the printing of each"
-
-#: builtins.c:1269
-msgid "\t\tprimary prompt."
-msgstr "\t\tprimary prompt."
-
-#: builtins.c:1270
-msgid "PS1             The primary prompt string."
-msgstr "PS1             The primary prompt string."
-
-#: builtins.c:1271
-msgid "PS2             The secondary prompt string."
-msgstr "PS2             The secondary prompt string."
-
-#: builtins.c:1272
-msgid "PWD\t\tThe full pathname of the current directory."
-msgstr "PWD\t\tThe full pathname of the current directory."
-
-#: builtins.c:1273
-msgid "SHELLOPTS\tA colon-separated list of enabled shell options."
-msgstr "SHELLOPTS\tA colon-separated list of enabled shell options."
-
-#: builtins.c:1274
-msgid "TERM            The name of the current terminal type."
-msgstr "TERM            The name of the current terminal type."
-
-#: builtins.c:1275
-msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-
-#: builtins.c:1276
-msgid "\t\t`time' reserved word."
-msgstr "\t\t‘\e[1mtime\e[0m’ reserved word."
-
-#: builtins.c:1277
-msgid "auto_resume     Non-null means a command word appearing on a line by"
-msgstr "auto_resume     Non-null means a command word appearing on a line by"
-
-#: builtins.c:1278
-msgid "\t\titself is first looked for in the list of currently"
-msgstr "\t\titself is first looked for in the list of currently"
-
-#: builtins.c:1279
-msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-msgstr "\t\tstopped jobs.  If found there, that job is foregrounded."
-
-#: builtins.c:1280
-msgid "\t\tA value of `exact' means that the command word must"
-msgstr "\t\tA value of ‘\e[1mexact\e[0m’ means that the command word must"
-
-#: builtins.c:1281
-msgid "\t\texactly match a command in the list of stopped jobs.  A"
-msgstr "\t\texactly match a command in the list of stopped jobs.  A"
-
-#: builtins.c:1282
-msgid "\t\tvalue of `substring' means that the command word must"
-msgstr "\t\tvalue of ‘\e[1msubstring\e[0m’ means that the command word must"
-
-#: builtins.c:1283
-msgid "\t\tmatch a substring of the job.  Any other value means that"
-msgstr "\t\tmatch a substring of the job.  Any other value means that"
-
-#: builtins.c:1284
-msgid "\t\tthe command must be a prefix of a stopped job."
-msgstr "\t\tthe command must be a prefix of a stopped job."
-
-#: builtins.c:1287
-msgid "histchars       Characters controlling history expansion and quick"
-msgstr "histchars       Characters controlling history expansion and quick"
-
-#: builtins.c:1288
-msgid "\t\tsubstitution.  The first character is the history"
-msgstr "\t\tsubstitution.  The first character is the history"
-
-#: builtins.c:1289
-msgid "\t\tsubstitution character, usually `!'.  The second is"
-msgstr "\t\tsubstitution character, usually ‘\e[1m!\e[0m’.  The second is"
-
-#: builtins.c:1290
-msgid "\t\tthe `quick substitution' character, usually `^'.  The"
-msgstr "\t\tthe ‘\e[1mquick substitution\e[0m’ character, usually ‘\e[1m^\e[0m’.  The"
-
-#: builtins.c:1291
-msgid "\t\tthird is the `history comment' character, usually `#'."
-msgstr "\t\tthird is the ‘\e[1mhistory comment\e[0m’ character, usually ‘\e[1m#\e[0m’."
-
-#: builtins.c:1293
-msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-
-#: builtins.c:1294
-msgid "\t\tcommands should be saved on the history list."
-msgstr "\t\tcommands should be saved on the history list."
-
-#: builtins.c:1306
-msgid "+N\tRotates the stack so that the Nth directory (counting"
-msgstr "+N\tRotates the stack so that the Nth directory (counting"
-
-#: builtins.c:1307
-msgid "\tfrom the left of the list shown by `dirs', starting with"
-msgstr "\tfrom the left of the list shown by ‘\e[1mdirs\e[0m’, starting with"
-
-#: builtins.c:1308 builtins.c:1312
-msgid "\tzero) is at the top."
-msgstr "\tzero) is at the top."
-
-#: builtins.c:1310
-msgid "-N\tRotates the stack so that the Nth directory (counting"
-msgstr "-N\tRotates the stack so that the Nth directory (counting"
-
-#: builtins.c:1311
-msgid "\tfrom the right of the list shown by `dirs', starting with"
-msgstr "\tfrom the right of the list shown by ‘\e[1mdirs\e[0m’, starting with"
-
-#: builtins.c:1314
-msgid "-n\tsuppress the normal change of directory when adding directories"
-msgstr "-n\tsuppress the normal change of directory when adding directories"
-
-#: builtins.c:1315
-msgid "\tto the stack, so only the stack is manipulated."
-msgstr "\tto the stack, so only the stack is manipulated."
-
-#: builtins.c:1317
-msgid "dir\tadds DIR to the directory stack at the top, making it the"
-msgstr "dir\tadds DIR to the directory stack at the top, making it the"
-
-#: builtins.c:1318
-msgid "\tnew current working directory."
-msgstr "\tnew current working directory."
-
-#: builtins.c:1332
-msgid "+N\tremoves the Nth entry counting from the left of the list"
-msgstr "+N\tremoves the Nth entry counting from the left of the list"
-
-#: builtins.c:1333
-msgid "\tshown by `dirs', starting with zero.  For example: `popd +0'"
-msgstr ""
-"\tshown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd +0\e[0m’"
-
-#: builtins.c:1334
-msgid "\tremoves the first directory, `popd +1' the second."
-msgstr "\tremoves the first directory, ‘\e[1mpopd +1\e[0m’ the second."
-
-#: builtins.c:1336
-msgid "-N\tremoves the Nth entry counting from the right of the list"
-msgstr "-N\tremoves the Nth entry counting from the right of the list"
-
-#: builtins.c:1337
-msgid "\tshown by `dirs', starting with zero.  For example: `popd -0'"
-msgstr ""
-"\tshown by ‘\e[1mdirs\e[0m’, starting with zero.  For example: ‘\e[1mpopd -0\e[0m’"
-
-#: builtins.c:1338
-msgid "\tremoves the last directory, `popd -1' the next to last."
-msgstr "\tremoves the last directory, ‘\e[1mpopd -1\e[0m’ the next to last."
-
-#: builtins.c:1340
-msgid "-n\tsuppress the normal change of directory when removing directories"
-msgstr "-n\tsuppress the normal change of directory when removing directories"
-
-#: builtins.c:1341
-msgid "\tfrom the stack, so only the stack is manipulated."
-msgstr "\tfrom the stack, so only the stack is manipulated."
-
-#: builtins.c:1363
-msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
-msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by"
-
-#: builtins.c:1364 builtins.c:1367
-msgid "\tdirs when invoked without options, starting with zero."
-msgstr "\tdirs when invoked without options, starting with zero."
-
-#: builtins.c:1366
-msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
-msgstr ""
-"-N\tdisplays the Nth entry counting from the right of the list shown by"
-
-#: builtins.c:1374
-msgid "Toggle the values of variables controlling optional behavior."
-msgstr "Toggle the values of variables controlling optional behavior."
-
-#: builtins.c:1375
-msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
-msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag"
-
-#: builtins.c:1376
-msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-msgstr "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-
-#: builtins.c:1377
-msgid "status indicates whether each OPTNAME is set or unset.  The -o"
-msgstr "status indicates whether each OPTNAME is set or unset.  The -o"
-
-#: builtins.c:1378
-msgid "option restricts the OPTNAMEs to those defined for use with"
-msgstr "option restricts the OPTNAMEs to those defined for use with"
-
-#: builtins.c:1379
-msgid "`set -o'.  With no options, or with the -p option, a list of all"
-msgstr "‘\e[1mset -o\e[0m’.  With no options, or with the -p option, a list of all"
-
-#: builtins.c:1380
-msgid "settable options is displayed, with an indication of whether or"
-msgstr "settable options is displayed, with an indication of whether or"
-
-#: builtins.c:1381
-msgid "not each is set."
-msgstr "not each is set."
-
-#: builtins.c:1387
-msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-msgstr ""
-"printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-
-#: builtins.c:1388
-msgid "is a character string which contains three types of objects: plain"
-msgstr "is a character string which contains three types of objects: plain"
-
-#: builtins.c:1389
-msgid ""
-"characters, which are simply copied to standard output, character escape"
-msgstr ""
-"characters, which are simply copied to standard output, character escape"
-
-#: builtins.c:1390
-msgid "sequences which are converted and copied to the standard output, and"
-msgstr "sequences which are converted and copied to the standard output, and"
-
-#: builtins.c:1391
-msgid ""
-"format specifications, each of which causes printing of the next successive"
-msgstr ""
-"format specifications, each of which causes printing of the next successive"
-
-#: builtins.c:1392
-msgid "argument.  In addition to the standard printf(1) formats, %b means to"
-msgstr "argument.  In addition to the standard printf(1) formats, %b means to"
-
-#: builtins.c:1393
-msgid "expand backslash escape sequences in the corresponding argument, and %q"
-msgstr ""
-"expand backslash escape sequences in the corresponding argument, and %q"
-
-#: builtins.c:1394
-msgid "means to quote the argument in a way that can be reused as shell input."
-msgstr ""
-"means to quote the argument in a way that can be reused as shell input."
-
-#: builtins.c:1401
-msgid "For each NAME, specify how arguments are to be completed."
-msgstr "For each NAME, specify how arguments are to be completed."
-
-#: builtins.c:1402
-msgid "If the -p option is supplied, or if no options are supplied, existing"
-msgstr "If the -p option is supplied, or if no options are supplied, existing"
-
-#: builtins.c:1403
-msgid "completion specifications are printed in a way that allows them to be"
-msgstr "completion specifications are printed in a way that allows them to be"
-
-#: builtins.c:1404
-msgid "reused as input.  The -r option removes a completion specification for"
-msgstr "reused as input.  The -r option removes a completion specification for"
+" For each NAME, specify how arguments are to be completed.\n"
+"    If the -p option is supplied, or if no options are supplied, existing\n"
+"    completion specifications are printed in a way that allows them to be\n"
+"    reused as input.  The -r option removes a completion specification for\n"
+"    each NAME, or, if no NAMEs are supplied, all completion specifications."
 
 #: builtins.c:1405
-msgid "each NAME, or, if no NAMEs are supplied, all completion specifications."
-msgstr ""
-"each NAME, or, if no NAMEs are supplied, all completion specifications."
-
-#: builtins.c:1413
-msgid "Display the possible completions depending on the options.  Intended"
-msgstr "Display the possible completions depending on the options.  Intended"
-
-#: builtins.c:1414
 msgid ""
-"to be used from within a shell function generating possible completions."
-msgstr ""
-"to be used from within a shell function generating possible completions."
-
-#: builtins.c:1415
-msgid "If the optional WORD argument is supplied, matches against WORD are"
-msgstr "If the optional WORD argument is supplied, matches against WORD are"
-
-#: builtins.c:1416
-msgid "generated."
-msgstr "generated."
+" Display the possible completions depending on the options.  Intended\n"
+"    to be used from within a shell function generating possible "
+"completions.\n"
+"    If the optional WORD argument is supplied, matches against WORD are\n"
+"    generated."
+msgstr ""
+" Display the possible completions depending on the options.  Intended\n"
+"    to be used from within a shell function generating possible "
+"completions.\n"
+"    If the optional WORD argument is supplied, matches against WORD are\n"
+"    generated."
index 62cf080..9dc7c43 100644 (file)
Binary files a/po/en@quot.gmo and b/po/en@quot.gmo differ
index a560bf6..fd0407c 100644 (file)
@@ -1,7 +1,7 @@
 # English translations for GNU bash package.
-# Copyright (C) 2004 Free Software Foundation, Inc.
+# Copyright (C) 2005 Free Software Foundation, Inc.
 # This file is distributed under the same license as the GNU bash package.
-# Automatically generated, 2004.
+# Automatically generated, 2005.
 #
 # All this catalog "translates" are quotation characters.
 # The msgids must be ASCII and therefore cannot contain real quotation
 # transliterated to apostrophes, and the double quotation marks are
 # transliterated to 0x22.
 #
-#: builtins/caller.def:128 builtins/caller.def:132 builtins/pushd.def:655
-#: builtins/pushd.def:663 builtins/pushd.def:666 builtins/pushd.def:676
-#: builtins/pushd.def:680 builtins/pushd.def:684 builtins/pushd.def:687
-#: builtins/pushd.def:690 builtins/pushd.def:699 builtins/pushd.def:703
-#: builtins/pushd.def:707 builtins/pushd.def:710 builtins.c:321 builtins.c:325
-#: builtins.c:390 builtins.c:392 builtins.c:401 builtins.c:404 builtins.c:408
-#: builtins.c:445 builtins.c:487 builtins.c:491 builtins.c:498 builtins.c:509
-#: builtins.c:513 builtins.c:552 builtins.c:555 builtins.c:559 builtins.c:562
-#: builtins.c:630 builtins.c:637 builtins.c:692 builtins.c:713 builtins.c:718
-#: builtins.c:722 builtins.c:745 builtins.c:835 builtins.c:919 builtins.c:921
-#: builtins.c:943 builtins.c:946 builtins.c:948 builtins.c:950 builtins.c:952
-#: builtins.c:954 builtins.c:957 builtins.c:966 builtins.c:968 builtins.c:973
-#: builtins.c:976 builtins.c:1019 builtins.c:1024 builtins.c:1028
-#: builtins.c:1032 builtins.c:1034 builtins.c:1047 builtins.c:1062
-#: builtins.c:1226 builtins.c:1231 builtins.c:1305 builtins.c:1309
-#: builtins.c:1313 builtins.c:1316 builtins.c:1319 builtins.c:1331
-#: builtins.c:1335 builtins.c:1339 builtins.c:1342 builtins.c:1354
-#: builtins.c:1362 builtins.c:1365
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bash 3.0-rc1\n"
-"POT-Creation-Date: 2003-12-22 15:34-0500\n"
-"PO-Revision-Date: 2003-12-22 15:34-0500\n"
+"Project-Id-Version: GNU bash 3.1-beta1\n"
+"POT-Creation-Date: 2005-10-03 17:31-0400\n"
+"PO-Revision-Date: 2005-10-03 17:31-0400\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Report-Msgid-Bugs-To: bug-bash@gnu.org\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: arrayfunc.c:45
+#: arrayfunc.c:48
 msgid "bad array subscript"
 msgstr "bad array subscript"
 
-#: arrayfunc.c:306
+#: arrayfunc.c:360
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: cannot assign to non-numeric index"
 
-#: bashhist.c:321
+#: bashhist.c:328
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: cannot create: %s"
 
-#: bashline.c:2791
+#: bashline.c:2947
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: cannot find keymap for command"
 
-#: bashline.c:2840
+#: bashline.c:2996
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: first non-whitespace character is not ‘\"’"
 
-#: bashline.c:2869
+#: bashline.c:3025
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no closing ‘%c’ in %s"
 
-#: bashline.c:2903
+#: bashline.c:3059
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: missing colon separator"
 
-#: builtins/alias.def:123
-#, c-format
-msgid "`%s': invalid alias name"
-msgstr "‘%s’: invalid alias name"
-
 #: builtins/bind.def:194
 #, c-format
 msgid "`%s': invalid keymap name"
@@ -128,48 +104,51 @@ msgstr "%s can be invoked via "
 msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr "only meaningful in a ‘for’, ‘while’, or ‘until’ loop"
 
-#: builtins/caller.def:127 builtins.c:320
+#: builtins/caller.def:132
 msgid "Returns the context of the current subroutine call."
 msgstr "Returns the context of the current subroutine call."
 
-#: builtins/caller.def:129 builtins.c:322
+#: builtins/caller.def:133 builtins/caller.def:137 builtins/pushd.def:660
+#: builtins/pushd.def:668 builtins/pushd.def:671 builtins/pushd.def:681
+#: builtins/pushd.def:685 builtins/pushd.def:689 builtins/pushd.def:692
+#: builtins/pushd.def:695 builtins/pushd.def:704 builtins/pushd.def:708
+#: builtins/pushd.def:712 builtins/pushd.def:715
+msgid " "
+msgstr " "
+
+#: builtins/caller.def:134
 msgid "Without EXPR, returns returns \"$line $filename\".  With EXPR,"
 msgstr "Without EXPR, returns returns “$line $filename”.  With EXPR,"
 
-#: builtins/caller.def:130 builtins.c:323
+#: builtins/caller.def:135
 msgid "returns \"$line $subroutine $filename\"; this extra information"
 msgstr "returns “$line $subroutine $filename”; this extra information"
 
-#: builtins/caller.def:131 builtins.c:324
+#: builtins/caller.def:136
 msgid "can be used used to provide a stack trace."
 msgstr "can be used used to provide a stack trace."
 
-#: builtins/caller.def:133 builtins.c:326
+#: builtins/caller.def:138
 msgid "The value of EXPR indicates how many call frames to go back before the"
 msgstr "The value of EXPR indicates how many call frames to go back before the"
 
-#: builtins/caller.def:134 builtins.c:327
+#: builtins/caller.def:139
 msgid "current one; the top frame is frame 0."
 msgstr "current one; the top frame is frame 0."
 
-#: builtins/cd.def:188
+#: builtins/cd.def:203
 msgid "HOME not set"
 msgstr "HOME not set"
 
-#: builtins/cd.def:200
+#: builtins/cd.def:215
 msgid "OLDPWD not set"
 msgstr "OLDPWD not set"
 
-#: builtins/cd.def:357
-#, c-format
-msgid "write error: %s"
-msgstr "write error: %s"
-
 #: builtins/common.c:133 test.c:921
 msgid "too many arguments"
 msgstr "too many arguments"
 
-#: builtins/common.c:157 shell.c:465 shell.c:737
+#: builtins/common.c:157 shell.c:474 shell.c:747
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: option requires an argument"
@@ -184,7 +163,7 @@ msgstr "%s: numeric argument required"
 msgid "%s: not found"
 msgstr "%s: not found"
 
-#: builtins/common.c:180 shell.c:750
+#: builtins/common.c:180 shell.c:760
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: invalid option"
@@ -194,7 +173,7 @@ msgstr "%s: invalid option"
 msgid "%s: invalid option name"
 msgstr "%s: invalid option name"
 
-#: builtins/common.c:194 general.c:229 general.c:234
+#: builtins/common.c:194 general.c:231 general.c:236
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "‘%s’: not a valid identifier"
@@ -261,12 +240,17 @@ msgstr "restricted"
 msgid "%s: not a shell builtin"
 msgstr "%s: not a shell builtin"
 
-#: builtins/common.c:486
+#: builtins/common.c:276
+#, c-format
+msgid "write error: %s"
+msgstr "write error: %s"
+
+#: builtins/common.c:484
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error retrieving current directory: %s: %s\n"
 
-#: builtins/common.c:553 builtins/common.c:555
+#: builtins/common.c:550 builtins/common.c:552
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ambiguous job spec"
@@ -293,16 +277,16 @@ msgstr "warning: -C option may not work as you expect"
 msgid "can only be used in a function"
 msgstr "can only be used in a function"
 
-#: builtins/declare.def:295
+#: builtins/declare.def:301
 msgid "cannot use `-f' to make functions"
 msgstr "cannot use ‘-f’ to make functions"
 
-#: builtins/declare.def:307 execute_cmd.c:3949
+#: builtins/declare.def:313 execute_cmd.c:3986
 #, c-format
 msgid "%s: readonly function"
 msgstr "%s: readonly function"
 
-#: builtins/declare.def:389
+#: builtins/declare.def:401
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: cannot destroy array variables in this way"
@@ -331,17 +315,17 @@ msgstr "%s: not dynamically loaded"
 msgid "%s: cannot delete: %s"
 msgstr "%s: cannot delete: %s"
 
-#: builtins/evalfile.c:128 execute_cmd.c:3821 shell.c:1395
+#: builtins/evalfile.c:129 execute_cmd.c:3852 shell.c:1408
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is a directory"
 
-#: builtins/evalfile.c:133
+#: builtins/evalfile.c:134
 #, c-format
 msgid "%s: not a regular file"
 msgstr "%s: not a regular file"
 
-#: builtins/evalfile.c:141
+#: builtins/evalfile.c:142
 #, c-format
 msgid "%s: file is too large"
 msgstr "%s: file is too large"
@@ -359,20 +343,20 @@ msgstr "not login shell: use ‘exit’"
 msgid "There are stopped jobs.\n"
 msgstr "There are stopped jobs.\n"
 
-#: builtins/fc.def:252
+#: builtins/fc.def:259
 msgid "no command found"
 msgstr "no command found"
 
-#: builtins/fc.def:317
+#: builtins/fc.def:329
 msgid "history specification"
 msgstr "history specification"
 
-#: builtins/fc.def:338
+#: builtins/fc.def:350
 #, c-format
 msgid "%s: cannot open temp file: %s"
 msgstr "%s: cannot open temp file: %s"
 
-#: builtins/fg_bg.def:133
+#: builtins/fg_bg.def:149
 #, c-format
 msgid "job %d started without job control"
 msgstr "job %d started without job control"
@@ -434,15 +418,15 @@ msgstr ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 
-#: builtins/history.def:148
+#: builtins/history.def:150
 msgid "cannot use more than one of -anrw"
 msgstr "cannot use more than one of -anrw"
 
-#: builtins/history.def:180
+#: builtins/history.def:182
 msgid "history position"
 msgstr "history position"
 
-#: builtins/history.def:390
+#: builtins/history.def:400
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: history expansion failed"
@@ -456,205 +440,204 @@ msgstr "no other options allowed with ‘-x’"
 msgid "%s: arguments must be process or job IDs"
 msgstr "%s: arguments must be process or job IDs"
 
-#: builtins/kill.def:248
+#: builtins/kill.def:250
 msgid "Unknown error"
 msgstr "Unknown error"
 
-#: builtins/let.def:94 builtins/let.def:119 expr.c:496 expr.c:511
+#: builtins/let.def:94 builtins/let.def:119 expr.c:497 expr.c:512
 msgid "expression expected"
 msgstr "expression expected"
 
-#: builtins/printf.def:249
+#: builtins/printf.def:327
 #, c-format
 msgid "`%s': missing format character"
 msgstr "‘%s’: missing format character"
 
-#: builtins/printf.def:408
+#: builtins/printf.def:502
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "‘%c’: invalid format character"
 
-#: builtins/printf.def:601
+#: builtins/printf.def:708
 msgid "missing hex digit for \\x"
 msgstr "missing hex digit for \\x"
 
-#: builtins/pushd.def:168
+#: builtins/pushd.def:173
 msgid "no other directory"
 msgstr "no other directory"
 
-#: builtins/pushd.def:435
+#: builtins/pushd.def:440
 msgid "<no current directory>"
 msgstr "<no current directory>"
 
-#: builtins/pushd.def:652 builtins.c:1351
+#: builtins/pushd.def:657
 msgid "Display the list of currently remembered directories.  Directories"
 msgstr "Display the list of currently remembered directories.  Directories"
 
-#: builtins/pushd.def:653 builtins.c:1352
+#: builtins/pushd.def:658
 msgid "find their way onto the list with the `pushd' command; you can get"
 msgstr "find their way onto the list with the ‘pushd’ command; you can get"
 
-#: builtins/pushd.def:654 builtins.c:1353
+#: builtins/pushd.def:659
 msgid "back up through the list with the `popd' command."
 msgstr "back up through the list with the ‘popd’ command."
 
-#: builtins/pushd.def:656 builtins.c:1355
+#: builtins/pushd.def:661
 msgid "The -l flag specifies that `dirs' should not print shorthand versions"
 msgstr "The -l flag specifies that ‘dirs’ should not print shorthand versions"
 
-#: builtins/pushd.def:657 builtins.c:1356
+#: builtins/pushd.def:662
 msgid "of directories which are relative to your home directory.  This means"
 msgstr "of directories which are relative to your home directory.  This means"
 
-#: builtins/pushd.def:658 builtins.c:1357
+#: builtins/pushd.def:663
 msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
 msgstr "that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’.  The -v flag"
 
-#: builtins/pushd.def:659 builtins.c:1358
+#: builtins/pushd.def:664
 msgid "causes `dirs' to print the directory stack with one entry per line,"
 msgstr "causes ‘dirs’ to print the directory stack with one entry per line,"
 
-#: builtins/pushd.def:660 builtins.c:1359
+#: builtins/pushd.def:665
 msgid "prepending the directory name with its position in the stack.  The -p"
 msgstr "prepending the directory name with its position in the stack.  The -p"
 
-#: builtins/pushd.def:661 builtins.c:1360
+#: builtins/pushd.def:666
 msgid "flag does the same thing, but the stack position is not prepended."
 msgstr "flag does the same thing, but the stack position is not prepended."
 
-#: builtins/pushd.def:662 builtins.c:1361
+#: builtins/pushd.def:667
 msgid "The -c flag clears the directory stack by deleting all of the elements."
 msgstr ""
 "The -c flag clears the directory stack by deleting all of the elements."
 
-#: builtins/pushd.def:664
+#: builtins/pushd.def:669
 msgid "+N   displays the Nth entry counting from the left of the list shown by"
 msgstr ""
 "+N   displays the Nth entry counting from the left of the list shown by"
 
-#: builtins/pushd.def:665 builtins/pushd.def:668
+#: builtins/pushd.def:670 builtins/pushd.def:673
 msgid "     dirs when invoked without options, starting with zero."
 msgstr "     dirs when invoked without options, starting with zero."
 
-#: builtins/pushd.def:667
+#: builtins/pushd.def:672
 msgid ""
 "-N   displays the Nth entry counting from the right of the list shown by"
 msgstr ""
 "-N   displays the Nth entry counting from the right of the list shown by"
 
-#: builtins/pushd.def:673 builtins.c:1302
+#: builtins/pushd.def:678
 msgid "Adds a directory to the top of the directory stack, or rotates"
 msgstr "Adds a directory to the top of the directory stack, or rotates"
 
-#: builtins/pushd.def:674 builtins.c:1303
+#: builtins/pushd.def:679
 msgid "the stack, making the new top of the stack the current working"
 msgstr "the stack, making the new top of the stack the current working"
 
-#: builtins/pushd.def:675 builtins.c:1304
+#: builtins/pushd.def:680
 msgid "directory.  With no arguments, exchanges the top two directories."
 msgstr "directory.  With no arguments, exchanges the top two directories."
 
-#: builtins/pushd.def:677
+#: builtins/pushd.def:682
 msgid "+N   Rotates the stack so that the Nth directory (counting"
 msgstr "+N   Rotates the stack so that the Nth directory (counting"
 
-#: builtins/pushd.def:678
+#: builtins/pushd.def:683
 msgid "     from the left of the list shown by `dirs', starting with"
 msgstr "     from the left of the list shown by ‘dirs’, starting with"
 
-#: builtins/pushd.def:679 builtins/pushd.def:683
+#: builtins/pushd.def:684 builtins/pushd.def:688
 msgid "     zero) is at the top."
 msgstr "     zero) is at the top."
 
-#: builtins/pushd.def:681
+#: builtins/pushd.def:686
 msgid "-N   Rotates the stack so that the Nth directory (counting"
 msgstr "-N   Rotates the stack so that the Nth directory (counting"
 
-#: builtins/pushd.def:682
+#: builtins/pushd.def:687
 msgid "     from the right of the list shown by `dirs', starting with"
 msgstr "     from the right of the list shown by ‘dirs’, starting with"
 
-#: builtins/pushd.def:685
+#: builtins/pushd.def:690
 msgid "-n   suppress the normal change of directory when adding directories"
 msgstr "-n   suppress the normal change of directory when adding directories"
 
-#: builtins/pushd.def:686
+#: builtins/pushd.def:691
 msgid "     to the stack, so only the stack is manipulated."
 msgstr "     to the stack, so only the stack is manipulated."
 
-#: builtins/pushd.def:688
+#: builtins/pushd.def:693
 msgid "dir  adds DIR to the directory stack at the top, making it the"
 msgstr "dir  adds DIR to the directory stack at the top, making it the"
 
-#: builtins/pushd.def:689
+#: builtins/pushd.def:694
 msgid "     new current working directory."
 msgstr "     new current working directory."
 
-#: builtins/pushd.def:691 builtins/pushd.def:711 builtins.c:1320
-#: builtins.c:1343
+#: builtins/pushd.def:696 builtins/pushd.def:716
 msgid "You can see the directory stack with the `dirs' command."
 msgstr "You can see the directory stack with the ‘dirs’ command."
 
-#: builtins/pushd.def:696 builtins.c:1328
+#: builtins/pushd.def:701
 msgid "Removes entries from the directory stack.  With no arguments,"
 msgstr "Removes entries from the directory stack.  With no arguments,"
 
-#: builtins/pushd.def:697 builtins.c:1329
+#: builtins/pushd.def:702
 msgid "removes the top directory from the stack, and cd's to the new"
 msgstr "removes the top directory from the stack, and cd's to the new"
 
-#: builtins/pushd.def:698 builtins.c:1330
+#: builtins/pushd.def:703
 msgid "top directory."
 msgstr "top directory."
 
-#: builtins/pushd.def:700
+#: builtins/pushd.def:705
 msgid "+N   removes the Nth entry counting from the left of the list"
 msgstr "+N   removes the Nth entry counting from the left of the list"
 
-#: builtins/pushd.def:701
+#: builtins/pushd.def:706
 msgid "     shown by `dirs', starting with zero.  For example: `popd +0'"
 msgstr "     shown by ‘dirs’, starting with zero.  For example: ‘popd +0’"
 
-#: builtins/pushd.def:702
+#: builtins/pushd.def:707
 msgid "     removes the first directory, `popd +1' the second."
 msgstr "     removes the first directory, ‘popd +1’ the second."
 
-#: builtins/pushd.def:704
+#: builtins/pushd.def:709
 msgid "-N   removes the Nth entry counting from the right of the list"
 msgstr "-N   removes the Nth entry counting from the right of the list"
 
-#: builtins/pushd.def:705
+#: builtins/pushd.def:710
 msgid "     shown by `dirs', starting with zero.  For example: `popd -0'"
 msgstr "     shown by ‘dirs’, starting with zero.  For example: ‘popd -0’"
 
-#: builtins/pushd.def:706
+#: builtins/pushd.def:711
 msgid "     removes the last directory, `popd -1' the next to last."
 msgstr "     removes the last directory, ‘popd -1’ the next to last."
 
-#: builtins/pushd.def:708
+#: builtins/pushd.def:713
 msgid "-n   suppress the normal change of directory when removing directories"
 msgstr "-n   suppress the normal change of directory when removing directories"
 
-#: builtins/pushd.def:709
+#: builtins/pushd.def:714
 msgid "     from the stack, so only the stack is manipulated."
 msgstr "     from the stack, so only the stack is manipulated."
 
-#: builtins/read.def:207
+#: builtins/read.def:211
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: invalid timeout specification"
 
-#: builtins/read.def:230
+#: builtins/read.def:234
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: invalid file descriptor specification"
 
-#: builtins/read.def:237
+#: builtins/read.def:241
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: invalid file descriptor: %s"
 
-#: builtins/read.def:463
+#: builtins/read.def:474
 #, c-format
 msgid "read error: %d: %s"
 msgstr "read error: %d: %s"
@@ -663,26 +646,26 @@ msgstr "read error: %d: %s"
 msgid "can only `return' from a function or sourced script"
 msgstr "can only ‘return’ from a function or sourced script"
 
-#: builtins/set.def:743
+#: builtins/set.def:745
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "cannot simultaneously unset a function and a variable"
 
-#: builtins/set.def:780
+#: builtins/set.def:782
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: cannot unset"
 
-#: builtins/set.def:787
+#: builtins/set.def:789
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: cannot unset: readonly %s"
 
-#: builtins/set.def:798
+#: builtins/set.def:800
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: not an array variable"
 
-#: builtins/setattr.def:165
+#: builtins/setattr.def:166
 #, c-format
 msgid "%s: not a function"
 msgstr "%s: not a function"
@@ -691,11 +674,11 @@ msgstr "%s: not a function"
 msgid "shift count"
 msgstr "shift count"
 
-#: builtins/shopt.def:226
+#: builtins/shopt.def:227
 msgid "cannot set and unset shell options simultaneously"
 msgstr "cannot set and unset shell options simultaneously"
 
-#: builtins/shopt.def:291
+#: builtins/shopt.def:292
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: invalid shell option name"
@@ -717,52 +700,52 @@ msgstr "cannot suspend"
 msgid "cannot suspend a login shell"
 msgstr "cannot suspend a login shell"
 
-#: builtins/type.def:231
+#: builtins/type.def:232
 #, c-format
 msgid "%s is aliased to `%s'\n"
 msgstr "%s is aliased to ‘%s’\n"
 
-#: builtins/type.def:252
+#: builtins/type.def:253
 #, c-format
 msgid "%s is a shell keyword\n"
 msgstr "%s is a shell keyword\n"
 
-#: builtins/type.def:272
+#: builtins/type.def:273
 #, c-format
 msgid "%s is a function\n"
 msgstr "%s is a function\n"
 
-#: builtins/type.def:297
+#: builtins/type.def:298
 #, c-format
 msgid "%s is a shell builtin\n"
 msgstr "%s is a shell builtin\n"
 
-#: builtins/type.def:318
+#: builtins/type.def:319
 #, c-format
 msgid "%s is %s\n"
 msgstr "%s is %s\n"
 
-#: builtins/type.def:338
+#: builtins/type.def:339
 #, c-format
 msgid "%s is hashed (%s)\n"
 msgstr "%s is hashed (%s)\n"
 
-#: builtins/ulimit.def:332
+#: builtins/ulimit.def:344
 #, c-format
 msgid "%s: invalid limit argument"
 msgstr "%s: invalid limit argument"
 
-#: builtins/ulimit.def:358
+#: builtins/ulimit.def:370
 #, c-format
 msgid "`%c': bad command"
 msgstr "‘%c’: bad command"
 
-#: builtins/ulimit.def:387
+#: builtins/ulimit.def:399
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: cannot get limit: %s"
 
-#: builtins/ulimit.def:425
+#: builtins/ulimit.def:437
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: cannot modify limit: %s"
@@ -776,7 +759,7 @@ msgstr "octal number"
 msgid "`%c': invalid symbolic mode operator"
 msgstr "‘%c’: invalid symbolic mode operator"
 
-#: builtins/umask.def:279
+#: builtins/umask.def:281
 #, c-format
 msgid "`%c': invalid symbolic mode character"
 msgstr "‘%c’: invalid symbolic mode character"
@@ -816,11 +799,11 @@ msgstr "bad jump"
 msgid "%s: unbound variable"
 msgstr "%s: unbound variable"
 
-#: eval.c:175
+#: eval.c:176
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atimed out waiting for input: auto-logout\n"
 
-#: execute_cmd.c:466
+#: execute_cmd.c:471
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "cannot redirect standard input from /dev/null: %s"
@@ -830,88 +813,88 @@ msgstr "cannot redirect standard input from /dev/null: %s"
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: ‘%c’: invalid format character"
 
-#: execute_cmd.c:3521
+#: execute_cmd.c:3551
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restricted: cannot specify ‘/’ in command names"
 
-#: execute_cmd.c:3609
+#: execute_cmd.c:3639
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: command not found"
 
-#: execute_cmd.c:3839
+#: execute_cmd.c:3876
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: bad interpreter"
 
-#: execute_cmd.c:3876
+#: execute_cmd.c:3913
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: cannot execute binary file"
 
-#: execute_cmd.c:3988
+#: execute_cmd.c:4025
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "cannot duplicate fd %d to fd %d"
 
-#: expr.c:239
+#: expr.c:240
 msgid "expression recursion level exceeded"
 msgstr "expression recursion level exceeded"
 
-#: expr.c:263
+#: expr.c:264
 msgid "recursion stack underflow"
 msgstr "recursion stack underflow"
 
-#: expr.c:374
+#: expr.c:375
 msgid "syntax error in expression"
 msgstr "syntax error in expression"
 
-#: expr.c:414
+#: expr.c:415
 msgid "attempted assignment to non-variable"
 msgstr "attempted assignment to non-variable"
 
-#: expr.c:435 expr.c:440 expr.c:750
+#: expr.c:436 expr.c:441 expr.c:751
 msgid "division by 0"
 msgstr "division by 0"
 
-#: expr.c:466
+#: expr.c:467
 msgid "bug: bad expassign token"
 msgstr "bug: bad expassign token"
 
-#: expr.c:508
+#: expr.c:509
 msgid "`:' expected for conditional expression"
 msgstr "‘:’ expected for conditional expression"
 
-#: expr.c:775
+#: expr.c:776
 msgid "exponent less than 0"
 msgstr "exponent less than 0"
 
-#: expr.c:819
+#: expr.c:821
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifier expected after pre-increment or pre-decrement"
 
-#: expr.c:847
+#: expr.c:849
 msgid "missing `)'"
 msgstr "missing ‘)’"
 
-#: expr.c:871
+#: expr.c:892
 msgid "syntax error: operand expected"
 msgstr "syntax error: operand expected"
 
-#: expr.c:1146
+#: expr.c:1178
 msgid "invalid number"
 msgstr "invalid number"
 
-#: expr.c:1150
+#: expr.c:1182
 msgid "invalid arithmetic base"
 msgstr "invalid arithmetic base"
 
-#: expr.c:1170
+#: expr.c:1202
 msgid "value too great for base"
 msgstr "value too great for base"
 
-#: general.c:60
+#: general.c:62
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: cannot access parent directories"
 
@@ -925,42 +908,42 @@ msgstr "cannot allocate new file descriptor for bash input from fd %d"
 msgid "save_bash_input: buffer already exists for new fd %d"
 msgstr "save_bash_input: buffer already exists for new fd %d"
 
-#: jobs.c:693
+#: jobs.c:923
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "deleting stopped job %d with process group %ld"
 
-#: jobs.c:1001
+#: jobs.c:1308
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no such pid"
 
-#: jobs.c:1632 nojobs.c:648
+#: jobs.c:1981 nojobs.c:648
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld is not a child of this shell"
 
-#: jobs.c:1815
+#: jobs.c:2180
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: No record of process %ld"
 
-#: jobs.c:2062
+#: jobs.c:2435
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: job %d is stopped"
 
-#: jobs.c:2284
+#: jobs.c:2657
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: job has terminated"
 
-#: jobs.c:2293
+#: jobs.c:2666
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: job %d already in background"
 
-#: jobs.c:3037
+#: jobs.c:3452
 msgid "no job control in this shell"
 msgstr "no job control in this shell"
 
@@ -1072,139 +1055,139 @@ msgstr "%s: bad network path specification"
 msgid "network operations not supported"
 msgstr "network operations not supported"
 
-#: mailcheck.c:382
+#: mailcheck.c:386
 msgid "You have mail in $_"
 msgstr "You have mail in $_"
 
-#: mailcheck.c:407
+#: mailcheck.c:411
 msgid "You have new mail in $_"
 msgstr "You have new mail in $_"
 
-#: mailcheck.c:423
+#: mailcheck.c:427
 #, c-format
 msgid "The mail in %s has been read\n"
 msgstr "The mail in %s has been read\n"
 
-#: make_cmd.c:318
+#: make_cmd.c:322
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: arithmetic expression required"
 
-#: make_cmd.c:320
+#: make_cmd.c:324
 msgid "syntax error: `;' unexpected"
 msgstr "syntax error: ‘;’ unexpected"
 
-#: make_cmd.c:321
+#: make_cmd.c:325
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntax error: ‘((%s))’"
 
-#: make_cmd.c:560
+#: make_cmd.c:566
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: bad instruction type %d"
 
-#: make_cmd.c:730
+#: make_cmd.c:736
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: redirection instruction ‘%d’ out of range"
 
-#: parse.y:2726
+#: parse.y:2747
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "unexpected EOF while looking for matching ‘%c’"
 
-#: parse.y:3011
+#: parse.y:3043
 msgid "unexpected EOF while looking for `]]'"
 msgstr "unexpected EOF while looking for ‘]]’"
 
-#: parse.y:3016
+#: parse.y:3048
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error in conditional expression: unexpected token ‘%s’"
 
-#: parse.y:3020
+#: parse.y:3052
 msgid "syntax error in conditional expression"
 msgstr "syntax error in conditional expression"
 
-#: parse.y:3098
+#: parse.y:3130
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "unexpected token ‘%s’, expected ‘)’"
 
-#: parse.y:3102
+#: parse.y:3134
 msgid "expected `)'"
 msgstr "expected ‘)’"
 
-#: parse.y:3130
+#: parse.y:3162
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "unexpected argument ‘%s’ to conditional unary operator"
 
-#: parse.y:3134
+#: parse.y:3166
 msgid "unexpected argument to conditional unary operator"
 msgstr "unexpected argument to conditional unary operator"
 
-#: parse.y:3171
+#: parse.y:3203
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "unexpected token ‘%s’, conditional binary operator expected"
 
-#: parse.y:3175
+#: parse.y:3207
 msgid "conditional binary operator expected"
 msgstr "conditional binary operator expected"
 
-#: parse.y:3191
+#: parse.y:3223
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "unexpected argument ‘%s’ to conditional binary operator"
 
-#: parse.y:3195
+#: parse.y:3227
 msgid "unexpected argument to conditional binary operator"
 msgstr "unexpected argument to conditional binary operator"
 
-#: parse.y:3206
+#: parse.y:3238
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "unexpected token ‘%c’ in conditional command"
 
-#: parse.y:3209
+#: parse.y:3241
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "unexpected token ‘%s’ in conditional command"
 
-#: parse.y:3213
+#: parse.y:3245
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "unexpected token %d in conditional command"
 
-#: parse.y:4400
+#: parse.y:4461
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntax error near unexpected token ‘%s’"
 
-#: parse.y:4418
+#: parse.y:4479
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntax error near ‘%s’"
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: unexpected end of file"
 
-#: parse.y:4428
+#: parse.y:4489
 msgid "syntax error"
 msgstr "syntax error"
 
-#: parse.y:4490
+#: parse.y:4551
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use “%s” to leave the shell.\n"
 
-#: parse.y:4649
+#: parse.y:4710
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "unexpected EOF while looking for matching ‘)’"
 
-#: pcomplete.c:988
+#: pcomplete.c:1001
 #, c-format
 msgid "completion: function `%s' not found"
 msgstr "completion: function ‘%s’ not found"
@@ -1214,12 +1197,12 @@ msgstr "completion: function ‘%s’ not found"
 msgid "progcomp_insert: %s: NULL COMPSPEC"
 msgstr "progcomp_insert: %s: NULL COMPSPEC"
 
-#: print_cmd.c:260
+#: print_cmd.c:264
 #, c-format
 msgid "print_command: bad connector `%d'"
 msgstr "print_command: bad connector ‘%d’"
 
-#: print_cmd.c:1172
+#: print_cmd.c:1236
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ‘%c’: invalid format character"
@@ -1252,28 +1235,28 @@ msgstr "cannot create temp file for here document: %s"
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port not supported without networking"
 
-#: redir.c:949
+#: redir.c:956
 msgid "redirection error: cannot duplicate fd"
 msgstr "redirection error: cannot duplicate fd"
 
-#: shell.c:302
+#: shell.c:309
 msgid "could not find /tmp, please create!"
 msgstr "could not find /tmp, please create!"
 
-#: shell.c:306
+#: shell.c:313
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp must be a valid directory name"
 
-#: shell.c:839
+#: shell.c:849
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: invalid option"
 
-#: shell.c:1590
+#: shell.c:1598
 msgid "I have no name!"
 msgstr "I have no name!"
 
-#: shell.c:1725
+#: shell.c:1733
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1282,113 +1265,113 @@ msgstr ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 
-#: shell.c:1727
+#: shell.c:1735
 msgid "GNU long options:\n"
 msgstr "GNU long options:\n"
 
-#: shell.c:1731
+#: shell.c:1739
 msgid "Shell options:\n"
 msgstr "Shell options:\n"
 
-#: shell.c:1732
+#: shell.c:1740
 msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
 
-#: shell.c:1747
+#: shell.c:1755
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s or -o option\n"
 
-#: shell.c:1753
+#: shell.c:1761
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Type ‘%s -c “help set”’ for more information about shell options.\n"
 
-#: shell.c:1754
+#: shell.c:1762
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Type ‘%s -c help’ for more information about shell builtin commands.\n"
 
-#: shell.c:1755
+#: shell.c:1763
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use the ‘bashbug’ command to report bugs.\n"
 
-#: sig.c:485
+#: sig.c:494
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: invalid operation"
 
-#: subst.c:1011
+#: subst.c:1123
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "bad substitution: no closing ‘%s’ in %s"
 
-#: subst.c:2020
+#: subst.c:2269
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: cannot assign list to array member"
 
-#: subst.c:3516 subst.c:3532
+#: subst.c:4208 subst.c:4224
 msgid "cannot make pipe for process substitution"
 msgstr "cannot make pipe for process substitution"
 
-#: subst.c:3563
+#: subst.c:4255
 msgid "cannot make child for process substitution"
 msgstr "cannot make child for process substitution"
 
-#: subst.c:3608
+#: subst.c:4300
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "cannot open named pipe %s for reading"
 
-#: subst.c:3610
+#: subst.c:4302
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "cannot open named pipe %s for writing"
 
-#: subst.c:3618
+#: subst.c:4310
 #, c-format
 msgid "cannout reset nodelay mode for fd %d"
 msgstr "cannout reset nodelay mode for fd %d"
 
-#: subst.c:3628
+#: subst.c:4320
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "cannot duplicate named pipe %s as fd %d"
 
-#: subst.c:3803
+#: subst.c:4495
 msgid "cannot make pipe for command substitution"
 msgstr "cannot make pipe for command substitution"
 
-#: subst.c:3832
+#: subst.c:4531
 msgid "cannot make child for command substitution"
 msgstr "cannot make child for command substitution"
 
-#: subst.c:3849
+#: subst.c:4548
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: cannot duplicate pipe as fd 1"
 
-#: subst.c:4284
+#: subst.c:5013
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter null or not set"
 
-#: subst.c:4529
+#: subst.c:5287
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expression < 0"
 
-#: subst.c:5209
+#: subst.c:6058
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: bad substitution"
 
-#: subst.c:5283
+#: subst.c:6134
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: cannot assign in this way"
 
-#: subst.c:6652
+#: subst.c:7687
 #, c-format
 msgid "no match: %s"
 msgstr "no match: %s"
@@ -1446,49 +1429,49 @@ msgstr ""
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: bad signal %d"
 
-#: variables.c:310
+#: variables.c:320
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error importing function definition for ‘%s’"
 
-#: variables.c:670
+#: variables.c:692
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell level (%d) too high, resetting to 1"
 
-#: variables.c:1610
+#: variables.c:1651
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2709
+#: variables.c:2807
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no function context at current scope"
 
-#: variables.c:2923 variables.c:2932
+#: variables.c:3021 variables.c:3030
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "invalid character %d in exportstr for %s"
 
-#: variables.c:2938
+#: variables.c:3036
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no ‘=’ in exportstr for %s"
 
-#: variables.c:3363
+#: variables.c:3463
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
-#: variables.c:3376
+#: variables.c:3476
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
-#: variables.c:3442
+#: variables.c:3548
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
 #: version.c:82
-msgid "Copyright (C) 2004 Free Software Foundation, Inc.\n"
-msgstr "Copyright (C) 2004 Free Software Foundation, Inc.\n"
+msgid "Copyright (C) 2005 Free Software Foundation, Inc.\n"
+msgstr "Copyright (C) 2005 Free Software Foundation, Inc.\n"
 
 #: xmalloc.c:93
 #, c-format
@@ -1531,2753 +1514,1893 @@ msgid "xrealloc: %s:%d: cannot allocate %lu bytes"
 msgstr "xrealloc: %s:%d: cannot allocate %lu bytes"
 
 #: builtins.c:244
-msgid "`alias' with no arguments or with the -p option prints the list"
-msgstr "‘alias’ with no arguments or with the -p option prints the list"
-
-#: builtins.c:245
-msgid "of aliases in the form alias NAME=VALUE on standard output."
-msgstr "of aliases in the form alias NAME=VALUE on standard output."
-
-#: builtins.c:246
-msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-msgstr "Otherwise, an alias is defined for each NAME whose VALUE is given."
-
-#: builtins.c:247
-msgid "A trailing space in VALUE causes the next word to be checked for"
-msgstr "A trailing space in VALUE causes the next word to be checked for"
-
-#: builtins.c:248
-msgid "alias substitution when the alias is expanded.  Alias returns"
-msgstr "alias substitution when the alias is expanded.  Alias returns"
-
-#: builtins.c:249
-msgid "true unless a NAME is given for which no alias has been defined."
-msgstr "true unless a NAME is given for which no alias has been defined."
-
-#: builtins.c:257
-msgid ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-msgstr ""
-"Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-
-#: builtins.c:258
-msgid "then remove all alias definitions."
-msgstr "then remove all alias definitions."
-
-#: builtins.c:266
-msgid "Bind a key sequence to a Readline function or a macro, or set"
-msgstr "Bind a key sequence to a Readline function or a macro, or set"
-
-#: builtins.c:267
-msgid "a Readline variable.  The non-option argument syntax is equivalent"
-msgstr "a Readline variable.  The non-option argument syntax is equivalent"
-
-#: builtins.c:268
-msgid "to that found in ~/.inputrc, but must be passed as a single argument:"
-msgstr "to that found in ~/.inputrc, but must be passed as a single argument:"
-
-#: builtins.c:269
-msgid "bind '\"\\C-x\\C-r\": re-read-init-file'."
-msgstr "bind '“\\C-x\\C-r”: re-read-init-file'."
-
-#: builtins.c:270
-msgid "bind accepts the following options:"
-msgstr "bind accepts the following options:"
-
-#: builtins.c:271
 msgid ""
-"  -m  keymap         Use `keymap' as the keymap for the duration of this"
+" `alias' with no arguments or with the -p option prints the list\n"
+"    of aliases in the form alias NAME=VALUE on standard output.\n"
+"    Otherwise, an alias is defined for each NAME whose VALUE is given.\n"
+"    A trailing space in VALUE causes the next word to be checked for\n"
+"    alias substitution when the alias is expanded.  Alias returns\n"
+"    true unless a NAME is given for which no alias has been defined."
 msgstr ""
-"  -m  keymap         Use ‘keymap’ as the keymap for the duration of this"
+" ‘alias’ with no arguments or with the -p option prints the list\n"
+"    of aliases in the form alias NAME=VALUE on standard output.\n"
+"    Otherwise, an alias is defined for each NAME whose VALUE is given.\n"
+"    A trailing space in VALUE causes the next word to be checked for\n"
+"    alias substitution when the alias is expanded.  Alias returns\n"
+"    true unless a NAME is given for which no alias has been defined."
 
-#: builtins.c:272
-msgid "                     command.  Acceptable keymap names are emacs,"
-msgstr "                     command.  Acceptable keymap names are emacs,"
-
-#: builtins.c:273
+#: builtins.c:257
 msgid ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+" Remove NAMEs from the list of defined aliases.  If the -a option is given,\n"
+"    then remove all alias definitions."
 msgstr ""
-"                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-
-#: builtins.c:274
-msgid "                     vi-command, and vi-insert."
-msgstr "                     vi-command, and vi-insert."
-
-#: builtins.c:275
-msgid "  -l                 List names of functions."
-msgstr "  -l                 List names of functions."
-
-#: builtins.c:276
-msgid "  -P                 List function names and bindings."
-msgstr "  -P                 List function names and bindings."
-
-#: builtins.c:277
-msgid "  -p                 List functions and bindings in a form that can be"
-msgstr "  -p                 List functions and bindings in a form that can be"
-
-#: builtins.c:278
-msgid "                     reused as input."
-msgstr "                     reused as input."
-
-#: builtins.c:279
-msgid "  -r  keyseq         Remove the binding for KEYSEQ."
-msgstr "  -r  keyseq         Remove the binding for KEYSEQ."
+" Remove NAMEs from the list of defined aliases.  If the -a option is given,\n"
+"    then remove all alias definitions."
 
-#: builtins.c:280
-msgid "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-msgstr "  -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when"
-
-#: builtins.c:281
-msgid "\t\t\t\tKEYSEQ is entered."
-msgstr "\t\t\t\tKEYSEQ is entered."
-
-#: builtins.c:282
-msgid "  -f  filename       Read key bindings from FILENAME."
-msgstr "  -f  filename       Read key bindings from FILENAME."
-
-#: builtins.c:283
-msgid "  -q  function-name  Query about which keys invoke the named function."
-msgstr "  -q  function-name  Query about which keys invoke the named function."
-
-#: builtins.c:284
+#: builtins.c:266
 msgid ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
-msgstr ""
-"  -u  function-name  Unbind all keys which are bound to the named function."
-
-#: builtins.c:285
-msgid "  -V                 List variable names and values"
-msgstr "  -V                 List variable names and values"
-
-#: builtins.c:286
-msgid "  -v                 List variable names and values in a form that can"
-msgstr "  -v                 List variable names and values in a form that can"
+" Bind a key sequence to a Readline function or a macro, or set\n"
+"    a Readline variable.  The non-option argument syntax is equivalent\n"
+"    to that found in ~/.inputrc, but must be passed as a single argument:\n"
+"    bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    bind accepts the following options:\n"
+"      -m  keymap         Use `keymap' as the keymap for the duration of "
+"this\n"
+"                         command.  Acceptable keymap names are emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
+"                         vi-command, and vi-insert.\n"
+"      -l                 List names of functions.\n"
+"      -P                 List function names and bindings.\n"
+"      -p                 List functions and bindings in a form that can be\n"
+"                         reused as input.\n"
+"      -r  keyseq         Remove the binding for KEYSEQ.\n"
+"      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
+"    \t\t\t\tKEYSEQ is entered.\n"
+"      -f  filename       Read key bindings from FILENAME.\n"
+"      -q  function-name  Query about which keys invoke the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
+"      -V                 List variable names and values\n"
+"      -v                 List variable names and values in a form that can\n"
+"                         be reused as input.\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
+"                         in a form that can be reused as input."
+msgstr ""
+" Bind a key sequence to a Readline function or a macro, or set\n"
+"    a Readline variable.  The non-option argument syntax is equivalent\n"
+"    to that found in ~/.inputrc, but must be passed as a single argument:\n"
+"    bind '“\\C-x\\C-r”: re-read-init-file'.\n"
+"    bind accepts the following options:\n"
+"      -m  keymap         Use ‘keymap’ as the keymap for the duration of "
+"this\n"
+"                         command.  Acceptable keymap names are emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
+"                         vi-command, and vi-insert.\n"
+"      -l                 List names of functions.\n"
+"      -P                 List function names and bindings.\n"
+"      -p                 List functions and bindings in a form that can be\n"
+"                         reused as input.\n"
+"      -r  keyseq         Remove the binding for KEYSEQ.\n"
+"      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
+"    \t\t\t\tKEYSEQ is entered.\n"
+"      -f  filename       Read key bindings from FILENAME.\n"
+"      -q  function-name  Query about which keys invoke the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
+"      -V                 List variable names and values\n"
+"      -v                 List variable names and values in a form that can\n"
+"                         be reused as input.\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
+"                         in a form that can be reused as input."
 
-#: builtins.c:287
-msgid "                     be reused as input."
-msgstr "                     be reused as input."
-
-#: builtins.c:288
+#: builtins.c:297
 msgid ""
-"  -S                 List key sequences that invoke macros and their values"
+" Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
+"    break N levels."
 msgstr ""
-"  -S                 List key sequences that invoke macros and their values"
+" Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
+"    break N levels."
 
-#: builtins.c:289
+#: builtins.c:304
 msgid ""
-"  -s                 List key sequences that invoke macros and their values"
+" Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.\n"
+"    If N is specified, resume at the N-th enclosing loop."
 msgstr ""
-"  -s                 List key sequences that invoke macros and their values"
-
-#: builtins.c:290
-msgid "                     in a form that can be reused as input."
-msgstr "                     in a form that can be reused as input."
-
-#: builtins.c:297
-msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-msgstr "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-
-#: builtins.c:298
-msgid "break N levels."
-msgstr "break N levels."
-
-#: builtins.c:304
-msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-msgstr "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-
-#: builtins.c:305
-msgid "If N is specified, resume at the N-th enclosing loop."
-msgstr "If N is specified, resume at the N-th enclosing loop."
+" Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop.\n"
+"    If N is specified, resume at the N-th enclosing loop."
 
 #: builtins.c:311
-msgid "Run a shell builtin.  This is useful when you wish to rename a"
-msgstr "Run a shell builtin.  This is useful when you wish to rename a"
-
-#: builtins.c:312
-msgid "shell builtin to be a function, but need the functionality of the"
-msgstr "shell builtin to be a function, but need the functionality of the"
-
-#: builtins.c:313
-msgid "builtin within the function itself."
-msgstr "builtin within the function itself."
+msgid ""
+" Run a shell builtin.  This is useful when you wish to rename a\n"
+"    shell builtin to be a function, but need the functionality of the\n"
+"    builtin within the function itself."
+msgstr ""
+" Run a shell builtin.  This is useful when you wish to rename a\n"
+"    shell builtin to be a function, but need the functionality of the\n"
+"    builtin within the function itself."
+
+#: builtins.c:320
+msgid ""
+" Returns the context of the current subroutine call.\n"
+"    \n"
+"    Without EXPR, returns returns \"$line $filename\".  With EXPR,\n"
+"    returns \"$line $subroutine $filename\"; this extra information\n"
+"    can be used used to provide a stack trace.\n"
+"    \n"
+"    The value of EXPR indicates how many call frames to go back before the\n"
+"    current one; the top frame is frame 0."
+msgstr ""
+" Returns the context of the current subroutine call.\n"
+"    \n"
+"    Without EXPR, returns returns “$line $filename”.  With EXPR,\n"
+"    returns “$line $subroutine $filename”; this extra information\n"
+"    can be used used to provide a stack trace.\n"
+"    \n"
+"    The value of EXPR indicates how many call frames to go back before the\n"
+"    current one; the top frame is frame 0."
 
 #: builtins.c:334
-msgid "Change the current directory to DIR.  The variable $HOME is the"
-msgstr "Change the current directory to DIR.  The variable $HOME is the"
-
-#: builtins.c:335
-msgid "default DIR.  The variable CDPATH defines the search path for"
-msgstr "default DIR.  The variable CDPATH defines the search path for"
-
-#: builtins.c:336
-msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-msgstr "the directory containing DIR.  Alternative directory names in CDPATH"
-
-#: builtins.c:337
-msgid "are separated by a colon (:).  A null directory name is the same as"
-msgstr "are separated by a colon (:).  A null directory name is the same as"
-
-#: builtins.c:338
-msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-msgstr "the current directory, i.e. ‘.’.  If DIR begins with a slash (/),"
-
-#: builtins.c:339
-msgid "then CDPATH is not used.  If the directory is not found, and the"
-msgstr "then CDPATH is not used.  If the directory is not found, and the"
-
-#: builtins.c:340
-msgid "shell option `cdable_vars' is set, then try the word as a variable"
-msgstr "shell option ‘cdable_vars’ is set, then try the word as a variable"
-
-#: builtins.c:341
-msgid "name.  If that variable has a value, then cd to the value of that"
-msgstr "name.  If that variable has a value, then cd to the value of that"
-
-#: builtins.c:342
-msgid "variable.  The -P option says to use the physical directory structure"
-msgstr "variable.  The -P option says to use the physical directory structure"
-
-#: builtins.c:343
 msgid ""
-"instead of following symbolic links; the -L option forces symbolic links"
-msgstr ""
-"instead of following symbolic links; the -L option forces symbolic links"
-
-#: builtins.c:344
-msgid "to be followed."
-msgstr "to be followed."
+" Change the current directory to DIR.  The variable $HOME is the\n"
+"    default DIR.  The variable CDPATH defines the search path for\n"
+"    the directory containing DIR.  Alternative directory names in CDPATH\n"
+"    are separated by a colon (:).  A null directory name is the same as\n"
+"    the current directory, i.e. `.'.  If DIR begins with a slash (/),\n"
+"    then CDPATH is not used.  If the directory is not found, and the\n"
+"    shell option `cdable_vars' is set, then try the word as a variable\n"
+"    name.  If that variable has a value, then cd to the value of that\n"
+"    variable.  The -P option says to use the physical directory structure\n"
+"    instead of following symbolic links; the -L option forces symbolic "
+"links\n"
+"    to be followed."
+msgstr ""
+" Change the current directory to DIR.  The variable $HOME is the\n"
+"    default DIR.  The variable CDPATH defines the search path for\n"
+"    the directory containing DIR.  Alternative directory names in CDPATH\n"
+"    are separated by a colon (:).  A null directory name is the same as\n"
+"    the current directory, i.e. ‘.’.  If DIR begins with a slash (/),\n"
+"    then CDPATH is not used.  If the directory is not found, and the\n"
+"    shell option ‘cdable_vars’ is set, then try the word as a variable\n"
+"    name.  If that variable has a value, then cd to the value of that\n"
+"    variable.  The -P option says to use the physical directory structure\n"
+"    instead of following symbolic links; the -L option forces symbolic "
+"links\n"
+"    to be followed."
 
 #: builtins.c:350
-msgid "Print the current working directory.  With the -P option, pwd prints"
-msgstr "Print the current working directory.  With the -P option, pwd prints"
-
-#: builtins.c:351
-msgid "the physical directory, without any symbolic links; the -L option"
-msgstr "the physical directory, without any symbolic links; the -L option"
-
-#: builtins.c:352
-msgid "makes pwd follow symbolic links."
-msgstr "makes pwd follow symbolic links."
+msgid ""
+" Print the current working directory.  With the -P option, pwd prints\n"
+"    the physical directory, without any symbolic links; the -L option\n"
+"    makes pwd follow symbolic links."
+msgstr ""
+" Print the current working directory.  With the -P option, pwd prints\n"
+"    the physical directory, without any symbolic links; the -L option\n"
+"    makes pwd follow symbolic links."
 
 #: builtins.c:358
-msgid "No effect; the command does nothing.  A zero exit code is returned."
-msgstr "No effect; the command does nothing.  A zero exit code is returned."
+msgid " No effect; the command does nothing.  A zero exit code is returned."
+msgstr " No effect; the command does nothing.  A zero exit code is returned."
 
 #: builtins.c:364
-msgid "Return a successful result."
-msgstr "Return a successful result."
+msgid " Return a successful result."
+msgstr " Return a successful result."
 
 #: builtins.c:370
-msgid "Return an unsuccessful result."
-msgstr "Return an unsuccessful result."
+msgid " Return an unsuccessful result."
+msgstr " Return an unsuccessful result."
 
 #: builtins.c:376
-msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-msgstr "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-
-#: builtins.c:377
-msgid "function called `ls', and you wish to call the command `ls', you can"
-msgstr "function called ‘ls’, and you wish to call the command ‘ls’, you can"
-
-#: builtins.c:378
-msgid "say \"command ls\".  If the -p option is given, a default value is used"
-msgstr "say “command ls”.  If the -p option is given, a default value is used"
-
-#: builtins.c:379
-msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
-msgstr "for PATH that is guaranteed to find all of the standard utilities.  If"
-
-#: builtins.c:380
-msgid "the -V or -v option is given, a string is printed describing COMMAND."
-msgstr "the -V or -v option is given, a string is printed describing COMMAND."
-
-#: builtins.c:381
-msgid "The -V option produces a more verbose description."
-msgstr "The -V option produces a more verbose description."
-
-#: builtins.c:387
-msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-msgstr "Declare variables and/or give them attributes.  If no NAMEs are"
-
-#: builtins.c:388
-msgid "given, then display the values of variables instead.  The -p option"
-msgstr "given, then display the values of variables instead.  The -p option"
-
-#: builtins.c:389
-msgid "will display the attributes and values of each NAME."
-msgstr "will display the attributes and values of each NAME."
-
-#: builtins.c:391
-msgid "The flags are:"
-msgstr "The flags are:"
-
-#: builtins.c:393
-msgid "  -a\tto make NAMEs arrays (if supported)"
-msgstr "  -a\tto make NAMEs arrays (if supported)"
-
-#: builtins.c:394
-msgid "  -f\tto select from among function names only"
-msgstr "  -f\tto select from among function names only"
-
-#: builtins.c:395
 msgid ""
-"  -F\tto display function names (and line number and source file name if"
+" Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
+"    function called `ls', and you wish to call the command `ls', you can\n"
+"    say \"command ls\".  If the -p option is given, a default value is used\n"
+"    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+"    the -V or -v option is given, a string is printed describing COMMAND.\n"
+"    The -V option produces a more verbose description."
 msgstr ""
-"  -F\tto display function names (and line number and source file name if"
-
-#: builtins.c:396
-msgid "\tdebugging) without definitions"
-msgstr "\tdebugging) without definitions"
-
-#: builtins.c:397
-msgid "  -i\tto make NAMEs have the `integer' attribute"
-msgstr "  -i\tto make NAMEs have the ‘integer’ attribute"
-
-#: builtins.c:398
-msgid "  -r\tto make NAMEs readonly"
-msgstr "  -r\tto make NAMEs readonly"
-
-#: builtins.c:399
-msgid "  -t\tto make NAMEs have the `trace' attribute"
-msgstr "  -t\tto make NAMEs have the ‘trace’ attribute"
-
-#: builtins.c:400
-msgid "  -x\tto make NAMEs export"
-msgstr "  -x\tto make NAMEs export"
-
-#: builtins.c:402
-msgid "Variables with the integer attribute have arithmetic evaluation (see"
-msgstr "Variables with the integer attribute have arithmetic evaluation (see"
-
-#: builtins.c:403
-msgid "`let') done when the variable is assigned to."
-msgstr "‘let’) done when the variable is assigned to."
+" Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
+"    function called ‘ls’, and you wish to call the command ‘ls’, you can\n"
+"    say “command ls”.  If the -p option is given, a default value is used\n"
+"    for PATH that is guaranteed to find all of the standard utilities.  If\n"
+"    the -V or -v option is given, a string is printed describing COMMAND.\n"
+"    The -V option produces a more verbose description."
 
-#: builtins.c:405
-msgid "When displaying values of variables, -f displays a function's name"
-msgstr "When displaying values of variables, -f displays a function's name"
-
-#: builtins.c:406
-msgid "and definition.  The -F option restricts the display to function"
-msgstr "and definition.  The -F option restricts the display to function"
-
-#: builtins.c:407
-msgid "name only."
-msgstr "name only."
-
-#: builtins.c:409
-msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
-msgstr "Using ‘+’ instead of ‘-’ turns off the given attribute instead.  When"
-
-#: builtins.c:410
-msgid "used in a function, makes NAMEs local, as with the `local' command."
-msgstr "used in a function, makes NAMEs local, as with the ‘local’ command."
+#: builtins.c:387
+msgid ""
+" Declare variables and/or give them attributes.  If no NAMEs are\n"
+"    given, then display the values of variables instead.  The -p option\n"
+"    will display the attributes and values of each NAME.\n"
+"    \n"
+"    The flags are:\n"
+"    \n"
+"      -a\tto make NAMEs arrays (if supported)\n"
+"      -f\tto select from among function names only\n"
+"      -F\tto display function names (and line number and source file name "
+"if\n"
+"    \tdebugging) without definitions\n"
+"      -i\tto make NAMEs have the `integer' attribute\n"
+"      -r\tto make NAMEs readonly\n"
+"      -t\tto make NAMEs have the `trace' attribute\n"
+"      -x\tto make NAMEs export\n"
+"    \n"
+"    Variables with the integer attribute have arithmetic evaluation (see\n"
+"    `let') done when the variable is assigned to.\n"
+"    \n"
+"    When displaying values of variables, -f displays a function's name\n"
+"    and definition.  The -F option restricts the display to function\n"
+"    name only.\n"
+"    \n"
+"    Using `+' instead of `-' turns off the given attribute instead.  When\n"
+"    used in a function, makes NAMEs local, as with the `local' command."
+msgstr ""
+" Declare variables and/or give them attributes.  If no NAMEs are\n"
+"    given, then display the values of variables instead.  The -p option\n"
+"    will display the attributes and values of each NAME.\n"
+"    \n"
+"    The flags are:\n"
+"    \n"
+"      -a\tto make NAMEs arrays (if supported)\n"
+"      -f\tto select from among function names only\n"
+"      -F\tto display function names (and line number and source file name "
+"if\n"
+"    \tdebugging) without definitions\n"
+"      -i\tto make NAMEs have the ‘integer’ attribute\n"
+"      -r\tto make NAMEs readonly\n"
+"      -t\tto make NAMEs have the ‘trace’ attribute\n"
+"      -x\tto make NAMEs export\n"
+"    \n"
+"    Variables with the integer attribute have arithmetic evaluation (see\n"
+"    ‘let’) done when the variable is assigned to.\n"
+"    \n"
+"    When displaying values of variables, -f displays a function's name\n"
+"    and definition.  The -F option restricts the display to function\n"
+"    name only.\n"
+"    \n"
+"    Using ‘+’ instead of ‘-’ turns off the given attribute instead.  When\n"
+"    used in a function, makes NAMEs local, as with the ‘local’ command."
 
 #: builtins.c:416
-msgid "Obsolete.  See `declare'."
-msgstr "Obsolete.  See ‘declare’."
+msgid " Obsolete.  See `declare'."
+msgstr " Obsolete.  See ‘declare’."
 
 #: builtins.c:422
-msgid "Create a local variable called NAME, and give it VALUE.  LOCAL"
-msgstr "Create a local variable called NAME, and give it VALUE.  LOCAL"
-
-#: builtins.c:423
-msgid "can only be used within a function; it makes the variable NAME"
-msgstr "can only be used within a function; it makes the variable NAME"
-
-#: builtins.c:424
-msgid "have a visible scope restricted to that function and its children."
-msgstr "have a visible scope restricted to that function and its children."
+msgid ""
+" Create a local variable called NAME, and give it VALUE.  LOCAL\n"
+"    can only be used within a function; it makes the variable NAME\n"
+"    have a visible scope restricted to that function and its children."
+msgstr ""
+" Create a local variable called NAME, and give it VALUE.  LOCAL\n"
+"    can only be used within a function; it makes the variable NAME\n"
+"    have a visible scope restricted to that function and its children."
 
 #: builtins.c:431
-msgid "Output the ARGs.  If -n is specified, the trailing newline is"
-msgstr "Output the ARGs.  If -n is specified, the trailing newline is"
-
-#: builtins.c:432
-msgid "suppressed.  If the -e option is given, interpretation of the"
-msgstr "suppressed.  If the -e option is given, interpretation of the"
-
-#: builtins.c:433
-msgid "following backslash-escaped characters is turned on:"
-msgstr "following backslash-escaped characters is turned on:"
-
-#: builtins.c:434
-msgid "\t\\a\talert (bell)"
-msgstr "\t\\a\talert (bell)"
-
-#: builtins.c:435
-msgid "\t\\b\tbackspace"
-msgstr "\t\\b\tbackspace"
-
-#: builtins.c:436
-msgid "\t\\c\tsuppress trailing newline"
-msgstr "\t\\c\tsuppress trailing newline"
-
-#: builtins.c:437
-msgid "\t\\E\tescape character"
-msgstr "\t\\E\tescape character"
-
-#: builtins.c:438
-msgid "\t\\f\tform feed"
-msgstr "\t\\f\tform feed"
-
-#: builtins.c:439
-msgid "\t\\n\tnew line"
-msgstr "\t\\n\tnew line"
-
-#: builtins.c:440
-msgid "\t\\r\tcarriage return"
-msgstr "\t\\r\tcarriage return"
-
-#: builtins.c:441
-msgid "\t\\t\thorizontal tab"
-msgstr "\t\\t\thorizontal tab"
-
-#: builtins.c:442
-msgid "\t\\v\tvertical tab"
-msgstr "\t\\v\tvertical tab"
-
-#: builtins.c:443
-msgid "\t\\\\\tbackslash"
-msgstr "\t\\\\\tbackslash"
-
-#: builtins.c:444
-msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
-msgstr "\t\\num\tthe character whose ASCII code is NUM (octal)."
-
-#: builtins.c:446
-msgid "You can explicitly turn off the interpretation of the above characters"
-msgstr "You can explicitly turn off the interpretation of the above characters"
-
-#: builtins.c:447
-msgid "with the -E option."
-msgstr "with the -E option."
+msgid ""
+" Output the ARGs.  If -n is specified, the trailing newline is\n"
+"    suppressed.  If the -e option is given, interpretation of the\n"
+"    following backslash-escaped characters is turned on:\n"
+"    \t\\a\talert (bell)\n"
+"    \t\\b\tbackspace\n"
+"    \t\\c\tsuppress trailing newline\n"
+"    \t\\E\tescape character\n"
+"    \t\\f\tform feed\n"
+"    \t\\n\tnew line\n"
+"    \t\\r\tcarriage return\n"
+"    \t\\t\thorizontal tab\n"
+"    \t\\v\tvertical tab\n"
+"    \t\\\\\tbackslash\n"
+"    \t\\num\tthe character whose ASCII code is NUM (octal).\n"
+"    \n"
+"    You can explicitly turn off the interpretation of the above characters\n"
+"    with the -E option."
+msgstr ""
+" Output the ARGs.  If -n is specified, the trailing newline is\n"
+"    suppressed.  If the -e option is given, interpretation of the\n"
+"    following backslash-escaped characters is turned on:\n"
+"    \t\\a\talert (bell)\n"
+"    \t\\b\tbackspace\n"
+"    \t\\c\tsuppress trailing newline\n"
+"    \t\\E\tescape character\n"
+"    \t\\f\tform feed\n"
+"    \t\\n\tnew line\n"
+"    \t\\r\tcarriage return\n"
+"    \t\\t\thorizontal tab\n"
+"    \t\\v\tvertical tab\n"
+"    \t\\\\\tbackslash\n"
+"    \t\\num\tthe character whose ASCII code is NUM (octal).\n"
+"    \n"
+"    You can explicitly turn off the interpretation of the above characters\n"
+"    with the -E option."
 
 #: builtins.c:455
 msgid ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+" Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 msgstr ""
-"Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+" Output the ARGs.  If -n is specified, the trailing newline is suppressed."
 
 #: builtins.c:462
-msgid "Enable and disable builtin shell commands.  This allows"
-msgstr "Enable and disable builtin shell commands.  This allows"
-
-#: builtins.c:463
-msgid "you to use a disk command which has the same name as a shell"
-msgstr "you to use a disk command which has the same name as a shell"
-
-#: builtins.c:464
-msgid "builtin without specifying a full pathname.  If -n is used, the"
-msgstr "builtin without specifying a full pathname.  If -n is used, the"
-
-#: builtins.c:465
-msgid "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
-msgstr "NAMEs become disabled; otherwise NAMEs are enabled.  For example,"
-
-#: builtins.c:466
-msgid "to use the `test' found in $PATH instead of the shell builtin"
-msgstr "to use the ‘test’ found in $PATH instead of the shell builtin"
+msgid ""
+" Enable and disable builtin shell commands.  This allows\n"
+"    you to use a disk command which has the same name as a shell\n"
+"    builtin without specifying a full pathname.  If -n is used, the\n"
+"    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
+"    to use the `test' found in $PATH instead of the shell builtin\n"
+"    version, type `enable -n test'.  On systems supporting dynamic\n"
+"    loading, the -f option may be used to load new builtins from the\n"
+"    shared object FILENAME.  The -d option will delete a builtin\n"
+"    previously loaded with -f.  If no non-option names are given, or\n"
+"    the -p option is supplied, a list of builtins is printed.  The\n"
+"    -a option means to print every builtin with an indication of whether\n"
+"    or not it is enabled.  The -s option restricts the output to the "
+"POSIX.2\n"
+"    `special' builtins.  The -n option displays a list of all disabled "
+"builtins."
+msgstr ""
+" Enable and disable builtin shell commands.  This allows\n"
+"    you to use a disk command which has the same name as a shell\n"
+"    builtin without specifying a full pathname.  If -n is used, the\n"
+"    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
+"    to use the ‘test’ found in $PATH instead of the shell builtin\n"
+"    version, type ‘enable -n test’.  On systems supporting dynamic\n"
+"    loading, the -f option may be used to load new builtins from the\n"
+"    shared object FILENAME.  The -d option will delete a builtin\n"
+"    previously loaded with -f.  If no non-option names are given, or\n"
+"    the -p option is supplied, a list of builtins is printed.  The\n"
+"    -a option means to print every builtin with an indication of whether\n"
+"    or not it is enabled.  The -s option restricts the output to the "
+"POSIX.2\n"
+"    ‘special’ builtins.  The -n option displays a list of all disabled "
+"builtins."
 
-#: builtins.c:467
-msgid "version, type `enable -n test'.  On systems supporting dynamic"
-msgstr "version, type ‘enable -n test’.  On systems supporting dynamic"
+#: builtins.c:480
+msgid " Read ARGs as input to the shell and execute the resulting command(s)."
+msgstr " Read ARGs as input to the shell and execute the resulting command(s)."
 
-#: builtins.c:468
-msgid "loading, the -f option may be used to load new builtins from the"
-msgstr "loading, the -f option may be used to load new builtins from the"
+#: builtins.c:486
+msgid ""
+" Getopts is used by shell procedures to parse positional parameters.\n"
+"    \n"
+"    OPTSTRING contains the option letters to be recognized; if a letter\n"
+"    is followed by a colon, the option is expected to have an argument,\n"
+"    which should be separated from it by white space.\n"
+"    \n"
+"    Each time it is invoked, getopts will place the next option in the\n"
+"    shell variable $name, initializing name if it does not exist, and\n"
+"    the index of the next argument to be processed into the shell\n"
+"    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+"    a shell script is invoked.  When an option requires an argument,\n"
+"    getopts places that argument into the shell variable OPTARG.\n"
+"    \n"
+"    getopts reports errors in one of two ways.  If the first character\n"
+"    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+"    this mode, no error messages are printed.  If an invalid option is\n"
+"    seen, getopts places the option character found into OPTARG.  If a\n"
+"    required argument is not found, getopts places a ':' into NAME and\n"
+"    sets OPTARG to the option character found.  If getopts is not in\n"
+"    silent mode, and an invalid option is seen, getopts places '?' into\n"
+"    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
+"    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+"    printed.\n"
+"    \n"
+"    If the shell variable OPTERR has the value 0, getopts disables the\n"
+"    printing of error messages, even if the first character of\n"
+"    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+"    \n"
+"    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+"    more arguments are given, they are parsed instead."
+msgstr ""
+" Getopts is used by shell procedures to parse positional parameters.\n"
+"    \n"
+"    OPTSTRING contains the option letters to be recognized; if a letter\n"
+"    is followed by a colon, the option is expected to have an argument,\n"
+"    which should be separated from it by white space.\n"
+"    \n"
+"    Each time it is invoked, getopts will place the next option in the\n"
+"    shell variable $name, initializing name if it does not exist, and\n"
+"    the index of the next argument to be processed into the shell\n"
+"    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+"    a shell script is invoked.  When an option requires an argument,\n"
+"    getopts places that argument into the shell variable OPTARG.\n"
+"    \n"
+"    getopts reports errors in one of two ways.  If the first character\n"
+"    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+"    this mode, no error messages are printed.  If an invalid option is\n"
+"    seen, getopts places the option character found into OPTARG.  If a\n"
+"    required argument is not found, getopts places a ‘:’ into NAME and\n"
+"    sets OPTARG to the option character found.  If getopts is not in\n"
+"    silent mode, and an invalid option is seen, getopts places ‘?’ into\n"
+"    NAME and unsets OPTARG.  If a required argument is not found, a ‘?’\n"
+"    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+"    printed.\n"
+"    \n"
+"    If the shell variable OPTERR has the value 0, getopts disables the\n"
+"    printing of error messages, even if the first character of\n"
+"    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+"    \n"
+"    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+"    more arguments are given, they are parsed instead."
 
-#: builtins.c:469
-msgid "shared object FILENAME.  The -d option will delete a builtin"
-msgstr "shared object FILENAME.  The -d option will delete a builtin"
+#: builtins.c:521
+msgid ""
+" Exec FILE, replacing this shell with the specified program.\n"
+"    If FILE is not specified, the redirections take effect in this\n"
+"    shell.  If the first argument is `-l', then place a dash in the\n"
+"    zeroth arg passed to FILE, as login does.  If the `-c' option\n"
+"    is supplied, FILE is executed with a null environment.  The `-a'\n"
+"    option means to make set argv[0] of the executed process to NAME.\n"
+"    If the file cannot be executed and the shell is not interactive,\n"
+"    then the shell exits, unless the shell option `execfail' is set."
+msgstr ""
+" Exec FILE, replacing this shell with the specified program.\n"
+"    If FILE is not specified, the redirections take effect in this\n"
+"    shell.  If the first argument is ‘-l’, then place a dash in the\n"
+"    zeroth arg passed to FILE, as login does.  If the ‘-c’ option\n"
+"    is supplied, FILE is executed with a null environment.  The ‘-a’\n"
+"    option means to make set argv[0] of the executed process to NAME.\n"
+"    If the file cannot be executed and the shell is not interactive,\n"
+"    then the shell exits, unless the shell option ‘execfail’ is set."
 
-#: builtins.c:470
-msgid "previously loaded with -f.  If no non-option names are given, or"
-msgstr "previously loaded with -f.  If no non-option names are given, or"
+#: builtins.c:534
+msgid ""
+" Exit the shell with a status of N.  If N is omitted, the exit status\n"
+"    is that of the last command executed."
+msgstr ""
+" Exit the shell with a status of N.  If N is omitted, the exit status\n"
+"    is that of the last command executed."
 
-#: builtins.c:471
-msgid "the -p option is supplied, a list of builtins is printed.  The"
-msgstr "the -p option is supplied, a list of builtins is printed.  The"
+#: builtins.c:541
+msgid " Logout of a login shell."
+msgstr " Logout of a login shell."
 
-#: builtins.c:472
-msgid "-a option means to print every builtin with an indication of whether"
-msgstr "-a option means to print every builtin with an indication of whether"
+#: builtins.c:548
+msgid ""
+" fc is used to list or edit and re-execute commands from the history list.\n"
+"    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
+"    string, which means the most recent command beginning with that\n"
+"    string.\n"
+"    \n"
+"       -e ENAME selects which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
+"          then vi.\n"
+"    \n"
+"       -l means list lines instead of editing.\n"
+"       -n means no line numbers listed.\n"
+"       -r means reverse the order of the lines (making it newest listed "
+"first).\n"
+"    \n"
+"    With the `fc -s [pat=rep ...] [command]' format, the command is\n"
+"    re-executed after the substitution OLD=NEW is performed.\n"
+"    \n"
+"    A useful alias to use with this is r='fc -s', so that typing `r cc'\n"
+"    runs the last command beginning with `cc' and typing `r' re-executes\n"
+"    the last command."
+msgstr ""
+" fc is used to list or edit and re-execute commands from the history list.\n"
+"    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
+"    string, which means the most recent command beginning with that\n"
+"    string.\n"
+"    \n"
+"       -e ENAME selects which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
+"          then vi.\n"
+"    \n"
+"       -l means list lines instead of editing.\n"
+"       -n means no line numbers listed.\n"
+"       -r means reverse the order of the lines (making it newest listed "
+"first).\n"
+"    \n"
+"    With the ‘fc -s [pat=rep ...] [command]’ format, the command is\n"
+"    re-executed after the substitution OLD=NEW is performed.\n"
+"    \n"
+"    A useful alias to use with this is r='fc -s', so that typing ‘r cc’\n"
+"    runs the last command beginning with ‘cc’ and typing ‘r’ re-executes\n"
+"    the last command."
 
-#: builtins.c:473
+#: builtins.c:573
 msgid ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
+" Place JOB_SPEC in the foreground, and make it the current job.  If\n"
+"    JOB_SPEC is not present, the shell's notion of the current job is\n"
+"    used."
 msgstr ""
-"or not it is enabled.  The -s option restricts the output to the POSIX.2"
+" Place JOB_SPEC in the foreground, and make it the current job.  If\n"
+"    JOB_SPEC is not present, the shell's notion of the current job is\n"
+"    used."
 
-#: builtins.c:474
+#: builtins.c:583
 msgid ""
-"`special' builtins.  The -n option displays a list of all disabled builtins."
+" Place each JOB_SPEC in the background, as if it had been started with\n"
+"    `&'.  If JOB_SPEC is not present, the shell's notion of the current\n"
+"    job is used."
 msgstr ""
-"‘special’ builtins.  The -n option displays a list of all disabled builtins."
-
-#: builtins.c:480
-msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-msgstr "Read ARGs as input to the shell and execute the resulting command(s)."
-
-#: builtins.c:486
-msgid "Getopts is used by shell procedures to parse positional parameters."
-msgstr "Getopts is used by shell procedures to parse positional parameters."
-
-#: builtins.c:488
-msgid "OPTSTRING contains the option letters to be recognized; if a letter"
-msgstr "OPTSTRING contains the option letters to be recognized; if a letter"
-
-#: builtins.c:489
-msgid "is followed by a colon, the option is expected to have an argument,"
-msgstr "is followed by a colon, the option is expected to have an argument,"
-
-#: builtins.c:490
-msgid "which should be separated from it by white space."
-msgstr "which should be separated from it by white space."
-
-#: builtins.c:492
-msgid "Each time it is invoked, getopts will place the next option in the"
-msgstr "Each time it is invoked, getopts will place the next option in the"
-
-#: builtins.c:493
-msgid "shell variable $name, initializing name if it does not exist, and"
-msgstr "shell variable $name, initializing name if it does not exist, and"
-
-#: builtins.c:494
-msgid "the index of the next argument to be processed into the shell"
-msgstr "the index of the next argument to be processed into the shell"
-
-#: builtins.c:495
-msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-msgstr "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-
-#: builtins.c:496
-msgid "a shell script is invoked.  When an option requires an argument,"
-msgstr "a shell script is invoked.  When an option requires an argument,"
+" Place each JOB_SPEC in the background, as if it had been started with\n"
+"    ‘&’.  If JOB_SPEC is not present, the shell's notion of the current\n"
+"    job is used."
 
-#: builtins.c:497
-msgid "getopts places that argument into the shell variable OPTARG."
-msgstr "getopts places that argument into the shell variable OPTARG."
-
-#: builtins.c:499
-msgid "getopts reports errors in one of two ways.  If the first character"
-msgstr "getopts reports errors in one of two ways.  If the first character"
-
-#: builtins.c:500
-msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-msgstr "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-
-#: builtins.c:501
-msgid "this mode, no error messages are printed.  If an invalid option is"
-msgstr "this mode, no error messages are printed.  If an invalid option is"
-
-#: builtins.c:502
-msgid "seen, getopts places the option character found into OPTARG.  If a"
-msgstr "seen, getopts places the option character found into OPTARG.  If a"
-
-#: builtins.c:503
-msgid "required argument is not found, getopts places a ':' into NAME and"
-msgstr "required argument is not found, getopts places a ‘:’ into NAME and"
-
-#: builtins.c:504
-msgid "sets OPTARG to the option character found.  If getopts is not in"
-msgstr "sets OPTARG to the option character found.  If getopts is not in"
-
-#: builtins.c:505
-msgid "silent mode, and an invalid option is seen, getopts places '?' into"
-msgstr "silent mode, and an invalid option is seen, getopts places ‘?’ into"
-
-#: builtins.c:506
-msgid "NAME and unsets OPTARG.  If a required argument is not found, a '?'"
-msgstr "NAME and unsets OPTARG.  If a required argument is not found, a ‘?’"
-
-#: builtins.c:507
-msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-msgstr "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-
-#: builtins.c:508
-msgid "printed."
-msgstr "printed."
-
-#: builtins.c:510
-msgid "If the shell variable OPTERR has the value 0, getopts disables the"
-msgstr "If the shell variable OPTERR has the value 0, getopts disables the"
-
-#: builtins.c:511
-msgid "printing of error messages, even if the first character of"
-msgstr "printing of error messages, even if the first character of"
+#: builtins.c:592
+msgid ""
+" For each NAME, the full pathname of the command is determined and\n"
+"    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
+"    full pathname of NAME, and no path search is performed.  The -r\n"
+"    option causes the shell to forget all remembered locations.  The -d\n"
+"    option causes the shell to forget the remembered location of each NAME.\n"
+"    If the -t option is supplied the full pathname to which each NAME\n"
+"    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+"    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+"    causes output to be displayed in a format that may be reused as input.\n"
+"    If no arguments are given, information about remembered commands is "
+"displayed."
+msgstr ""
+" For each NAME, the full pathname of the command is determined and\n"
+"    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
+"    full pathname of NAME, and no path search is performed.  The -r\n"
+"    option causes the shell to forget all remembered locations.  The -d\n"
+"    option causes the shell to forget the remembered location of each NAME.\n"
+"    If the -t option is supplied the full pathname to which each NAME\n"
+"    corresponds is printed.  If multiple NAME arguments are supplied with\n"
+"    -t, the NAME is printed before the hashed full pathname.  The -l option\n"
+"    causes output to be displayed in a format that may be reused as input.\n"
+"    If no arguments are given, information about remembered commands is "
+"displayed."
 
-#: builtins.c:512
-msgid "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
-msgstr "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
+#: builtins.c:608
+msgid ""
+" Display helpful information about builtin commands.  If PATTERN is\n"
+"    specified, gives detailed help on all commands matching PATTERN,\n"
+"    otherwise a list of the builtins is printed.  The -s option\n"
+"    restricts the output for each builtin command matching PATTERN to\n"
+"    a short usage synopsis."
+msgstr ""
+" Display helpful information about builtin commands.  If PATTERN is\n"
+"    specified, gives detailed help on all commands matching PATTERN,\n"
+"    otherwise a list of the builtins is printed.  The -s option\n"
+"    restricts the output for each builtin command matching PATTERN to\n"
+"    a short usage synopsis."
 
-#: builtins.c:514
-msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-msgstr "Getopts normally parses the positional parameters ($0 - $9), but if"
+#: builtins.c:620
+msgid ""
+" Display the history list with line numbers.  Lines listed with\n"
+"    with a `*' have been modified.  Argument of N says to list only\n"
+"    the last N lines.  The `-c' option causes the history list to be\n"
+"    cleared by deleting all of the entries.  The `-d' option deletes\n"
+"    the history entry at offset OFFSET.  The `-w' option writes out the\n"
+"    current history to the history file;  `-r' means to read the file and\n"
+"    append the contents to the history list instead.  `-a' means\n"
+"    to append history lines from this session to the history file.\n"
+"    Argument `-n' means to read all history lines not already read\n"
+"    from the history file and append them to the history list.\n"
+"    \n"
+"    If FILENAME is given, then that is used as the history file else\n"
+"    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
+"    If the -s option is supplied, the non-option ARGs are appended to\n"
+"    the history list as a single entry.  The -p option means to perform\n"
+"    history expansion on each ARG and display the result, without storing\n"
+"    anything in the history list.\n"
+"    \n"
+"    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
+"    as a format string for strftime(3) to print the time stamp associated\n"
+"    with each displayed history entry.  No time stamps are printed otherwise."
+msgstr ""
+" Display the history list with line numbers.  Lines listed with\n"
+"    with a ‘*’ have been modified.  Argument of N says to list only\n"
+"    the last N lines.  The ‘-c’ option causes the history list to be\n"
+"    cleared by deleting all of the entries.  The ‘-d’ option deletes\n"
+"    the history entry at offset OFFSET.  The ‘-w’ option writes out the\n"
+"    current history to the history file;  ‘-r’ means to read the file and\n"
+"    append the contents to the history list instead.  ‘-a’ means\n"
+"    to append history lines from this session to the history file.\n"
+"    Argument ‘-n’ means to read all history lines not already read\n"
+"    from the history file and append them to the history list.\n"
+"    \n"
+"    If FILENAME is given, then that is used as the history file else\n"
+"    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
+"    If the -s option is supplied, the non-option ARGs are appended to\n"
+"    the history list as a single entry.  The -p option means to perform\n"
+"    history expansion on each ARG and display the result, without storing\n"
+"    anything in the history list.\n"
+"    \n"
+"    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
+"    as a format string for strftime(3) to print the time stamp associated\n"
+"    with each displayed history entry.  No time stamps are printed otherwise."
 
-#: builtins.c:515
-msgid "more arguments are given, they are parsed instead."
-msgstr "more arguments are given, they are parsed instead."
+#: builtins.c:648
+msgid ""
+" Lists the active jobs.  The -l option lists process id's in addition\n"
+"    to the normal information; the -p option lists process id's only.\n"
+"    If -n is given, only processes that have changed status since the last\n"
+"    notification are printed.  JOBSPEC restricts output to that job.  The\n"
+"    -r and -s options restrict output to running and stopped jobs only,\n"
+"    respectively.  Without options, the status of all active jobs is\n"
+"    printed.  If -x is given, COMMAND is run after all job specifications\n"
+"    that appear in ARGS have been replaced with the process ID of that "
+"job's\n"
+"    process group leader."
+msgstr ""
+" Lists the active jobs.  The -l option lists process id's in addition\n"
+"    to the normal information; the -p option lists process id's only.\n"
+"    If -n is given, only processes that have changed status since the last\n"
+"    notification are printed.  JOBSPEC restricts output to that job.  The\n"
+"    -r and -s options restrict output to running and stopped jobs only,\n"
+"    respectively.  Without options, the status of all active jobs is\n"
+"    printed.  If -x is given, COMMAND is run after all job specifications\n"
+"    that appear in ARGS have been replaced with the process ID of that "
+"job's\n"
+"    process group leader."
 
-#: builtins.c:521
-msgid "Exec FILE, replacing this shell with the specified program."
-msgstr "Exec FILE, replacing this shell with the specified program."
+#: builtins.c:664
+msgid ""
+" By default, removes each JOBSPEC argument from the table of active jobs.\n"
+"    If the -h option is given, the job is not removed from the table, but "
+"is\n"
+"    marked so that SIGHUP is not sent to the job if the shell receives a\n"
+"    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
+"all\n"
+"    jobs from the job table; the -r option means to remove only running jobs."
+msgstr ""
+" By default, removes each JOBSPEC argument from the table of active jobs.\n"
+"    If the -h option is given, the job is not removed from the table, but "
+"is\n"
+"    marked so that SIGHUP is not sent to the job if the shell receives a\n"
+"    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
+"all\n"
+"    jobs from the job table; the -r option means to remove only running jobs."
 
-#: builtins.c:522
-msgid "If FILE is not specified, the redirections take effect in this"
-msgstr "If FILE is not specified, the redirections take effect in this"
+#: builtins.c:675
+msgid ""
+" Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If\n"
+"    SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'\n"
+"    lists the signal names; if arguments follow `-l' they are assumed to\n"
+"    be signal numbers for which names should be listed.  Kill is a shell\n"
+"    builtin for two reasons: it allows job IDs to be used instead of\n"
+"    process IDs, and, if you have reached the limit on processes that\n"
+"    you can create, you don't have to start a process to kill another one."
+msgstr ""
+" Send the processes named by PID (or JOBSPEC) the signal SIGSPEC.  If\n"
+"    SIGSPEC is not present, then SIGTERM is assumed.  An argument of ‘-l’\n"
+"    lists the signal names; if arguments follow ‘-l’ they are assumed to\n"
+"    be signal numbers for which names should be listed.  Kill is a shell\n"
+"    builtin for two reasons: it allows job IDs to be used instead of\n"
+"    process IDs, and, if you have reached the limit on processes that\n"
+"    you can create, you don't have to start a process to kill another one."
 
-#: builtins.c:523
-msgid "shell.  If the first argument is `-l', then place a dash in the"
-msgstr "shell.  If the first argument is ‘-l’, then place a dash in the"
+#: builtins.c:687
+msgid ""
+" Each ARG is an arithmetic expression to be evaluated.  Evaluation\n"
+"    is done in fixed-width integers with no check for overflow, though\n"
+"    division by 0 is trapped and flagged as an error.  The following\n"
+"    list of operators is grouped into levels of equal-precedence operators.\n"
+"    The levels are listed in order of decreasing precedence.\n"
+"    \n"
+"    \tid++, id--\tvariable post-increment, post-decrement\n"
+"    \t++id, --id\tvariable pre-increment, pre-decrement\n"
+"    \t-, +\t\tunary minus, plus\n"
+"    \t!, ~\t\tlogical and bitwise negation\n"
+"    \t**\t\texponentiation\n"
+"    \t*, /, %\t\tmultiplication, division, remainder\n"
+"    \t+, -\t\taddition, subtraction\n"
+"    \t<<, >>\t\tleft and right bitwise shifts\n"
+"    \t<=, >=, <, >\tcomparison\n"
+"    \t==, !=\t\tequality, inequality\n"
+"    \t&\t\tbitwise AND\n"
+"    \t^\t\tbitwise XOR\n"
+"    \t|\t\tbitwise OR\n"
+"    \t&&\t\tlogical AND\n"
+"    \t||\t\tlogical OR\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\tconditional operator\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tassignment\n"
+"    \n"
+"    Shell variables are allowed as operands.  The name of the variable\n"
+"    is replaced by its value (coerced to a fixed-width integer) within\n"
+"    an expression.  The variable need not have its integer attribute\n"
+"    turned on to be used in an expression.\n"
+"    \n"
+"    Operators are evaluated in order of precedence.  Sub-expressions in\n"
+"    parentheses are evaluated first and may override the precedence\n"
+"    rules above.\n"
+"    \n"
+"    If the last ARG evaluates to 0, let returns 1; 0 is returned\n"
+"    otherwise."
+msgstr ""
+" Each ARG is an arithmetic expression to be evaluated.  Evaluation\n"
+"    is done in fixed-width integers with no check for overflow, though\n"
+"    division by 0 is trapped and flagged as an error.  The following\n"
+"    list of operators is grouped into levels of equal-precedence operators.\n"
+"    The levels are listed in order of decreasing precedence.\n"
+"    \n"
+"    \tid++, id--\tvariable post-increment, post-decrement\n"
+"    \t++id, --id\tvariable pre-increment, pre-decrement\n"
+"    \t-, +\t\tunary minus, plus\n"
+"    \t!, ~\t\tlogical and bitwise negation\n"
+"    \t**\t\texponentiation\n"
+"    \t*, /, %\t\tmultiplication, division, remainder\n"
+"    \t+, -\t\taddition, subtraction\n"
+"    \t<<, >>\t\tleft and right bitwise shifts\n"
+"    \t<=, >=, <, >\tcomparison\n"
+"    \t==, !=\t\tequality, inequality\n"
+"    \t&\t\tbitwise AND\n"
+"    \t^\t\tbitwise XOR\n"
+"    \t|\t\tbitwise OR\n"
+"    \t&&\t\tlogical AND\n"
+"    \t||\t\tlogical OR\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\tconditional operator\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tassignment\n"
+"    \n"
+"    Shell variables are allowed as operands.  The name of the variable\n"
+"    is replaced by its value (coerced to a fixed-width integer) within\n"
+"    an expression.  The variable need not have its integer attribute\n"
+"    turned on to be used in an expression.\n"
+"    \n"
+"    Operators are evaluated in order of precedence.  Sub-expressions in\n"
+"    parentheses are evaluated first and may override the precedence\n"
+"    rules above.\n"
+"    \n"
+"    If the last ARG evaluates to 0, let returns 1; 0 is returned\n"
+"    otherwise."
 
-#: builtins.c:524
-msgid "zeroth arg passed to FILE, as login does.  If the `-c' option"
-msgstr "zeroth arg passed to FILE, as login does.  If the ‘-c’ option"
+#: builtins.c:730
+msgid ""
+" One line is read from the standard input, or from file descriptor FD if "
+"the\n"
+"    -u option is supplied, and the first word is assigned to the first "
+"NAME,\n"
+"    the second word to the second NAME, and so on, with leftover words "
+"assigned\n"
+"    to the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters.  If no NAMEs are supplied, the line read is stored in the "
+"REPLY\n"
+"    variable.  If the -r option is given, this signifies `raw' input, and\n"
+"    backslash escaping is disabled.  The -d option causes read to continue\n"
+"    until the first character of DELIM is read, rather than newline.  If the "
+"-p\n"
+"    option is supplied, the string PROMPT is output without a trailing "
+"newline\n"
+"    before attempting to read.  If -a is supplied, the words read are "
+"assigned\n"
+"    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
+"and\n"
+"    the shell is interactive, readline is used to obtain the line.  If -n "
+"is\n"
+"    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+"    characters have been read.  The -s option causes input coming from a\n"
+"    terminal to not be echoed.\n"
+"    \n"
+"    The -t option causes read to time out and return failure if a complete "
+"line\n"
+"    of input is not read within TIMEOUT seconds.  If the TMOUT variable is "
+"set,\n"
+"    its value is the default timeout.  The return code is zero, unless end-"
+"of-file\n"
+"    is encountered, read times out, or an invalid file descriptor is "
+"supplied as\n"
+"    the argument to -u."
+msgstr ""
+" One line is read from the standard input, or from file descriptor FD if "
+"the\n"
+"    -u option is supplied, and the first word is assigned to the first "
+"NAME,\n"
+"    the second word to the second NAME, and so on, with leftover words "
+"assigned\n"
+"    to the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters.  If no NAMEs are supplied, the line read is stored in the "
+"REPLY\n"
+"    variable.  If the -r option is given, this signifies ‘raw’ input, and\n"
+"    backslash escaping is disabled.  The -d option causes read to continue\n"
+"    until the first character of DELIM is read, rather than newline.  If the "
+"-p\n"
+"    option is supplied, the string PROMPT is output without a trailing "
+"newline\n"
+"    before attempting to read.  If -a is supplied, the words read are "
+"assigned\n"
+"    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
+"and\n"
+"    the shell is interactive, readline is used to obtain the line.  If -n "
+"is\n"
+"    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
+"    characters have been read.  The -s option causes input coming from a\n"
+"    terminal to not be echoed.\n"
+"    \n"
+"    The -t option causes read to time out and return failure if a complete "
+"line\n"
+"    of input is not read within TIMEOUT seconds.  If the TMOUT variable is "
+"set,\n"
+"    its value is the default timeout.  The return code is zero, unless end-"
+"of-file\n"
+"    is encountered, read times out, or an invalid file descriptor is "
+"supplied as\n"
+"    the argument to -u."
 
-#: builtins.c:525
-msgid "is supplied, FILE is executed with a null environment.  The `-a'"
-msgstr "is supplied, FILE is executed with a null environment.  The ‘-a’"
+#: builtins.c:756
+msgid ""
+" Causes a function to exit with the return value specified by N.  If N\n"
+"    is omitted, the return status is that of the last command."
+msgstr ""
+" Causes a function to exit with the return value specified by N.  If N\n"
+"    is omitted, the return status is that of the last command."
 
-#: builtins.c:526
-msgid "option means to make set argv[0] of the executed process to NAME."
-msgstr "option means to make set argv[0] of the executed process to NAME."
+#: builtins.c:763
+msgid ""
+"     -a  Mark variables which are modified or created for export.\n"
+"        -b  Notify of job termination immediately.\n"
+"        -e  Exit immediately if a command exits with a non-zero status.\n"
+"        -f  Disable file name generation (globbing).\n"
+"        -h  Remember the location of commands as they are looked up.\n"
+"        -k  All assignment arguments are placed in the environment for a\n"
+"            command, not just those that precede the command name.\n"
+"        -m  Job control is enabled.\n"
+"        -n  Read commands but do not execute them.\n"
+"        -o option-name\n"
+"            Set the variable corresponding to option-name:\n"
+"                allexport    same as -a\n"
+"                braceexpand  same as -B\n"
+"                emacs        use an emacs-style line editing interface\n"
+"                errexit      same as -e\n"
+"                errtrace     same as -E\n"
+"                functrace    same as -T\n"
+"                hashall      same as -h\n"
+"                histexpand   same as -H\n"
+"                history      enable command history\n"
+"                ignoreeof    the shell will not exit upon reading EOF\n"
+"                interactive-comments\n"
+"                             allow comments to appear in interactive "
+"commands\n"
+"                keyword      same as -k\n"
+"                monitor      same as -m\n"
+"                noclobber    same as -C\n"
+"                noexec       same as -n\n"
+"                noglob       same as -f\n"
+"                nolog        currently accepted but ignored\n"
+"                notify       same as -b\n"
+"                nounset      same as -u\n"
+"                onecmd       same as -t\n"
+"                physical     same as -P\n"
+"                pipefail     the return value of a pipeline is the status "
+"of\n"
+"                             the last command to exit with a non-zero "
+"status,\n"
+"                             or zero if no command exited with a non-zero "
+"status\n"
+"                posix        change the behavior of bash where the default\n"
+"                             operation differs from the 1003.2 standard to\n"
+"                             match the standard\n"
+"                privileged   same as -p\n"
+"                verbose      same as -v\n"
+"                vi           use a vi-style line editing interface\n"
+"                xtrace       same as -x\n"
+"        -p  Turned on whenever the real and effective user ids do not "
+"match.\n"
+"            Disables processing of the $ENV file and importing of shell\n"
+"            functions.  Turning this option off causes the effective uid "
+"and\n"
+"            gid to be set to the real uid and gid.\n"
+"        -t  Exit after reading and executing one command.\n"
+"        -u  Treat unset variables as an error when substituting.\n"
+"        -v  Print shell input lines as they are read.\n"
+"        -x  Print commands and their arguments as they are executed.\n"
+"        -B  the shell will perform brace expansion\n"
+"        -C  If set, disallow existing regular files to be overwritten\n"
+"            by redirection of output.\n"
+"        -E  If set, the ERR trap is inherited by shell functions.\n"
+"        -H  Enable ! style history substitution.  This flag is on\n"
+"            by default when the shell is interactive.\n"
+"        -P  If set, do not follow symbolic links when executing commands\n"
+"            such as cd which change the current directory.\n"
+"        -T  If set, the DEBUG trap is inherited by shell functions.\n"
+"        -   Assign any remaining arguments to the positional parameters.\n"
+"            The -x and -v options are turned off.\n"
+"    \n"
+"    Using + rather than - causes these flags to be turned off.  The\n"
+"    flags can also be used upon invocation of the shell.  The current\n"
+"    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+"    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
+"    ARGs are given, all shell variables are printed."
+msgstr ""
+"     -a  Mark variables which are modified or created for export.\n"
+"        -b  Notify of job termination immediately.\n"
+"        -e  Exit immediately if a command exits with a non-zero status.\n"
+"        -f  Disable file name generation (globbing).\n"
+"        -h  Remember the location of commands as they are looked up.\n"
+"        -k  All assignment arguments are placed in the environment for a\n"
+"            command, not just those that precede the command name.\n"
+"        -m  Job control is enabled.\n"
+"        -n  Read commands but do not execute them.\n"
+"        -o option-name\n"
+"            Set the variable corresponding to option-name:\n"
+"                allexport    same as -a\n"
+"                braceexpand  same as -B\n"
+"                emacs        use an emacs-style line editing interface\n"
+"                errexit      same as -e\n"
+"                errtrace     same as -E\n"
+"                functrace    same as -T\n"
+"                hashall      same as -h\n"
+"                histexpand   same as -H\n"
+"                history      enable command history\n"
+"                ignoreeof    the shell will not exit upon reading EOF\n"
+"                interactive-comments\n"
+"                             allow comments to appear in interactive "
+"commands\n"
+"                keyword      same as -k\n"
+"                monitor      same as -m\n"
+"                noclobber    same as -C\n"
+"                noexec       same as -n\n"
+"                noglob       same as -f\n"
+"                nolog        currently accepted but ignored\n"
+"                notify       same as -b\n"
+"                nounset      same as -u\n"
+"                onecmd       same as -t\n"
+"                physical     same as -P\n"
+"                pipefail     the return value of a pipeline is the status "
+"of\n"
+"                             the last command to exit with a non-zero "
+"status,\n"
+"                             or zero if no command exited with a non-zero "
+"status\n"
+"                posix        change the behavior of bash where the default\n"
+"                             operation differs from the 1003.2 standard to\n"
+"                             match the standard\n"
+"                privileged   same as -p\n"
+"                verbose      same as -v\n"
+"                vi           use a vi-style line editing interface\n"
+"                xtrace       same as -x\n"
+"        -p  Turned on whenever the real and effective user ids do not "
+"match.\n"
+"            Disables processing of the $ENV file and importing of shell\n"
+"            functions.  Turning this option off causes the effective uid "
+"and\n"
+"            gid to be set to the real uid and gid.\n"
+"        -t  Exit after reading and executing one command.\n"
+"        -u  Treat unset variables as an error when substituting.\n"
+"        -v  Print shell input lines as they are read.\n"
+"        -x  Print commands and their arguments as they are executed.\n"
+"        -B  the shell will perform brace expansion\n"
+"        -C  If set, disallow existing regular files to be overwritten\n"
+"            by redirection of output.\n"
+"        -E  If set, the ERR trap is inherited by shell functions.\n"
+"        -H  Enable ! style history substitution.  This flag is on\n"
+"            by default when the shell is interactive.\n"
+"        -P  If set, do not follow symbolic links when executing commands\n"
+"            such as cd which change the current directory.\n"
+"        -T  If set, the DEBUG trap is inherited by shell functions.\n"
+"        -   Assign any remaining arguments to the positional parameters.\n"
+"            The -x and -v options are turned off.\n"
+"    \n"
+"    Using + rather than - causes these flags to be turned off.  The\n"
+"    flags can also be used upon invocation of the shell.  The current\n"
+"    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+"    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
+"    ARGs are given, all shell variables are printed."
 
-#: builtins.c:527
-msgid "If the file cannot be executed and the shell is not interactive,"
-msgstr "If the file cannot be executed and the shell is not interactive,"
+#: builtins.c:836
+msgid ""
+" For each NAME, remove the corresponding variable or function.  Given\n"
+"    the `-v', unset will only act on variables.  Given the `-f' flag,\n"
+"    unset will only act on functions.  With neither flag, unset first\n"
+"    tries to unset a variable, and if that fails, then tries to unset a\n"
+"    function.  Some variables cannot be unset; also see readonly."
+msgstr ""
+" For each NAME, remove the corresponding variable or function.  Given\n"
+"    the ‘-v’, unset will only act on variables.  Given the ‘-f’ flag,\n"
+"    unset will only act on functions.  With neither flag, unset first\n"
+"    tries to unset a variable, and if that fails, then tries to unset a\n"
+"    function.  Some variables cannot be unset; also see readonly."
 
-#: builtins.c:528
-msgid "then the shell exits, unless the shell option `execfail' is set."
-msgstr "then the shell exits, unless the shell option ‘execfail’ is set."
+#: builtins.c:846
+msgid ""
+" NAMEs are marked for automatic export to the environment of\n"
+"    subsequently executed commands.  If the -f option is given,\n"
+"    the NAMEs refer to functions.  If no NAMEs are given, or if `-p'\n"
+"    is given, a list of all names that are exported in this shell is\n"
+"    printed.  An argument of `-n' says to remove the export property\n"
+"    from subsequent NAMEs.  An argument of `--' disables further option\n"
+"    processing."
+msgstr ""
+" NAMEs are marked for automatic export to the environment of\n"
+"    subsequently executed commands.  If the -f option is given,\n"
+"    the NAMEs refer to functions.  If no NAMEs are given, or if ‘-p’\n"
+"    is given, a list of all names that are exported in this shell is\n"
+"    printed.  An argument of ‘-n’ says to remove the export property\n"
+"    from subsequent NAMEs.  An argument of ‘--’ disables further option\n"
+"    processing."
 
-#: builtins.c:534
-msgid "Exit the shell with a status of N.  If N is omitted, the exit status"
-msgstr "Exit the shell with a status of N.  If N is omitted, the exit status"
+#: builtins.c:858
+msgid ""
+" The given NAMEs are marked readonly and the values of these NAMEs may\n"
+"    not be changed by subsequent assignment.  If the -f option is given,\n"
+"    then functions corresponding to the NAMEs are so marked.  If no\n"
+"    arguments are given, or if `-p' is given, a list of all readonly names\n"
+"    is printed.  The `-a' option means to treat each NAME as\n"
+"    an array variable.  An argument of `--' disables further option\n"
+"    processing."
+msgstr ""
+" The given NAMEs are marked readonly and the values of these NAMEs may\n"
+"    not be changed by subsequent assignment.  If the -f option is given,\n"
+"    then functions corresponding to the NAMEs are so marked.  If no\n"
+"    arguments are given, or if ‘-p’ is given, a list of all readonly names\n"
+"    is printed.  The ‘-a’ option means to treat each NAME as\n"
+"    an array variable.  An argument of ‘--’ disables further option\n"
+"    processing."
 
-#: builtins.c:535
-msgid "is that of the last command executed."
-msgstr "is that of the last command executed."
+#: builtins.c:870
+msgid ""
+" The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
+"    not given, it is assumed to be 1."
+msgstr ""
+" The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
+"    not given, it is assumed to be 1."
+
+#: builtins.c:877 builtins.c:886
+msgid ""
+" Read and execute commands from FILENAME and return.  The pathnames\n"
+"    in $PATH are used to find the directory containing FILENAME.  If any\n"
+"    ARGUMENTS are supplied, they become the positional parameters when\n"
+"    FILENAME is executed."
+msgstr ""
+" Read and execute commands from FILENAME and return.  The pathnames\n"
+"    in $PATH are used to find the directory containing FILENAME.  If any\n"
+"    ARGUMENTS are supplied, they become the positional parameters when\n"
+"    FILENAME is executed."
+
+#: builtins.c:896
+msgid ""
+" Suspend the execution of this shell until it receives a SIGCONT\n"
+"    signal.  The `-f' if specified says not to complain about this\n"
+"    being a login shell if it is; just suspend anyway."
+msgstr ""
+" Suspend the execution of this shell until it receives a SIGCONT\n"
+"    signal.  The ‘-f’ if specified says not to complain about this\n"
+"    being a login shell if it is; just suspend anyway."
+
+#: builtins.c:905
+msgid ""
+" Exits with a status of 0 (true) or 1 (false) depending on\n"
+"    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
+"    expressions are often used to examine the status of a file.  There\n"
+"    are string operators as well, and numeric comparison operators.\n"
+"    \n"
+"    File operators:\n"
+"    \n"
+"        -a FILE        True if file exists.\n"
+"        -b FILE        True if file is block special.\n"
+"        -c FILE        True if file is character special.\n"
+"        -d FILE        True if file is a directory.\n"
+"        -e FILE        True if file exists.\n"
+"        -f FILE        True if file exists and is a regular file.\n"
+"        -g FILE        True if file is set-group-id.\n"
+"        -h FILE        True if file is a symbolic link.\n"
+"        -L FILE        True if file is a symbolic link.\n"
+"        -k FILE        True if file has its `sticky' bit set.\n"
+"        -p FILE        True if file is a named pipe.\n"
+"        -r FILE        True if file is readable by you.\n"
+"        -s FILE        True if file exists and is not empty.\n"
+"        -S FILE        True if file is a socket.\n"
+"        -t FD          True if FD is opened on a terminal.\n"
+"        -u FILE        True if the file is set-user-id.\n"
+"        -w FILE        True if the file is writable by you.\n"
+"        -x FILE        True if the file is executable by you.\n"
+"        -O FILE        True if the file is effectively owned by you.\n"
+"        -G FILE        True if the file is effectively owned by your group.\n"
+"        -N FILE        True if the file has been modified since it was last "
+"read.\n"
+"    \n"
+"      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
+"                       modification date).\n"
+"    \n"
+"      FILE1 -ot FILE2  True if file1 is older than file2.\n"
+"    \n"
+"      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
+"    \n"
+"    String operators:\n"
+"    \n"
+"        -z STRING      True if string is empty.\n"
+"    \n"
+"        -n STRING\n"
+"        STRING         True if string is not empty.\n"
+"    \n"
+"        STRING1 = STRING2\n"
+"                       True if the strings are equal.\n"
+"        STRING1 != STRING2\n"
+"                       True if the strings are not equal.\n"
+"        STRING1 < STRING2\n"
+"                       True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
+"        STRING1 > STRING2\n"
+"                       True if STRING1 sorts after STRING2 "
+"lexicographically.\n"
+"    \n"
+"    Other operators:\n"
+"    \n"
+"        -o OPTION      True if the shell option OPTION is enabled.\n"
+"        ! EXPR         True if expr is false.\n"
+"        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
+"        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
+"    \n"
+"        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
+"                       -lt, -le, -gt, or -ge.\n"
+"    \n"
+"    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
+"    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
+"    than ARG2."
+msgstr ""
+" Exits with a status of 0 (true) or 1 (false) depending on\n"
+"    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
+"    expressions are often used to examine the status of a file.  There\n"
+"    are string operators as well, and numeric comparison operators.\n"
+"    \n"
+"    File operators:\n"
+"    \n"
+"        -a FILE        True if file exists.\n"
+"        -b FILE        True if file is block special.\n"
+"        -c FILE        True if file is character special.\n"
+"        -d FILE        True if file is a directory.\n"
+"        -e FILE        True if file exists.\n"
+"        -f FILE        True if file exists and is a regular file.\n"
+"        -g FILE        True if file is set-group-id.\n"
+"        -h FILE        True if file is a symbolic link.\n"
+"        -L FILE        True if file is a symbolic link.\n"
+"        -k FILE        True if file has its ‘sticky’ bit set.\n"
+"        -p FILE        True if file is a named pipe.\n"
+"        -r FILE        True if file is readable by you.\n"
+"        -s FILE        True if file exists and is not empty.\n"
+"        -S FILE        True if file is a socket.\n"
+"        -t FD          True if FD is opened on a terminal.\n"
+"        -u FILE        True if the file is set-user-id.\n"
+"        -w FILE        True if the file is writable by you.\n"
+"        -x FILE        True if the file is executable by you.\n"
+"        -O FILE        True if the file is effectively owned by you.\n"
+"        -G FILE        True if the file is effectively owned by your group.\n"
+"        -N FILE        True if the file has been modified since it was last "
+"read.\n"
+"    \n"
+"      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
+"                       modification date).\n"
+"    \n"
+"      FILE1 -ot FILE2  True if file1 is older than file2.\n"
+"    \n"
+"      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
+"    \n"
+"    String operators:\n"
+"    \n"
+"        -z STRING      True if string is empty.\n"
+"    \n"
+"        -n STRING\n"
+"        STRING         True if string is not empty.\n"
+"    \n"
+"        STRING1 = STRING2\n"
+"                       True if the strings are equal.\n"
+"        STRING1 != STRING2\n"
+"                       True if the strings are not equal.\n"
+"        STRING1 < STRING2\n"
+"                       True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
+"        STRING1 > STRING2\n"
+"                       True if STRING1 sorts after STRING2 "
+"lexicographically.\n"
+"    \n"
+"    Other operators:\n"
+"    \n"
+"        -o OPTION      True if the shell option OPTION is enabled.\n"
+"        ! EXPR         True if expr is false.\n"
+"        EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
+"        EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
+"    \n"
+"        arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
+"                       -lt, -le, -gt, or -ge.\n"
+"    \n"
+"    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
+"    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
+"    than ARG2."
 
-#: builtins.c:541
-msgid "Logout of a login shell."
-msgstr "Logout of a login shell."
+#: builtins.c:975
+msgid ""
+" This is a synonym for the \"test\" builtin, but the last\n"
+"    argument must be a literal `]', to match the opening `['."
+msgstr ""
+" This is a synonym for the “test” builtin, but the last\n"
+"    argument must be a literal ‘]’, to match the opening ‘[’."
+
+#: builtins.c:982
+msgid ""
+" Print the accumulated user and system times for processes run from\n"
+"    the shell."
+msgstr ""
+" Print the accumulated user and system times for processes run from\n"
+"    the shell."
+
+#: builtins.c:989
+msgid ""
+" The command ARG is to be read and executed when the shell receives\n"
+"    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC\n"
+"    is supplied) or `-', each specified signal is reset to its original\n"
+"    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
+"    shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)\n"
+"    the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC\n"
+"    is DEBUG, ARG is executed after every simple command.  If the`-p' "
+"option\n"
+"    is supplied then the trap commands associated with each SIGNAL_SPEC are\n"
+"    displayed.  If no arguments are supplied or if only `-p' is given, trap\n"
+"    prints the list of commands associated with each signal.  Each "
+"SIGNAL_SPEC\n"
+"    is either a signal name in <signal.h> or a signal number.  Signal names\n"
+"    are case insensitive and the SIG prefix is optional.  `trap -l' prints\n"
+"    a list of signal names and their corresponding numbers.  Note that a\n"
+"    signal can be sent to the shell with \"kill -signal $$\"."
+msgstr ""
+" The command ARG is to be read and executed when the shell receives\n"
+"    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC\n"
+"    is supplied) or ‘-’, each specified signal is reset to its original\n"
+"    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
+"    shell and by the commands it invokes.  If a SIGNAL_SPEC is EXIT (0)\n"
+"    the command ARG is executed on exit from the shell.  If a SIGNAL_SPEC\n"
+"    is DEBUG, ARG is executed after every simple command.  If the‘-p’ "
+"option\n"
+"    is supplied then the trap commands associated with each SIGNAL_SPEC are\n"
+"    displayed.  If no arguments are supplied or if only ‘-p’ is given, trap\n"
+"    prints the list of commands associated with each signal.  Each "
+"SIGNAL_SPEC\n"
+"    is either a signal name in <signal.h> or a signal number.  Signal names\n"
+"    are case insensitive and the SIG prefix is optional.  ‘trap -l’ prints\n"
+"    a list of signal names and their corresponding numbers.  Note that a\n"
+"    signal can be sent to the shell with “kill -signal $$”."
 
-#: builtins.c:548
+#: builtins.c:1008
 msgid ""
-"fc is used to list or edit and re-execute commands from the history list."
-msgstr ""
-"fc is used to list or edit and re-execute commands from the history list."
+" For each NAME, indicate how it would be interpreted if used as a\n"
+"    command name.\n"
+"    \n"
+"    If the -t option is used, `type' outputs a single word which is one of\n"
+"    `alias', `keyword', `function', `builtin', `file' or `', if NAME is an\n"
+"    alias, shell reserved word, shell function, shell builtin, disk file,\n"
+"    or unfound, respectively.\n"
+"    \n"
+"    If the -p flag is used, `type' either returns the name of the disk\n"
+"    file that would be executed, or nothing if `type -t NAME' would not\n"
+"    return `file'.\n"
+"    \n"
+"    If the -a flag is used, `type' displays all of the places that contain\n"
+"    an executable named `file'.  This includes aliases, builtins, and\n"
+"    functions, if and only if the -p flag is not also used.\n"
+"    \n"
+"    The -f flag suppresses shell function lookup.\n"
+"    \n"
+"    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+"    builtin, or function, and returns the name of the disk file that would\n"
+"    be executed."
+msgstr ""
+" For each NAME, indicate how it would be interpreted if used as a\n"
+"    command name.\n"
+"    \n"
+"    If the -t option is used, ‘type’ outputs a single word which is one of\n"
+"    ‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file’ or ‘’, if NAME is an\n"
+"    alias, shell reserved word, shell function, shell builtin, disk file,\n"
+"    or unfound, respectively.\n"
+"    \n"
+"    If the -p flag is used, ‘type’ either returns the name of the disk\n"
+"    file that would be executed, or nothing if ‘type -t NAME’ would not\n"
+"    return ‘file’.\n"
+"    \n"
+"    If the -a flag is used, ‘type’ displays all of the places that contain\n"
+"    an executable named ‘file’.  This includes aliases, builtins, and\n"
+"    functions, if and only if the -p flag is not also used.\n"
+"    \n"
+"    The -f flag suppresses shell function lookup.\n"
+"    \n"
+"    The -P flag forces a PATH search for each NAME, even if it is an alias,\n"
+"    builtin, or function, and returns the name of the disk file that would\n"
+"    be executed."
 
-#: builtins.c:549
-msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-msgstr "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
+#: builtins.c:1035
+msgid ""
+" Ulimit provides control over the resources available to processes\n"
+"    started by the shell, on systems that allow such control.  If an\n"
+"    option is given, it is interpreted as follows:\n"
+"    \n"
+"        -S\tuse the `soft' resource limit\n"
+"        -H\tuse the `hard' resource limit\n"
+"        -a\tall current limits are reported\n"
+"        -c\tthe maximum size of core files created\n"
+"        -d\tthe maximum size of a process's data segment\n"
+"        -f\tthe maximum size of files created by the shell\n"
+"        -i  the maximum number of pending signals\n"
+"        -l\tthe maximum size a process may lock into memory\n"
+"        -m\tthe maximum resident set size\n"
+"        -n\tthe maximum number of open file descriptors\n"
+"        -p\tthe pipe buffer size\n"
+"        -q  the maximum number of bytes in POSIX message queues\n"
+"        -s\tthe maximum stack size\n"
+"        -t\tthe maximum amount of cpu time in seconds\n"
+"        -u\tthe maximum number of user processes\n"
+"        -v\tthe size of virtual memory\n"
+"        -x  the maximum number of file locks\n"
+"    \n"
+"    If LIMIT is given, it is the new value of the specified resource;\n"
+"    the special LIMIT values `soft', `hard', and `unlimited' stand for\n"
+"    the current soft limit, the current hard limit, and no limit, "
+"respectively.\n"
+"    Otherwise, the current value of the specified resource is printed.\n"
+"    If no option is given, then -f is assumed.  Values are in 1024-byte\n"
+"    increments, except for -t, which is in seconds, -p, which is in\n"
+"    increments of 512 bytes, and -u, which is an unscaled number of\n"
+"    processes."
+msgstr ""
+" Ulimit provides control over the resources available to processes\n"
+"    started by the shell, on systems that allow such control.  If an\n"
+"    option is given, it is interpreted as follows:\n"
+"    \n"
+"        -S\tuse the ‘soft’ resource limit\n"
+"        -H\tuse the ‘hard’ resource limit\n"
+"        -a\tall current limits are reported\n"
+"        -c\tthe maximum size of core files created\n"
+"        -d\tthe maximum size of a process's data segment\n"
+"        -f\tthe maximum size of files created by the shell\n"
+"        -i  the maximum number of pending signals\n"
+"        -l\tthe maximum size a process may lock into memory\n"
+"        -m\tthe maximum resident set size\n"
+"        -n\tthe maximum number of open file descriptors\n"
+"        -p\tthe pipe buffer size\n"
+"        -q  the maximum number of bytes in POSIX message queues\n"
+"        -s\tthe maximum stack size\n"
+"        -t\tthe maximum amount of cpu time in seconds\n"
+"        -u\tthe maximum number of user processes\n"
+"        -v\tthe size of virtual memory\n"
+"        -x  the maximum number of file locks\n"
+"    \n"
+"    If LIMIT is given, it is the new value of the specified resource;\n"
+"    the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ stand for\n"
+"    the current soft limit, the current hard limit, and no limit, "
+"respectively.\n"
+"    Otherwise, the current value of the specified resource is printed.\n"
+"    If no option is given, then -f is assumed.  Values are in 1024-byte\n"
+"    increments, except for -t, which is in seconds, -p, which is in\n"
+"    increments of 512 bytes, and -u, which is an unscaled number of\n"
+"    processes."
+
+#: builtins.c:1071
+msgid ""
+" The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
+"    `-S' is supplied, the current value of the mask is printed.  The `-S'\n"
+"    option makes the output symbolic; otherwise an octal number is output.\n"
+"    If `-p' is supplied, and MODE is omitted, the output is in a form\n"
+"    that may be used as input.  If MODE begins with a digit, it is\n"
+"    interpreted as an octal number, otherwise it is a symbolic mode string\n"
+"    like that accepted by chmod(1)."
+msgstr ""
+" The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
+"    ‘-S’ is supplied, the current value of the mask is printed.  The ‘-S’\n"
+"    option makes the output symbolic; otherwise an octal number is output.\n"
+"    If ‘-p’ is supplied, and MODE is omitted, the output is in a form\n"
+"    that may be used as input.  If MODE begins with a digit, it is\n"
+"    interpreted as an octal number, otherwise it is a symbolic mode string\n"
+"    like that accepted by chmod(1)."
+
+#: builtins.c:1084
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N may be a process ID or a job\n"
+"    specification; if a job spec is given, all processes in the job's\n"
+"    pipeline are waited for."
+msgstr ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N may be a process ID or a job\n"
+"    specification; if a job spec is given, all processes in the job's\n"
+"    pipeline are waited for."
+
+#: builtins.c:1096
+msgid ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N is a process ID; if it is not given,\n"
+"    all child processes of the shell are waited for."
+msgstr ""
+" Wait for the specified process and report its termination status.  If\n"
+"    N is not given, all currently active child processes are waited for,\n"
+"    and the return code is zero.  N is a process ID; if it is not given,\n"
+"    all child processes of the shell are waited for."
+
+#: builtins.c:1106
+msgid ""
+" The `for' loop executes a sequence of commands for each member in a\n"
+"    list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is\n"
+"    assumed.  For each element in WORDS, NAME is set to that element, and\n"
+"    the COMMANDS are executed."
+msgstr ""
+" The ‘for’ loop executes a sequence of commands for each member in a\n"
+"    list of items.  If ‘in WORDS ...;’ is not present, then ‘in “$@”’ is\n"
+"    assumed.  For each element in WORDS, NAME is set to that element, and\n"
+"    the COMMANDS are executed."
 
-#: builtins.c:550
-msgid "string, which means the most recent command beginning with that"
-msgstr "string, which means the most recent command beginning with that"
+#: builtins.c:1115
+msgid ""
+" Equivalent to\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMMANDS\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is\n"
+"    omitted, it behaves as if it evaluates to 1."
+msgstr ""
+" Equivalent to\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMMANDS\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is\n"
+"    omitted, it behaves as if it evaluates to 1."
 
-#: builtins.c:551
-msgid "string."
-msgstr "string."
+#: builtins.c:1128
+msgid ""
+" The WORDS are expanded, generating a list of words.  The\n"
+"    set of expanded words is printed on the standard error, each\n"
+"    preceded by a number.  If `in WORDS' is not present, `in \"$@\"'\n"
+"    is assumed.  The PS3 prompt is then displayed and a line read\n"
+"    from the standard input.  If the line consists of the number\n"
+"    corresponding to one of the displayed words, then NAME is set\n"
+"    to that word.  If the line is empty, WORDS and the prompt are\n"
+"    redisplayed.  If EOF is read, the command completes.  Any other\n"
+"    value read causes NAME to be set to null.  The line read is saved\n"
+"    in the variable REPLY.  COMMANDS are executed after each selection\n"
+"    until a break command is executed."
+msgstr ""
+" The WORDS are expanded, generating a list of words.  The\n"
+"    set of expanded words is printed on the standard error, each\n"
+"    preceded by a number.  If ‘in WORDS’ is not present, ‘in “$@”’\n"
+"    is assumed.  The PS3 prompt is then displayed and a line read\n"
+"    from the standard input.  If the line consists of the number\n"
+"    corresponding to one of the displayed words, then NAME is set\n"
+"    to that word.  If the line is empty, WORDS and the prompt are\n"
+"    redisplayed.  If EOF is read, the command completes.  Any other\n"
+"    value read causes NAME to be set to null.  The line read is saved\n"
+"    in the variable REPLY.  COMMANDS are executed after each selection\n"
+"    until a break command is executed."
 
-#: builtins.c:553
+#: builtins.c:1144
 msgid ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
+" Execute PIPELINE and print a summary of the real time, user CPU time,\n"
+"    and system CPU time spent executing PIPELINE when it terminates.\n"
+"    The return status is the return status of PIPELINE.  The `-p' option\n"
+"    prints the timing summary in a slightly different format.  This uses\n"
+"    the value of the TIMEFORMAT variable as the output format."
 msgstr ""
-"   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-
-#: builtins.c:554
-msgid "      then vi."
-msgstr "      then vi."
-
-#: builtins.c:556
-msgid "   -l means list lines instead of editing."
-msgstr "   -l means list lines instead of editing."
-
-#: builtins.c:557
-msgid "   -n means no line numbers listed."
-msgstr "   -n means no line numbers listed."
+" Execute PIPELINE and print a summary of the real time, user CPU time,\n"
+"    and system CPU time spent executing PIPELINE when it terminates.\n"
+"    The return status is the return status of PIPELINE.  The ‘-p’ option\n"
+"    prints the timing summary in a slightly different format.  This uses\n"
+"    the value of the TIMEFORMAT variable as the output format."
 
-#: builtins.c:558
+#: builtins.c:1154
 msgid ""
-"   -r means reverse the order of the lines (making it newest listed first)."
+" Selectively execute COMMANDS based upon WORD matching PATTERN.  The\n"
+"    `|' is used to separate multiple patterns."
 msgstr ""
-"   -r means reverse the order of the lines (making it newest listed first)."
-
-#: builtins.c:560
-msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-msgstr "With the ‘fc -s [pat=rep ...] [command]’ format, the command is"
-
-#: builtins.c:561
-msgid "re-executed after the substitution OLD=NEW is performed."
-msgstr "re-executed after the substitution OLD=NEW is performed."
-
-#: builtins.c:563
-msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-msgstr "A useful alias to use with this is r='fc -s', so that typing ‘r cc’"
+" Selectively execute COMMANDS based upon WORD matching PATTERN.  The\n"
+"    ‘|’ is used to separate multiple patterns."
 
-#: builtins.c:564
-msgid "runs the last command beginning with `cc' and typing `r' re-executes"
-msgstr "runs the last command beginning with ‘cc’ and typing ‘r’ re-executes"
+#: builtins.c:1161
+msgid ""
+" The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
+"    executed in turn, and if its exit status is zero, the corresponding\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
+"    if no condition tested true."
+msgstr ""
+" The ‘if COMMANDS’ list is executed.  If its exit status is zero, then the\n"
+"    ‘then COMMANDS’ list is executed.  Otherwise, each ‘elif COMMANDS’ list "
+"is\n"
+"    executed in turn, and if its exit status is zero, the corresponding\n"
+"    ‘then COMMANDS’ list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the ‘else COMMANDS’ list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
+"    if no condition tested true."
+
+#: builtins.c:1173
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `while' COMMANDS has an exit status of zero."
+msgstr ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    ‘while’ COMMANDS has an exit status of zero."
+
+#: builtins.c:1180
+msgid ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    `until' COMMANDS has an exit status which is not zero."
+msgstr ""
+" Expand and execute COMMANDS as long as the final command in the\n"
+"    ‘until’ COMMANDS has an exit status which is not zero."
+
+#: builtins.c:1187
+msgid ""
+" Create a simple command invoked by NAME which runs COMMANDS.\n"
+"    Arguments on the command line along with NAME are passed to the\n"
+"    function as $0 .. $n."
+msgstr ""
+" Create a simple command invoked by NAME which runs COMMANDS.\n"
+"    Arguments on the command line along with NAME are passed to the\n"
+"    function as $0 .. $n."
+
+#: builtins.c:1195
+msgid ""
+" Run a set of commands in a group.  This is one way to redirect an\n"
+"    entire set of commands."
+msgstr ""
+" Run a set of commands in a group.  This is one way to redirect an\n"
+"    entire set of commands."
+
+#: builtins.c:1202
+msgid ""
+" Equivalent to the JOB_SPEC argument to the `fg' command.  Resume a\n"
+"    stopped or background job.  JOB_SPEC can specify either a job name\n"
+"    or a job number.  Following JOB_SPEC with a `&' places the job in\n"
+"    the background, as if the job specification had been supplied as an\n"
+"    argument to `bg'."
+msgstr ""
+" Equivalent to the JOB_SPEC argument to the ‘fg’ command.  Resume a\n"
+"    stopped or background job.  JOB_SPEC can specify either a job name\n"
+"    or a job number.  Following JOB_SPEC with a ‘&’ places the job in\n"
+"    the background, as if the job specification had been supplied as an\n"
+"    argument to ‘bg’."
+
+#: builtins.c:1212
+msgid ""
+" The EXPRESSION is evaluated according to the rules for arithmetic\n"
+"    evaluation.  Equivalent to \"let EXPRESSION\"."
+msgstr ""
+" The EXPRESSION is evaluated according to the rules for arithmetic\n"
+"    evaluation.  Equivalent to “let EXPRESSION”."
+
+#: builtins.c:1219
+msgid ""
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators\n"
+"    \n"
+"    \t( EXPRESSION )\tReturns the value of EXPRESSION\n"
+"    \t! EXPRESSION\tTrue if EXPRESSION is false; else false\n"
+"    \tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false\n"
+"    \tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false\n"
+"    \n"
+"    When the `==' and `!=' operators are used, the string to the right of "
+"the\n"
+"    operator is used as a pattern and pattern matching is performed.  The\n"
+"    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to\n"
+"    determine the expression's value."
+msgstr ""
+" Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the ‘test’ builtin, and may be combined using the following "
+"operators\n"
+"    \n"
+"    \t( EXPRESSION )\tReturns the value of EXPRESSION\n"
+"    \t! EXPRESSION\tTrue if EXPRESSION is false; else false\n"
+"    \tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false\n"
+"    \tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false\n"
+"    \n"
+"    When the ‘==’ and ‘!=’ operators are used, the string to the right of "
+"the\n"
+"    operator is used as a pattern and pattern matching is performed.  The\n"
+"    && and || operators do not evaluate EXPR2 if EXPR1 is sufficient to\n"
+"    determine the expression's value."
+
+#: builtins.c:1237
+msgid ""
+" BASH_VERSION    Version information for this Bash.\n"
+"    CDPATH          A colon-separated list of directories to search\n"
+"    \t\tfor directries given as arguments to `cd'.\n"
+"    GLOBIGNORE\tA colon-separated list of patterns describing filenames to\n"
+"    \t\tbe ignored by pathname expansion.\n"
+"    HISTFILE        The name of the file where your command history is "
+"stored.\n"
+"    HISTFILESIZE    The maximum number of lines this file can contain.\n"
+"    HISTSIZE        The maximum number of history lines that a running\n"
+"    \t\tshell can access.\n"
+"    HOME            The complete pathname to your login directory.\n"
+"    HOSTNAME\tThe name of the current host.\n"
+"    HOSTTYPE        The type of CPU this version of Bash is running under.\n"
+"    IGNOREEOF       Controls the action of the shell on receipt of an EOF\n"
+"    \t\tcharacter as the sole input.  If set, then the value\n"
+"    \t\tof it is the number of EOF characters that can be seen\n"
+"    \t\tin a row on an empty line before the shell will exit\n"
+"    \t\t(default 10).  When unset, EOF signifies the end of input.\n"
+"    MACHTYPE\tA string describing the current system Bash is running on.\n"
+"    MAILCHECK\tHow often, in seconds, Bash checks for new mail.\n"
+"    MAILPATH\tA colon-separated list of filenames which Bash checks\n"
+"    \t\tfor new mail.\n"
+"    OSTYPE\t\tThe version of Unix this version of Bash is running on.\n"
+"    PATH            A colon-separated list of directories to search when\n"
+"    \t\tlooking for commands.\n"
+"    PROMPT_COMMAND  A command to be executed before the printing of each\n"
+"    \t\tprimary prompt.\n"
+"    PS1             The primary prompt string.\n"
+"    PS2             The secondary prompt string.\n"
+"    PWD\t\tThe full pathname of the current directory.\n"
+"    SHELLOPTS\tA colon-separated list of enabled shell options.\n"
+"    TERM            The name of the current terminal type.\n"
+"    TIMEFORMAT\tThe output format for timing statistics displayed by the\n"
+"    \t\t`time' reserved word.\n"
+"    auto_resume     Non-null means a command word appearing on a line by\n"
+"    \t\titself is first looked for in the list of currently\n"
+"    \t\tstopped jobs.  If found there, that job is foregrounded.\n"
+"    \t\tA value of `exact' means that the command word must\n"
+"    \t\texactly match a command in the list of stopped jobs.  A\n"
+"    \t\tvalue of `substring' means that the command word must\n"
+"    \t\tmatch a substring of the job.  Any other value means that\n"
+"    \t\tthe command must be a prefix of a stopped job.\n"
+"    histchars       Characters controlling history expansion and quick\n"
+"    \t\tsubstitution.  The first character is the history\n"
+"    \t\tsubstitution character, usually `!'.  The second is\n"
+"    \t\tthe `quick substitution' character, usually `^'.  The\n"
+"    \t\tthird is the `history comment' character, usually `#'.\n"
+"    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
+"    \t\tcommands should be saved on the history list.\n"
+msgstr ""
+" BASH_VERSION    Version information for this Bash.\n"
+"    CDPATH          A colon-separated list of directories to search\n"
+"    \t\tfor directries given as arguments to ‘cd’.\n"
+"    GLOBIGNORE\tA colon-separated list of patterns describing filenames to\n"
+"    \t\tbe ignored by pathname expansion.\n"
+"    HISTFILE        The name of the file where your command history is "
+"stored.\n"
+"    HISTFILESIZE    The maximum number of lines this file can contain.\n"
+"    HISTSIZE        The maximum number of history lines that a running\n"
+"    \t\tshell can access.\n"
+"    HOME            The complete pathname to your login directory.\n"
+"    HOSTNAME\tThe name of the current host.\n"
+"    HOSTTYPE        The type of CPU this version of Bash is running under.\n"
+"    IGNOREEOF       Controls the action of the shell on receipt of an EOF\n"
+"    \t\tcharacter as the sole input.  If set, then the value\n"
+"    \t\tof it is the number of EOF characters that can be seen\n"
+"    \t\tin a row on an empty line before the shell will exit\n"
+"    \t\t(default 10).  When unset, EOF signifies the end of input.\n"
+"    MACHTYPE\tA string describing the current system Bash is running on.\n"
+"    MAILCHECK\tHow often, in seconds, Bash checks for new mail.\n"
+"    MAILPATH\tA colon-separated list of filenames which Bash checks\n"
+"    \t\tfor new mail.\n"
+"    OSTYPE\t\tThe version of Unix this version of Bash is running on.\n"
+"    PATH            A colon-separated list of directories to search when\n"
+"    \t\tlooking for commands.\n"
+"    PROMPT_COMMAND  A command to be executed before the printing of each\n"
+"    \t\tprimary prompt.\n"
+"    PS1             The primary prompt string.\n"
+"    PS2             The secondary prompt string.\n"
+"    PWD\t\tThe full pathname of the current directory.\n"
+"    SHELLOPTS\tA colon-separated list of enabled shell options.\n"
+"    TERM            The name of the current terminal type.\n"
+"    TIMEFORMAT\tThe output format for timing statistics displayed by the\n"
+"    \t\t‘time’ reserved word.\n"
+"    auto_resume     Non-null means a command word appearing on a line by\n"
+"    \t\titself is first looked for in the list of currently\n"
+"    \t\tstopped jobs.  If found there, that job is foregrounded.\n"
+"    \t\tA value of ‘exact’ means that the command word must\n"
+"    \t\texactly match a command in the list of stopped jobs.  A\n"
+"    \t\tvalue of ‘substring’ means that the command word must\n"
+"    \t\tmatch a substring of the job.  Any other value means that\n"
+"    \t\tthe command must be a prefix of a stopped job.\n"
+"    histchars       Characters controlling history expansion and quick\n"
+"    \t\tsubstitution.  The first character is the history\n"
+"    \t\tsubstitution character, usually ‘!’.  The second is\n"
+"    \t\tthe ‘quick substitution’ character, usually ‘^’.  The\n"
+"    \t\tthird is the ‘history comment’ character, usually ‘#’.\n"
+"    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
+"    \t\tcommands should be saved on the history list.\n"
+
+#: builtins.c:1292
+msgid ""
+" Adds a directory to the top of the directory stack, or rotates\n"
+"    the stack, making the new top of the stack the current working\n"
+"    directory.  With no arguments, exchanges the top two directories.\n"
+"    \n"
+"    +N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the left of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the right of the list shown by `dirs', starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when adding directories\n"
+"    \tto the stack, so only the stack is manipulated.\n"
+"    \n"
+"    dir\tadds DIR to the directory stack at the top, making it the\n"
+"    \tnew current working directory.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
+msgstr ""
+" Adds a directory to the top of the directory stack, or rotates\n"
+"    the stack, making the new top of the stack the current working\n"
+"    directory.  With no arguments, exchanges the top two directories.\n"
+"    \n"
+"    +N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the left of the list shown by ‘dirs’, starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -N\tRotates the stack so that the Nth directory (counting\n"
+"    \tfrom the right of the list shown by ‘dirs’, starting with\n"
+"    \tzero) is at the top.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when adding directories\n"
+"    \tto the stack, so only the stack is manipulated.\n"
+"    \n"
+"    dir\tadds DIR to the directory stack at the top, making it the\n"
+"    \tnew current working directory.\n"
+"    \n"
+"    You can see the directory stack with the ‘dirs’ command."
 
-#: builtins.c:565
-msgid "the last command."
-msgstr "the last command."
+#: builtins.c:1318
+msgid ""
+" Removes entries from the directory stack.  With no arguments,\n"
+"    removes the top directory from the stack, and cd's to the new\n"
+"    top directory.\n"
+"    \n"
+"    +N\tremoves the Nth entry counting from the left of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd +0'\n"
+"    \tremoves the first directory, `popd +1' the second.\n"
+"    \n"
+"    -N\tremoves the Nth entry counting from the right of the list\n"
+"    \tshown by `dirs', starting with zero.  For example: `popd -0'\n"
+"    \tremoves the last directory, `popd -1' the next to last.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when removing directories\n"
+"    \tfrom the stack, so only the stack is manipulated.\n"
+"    \n"
+"    You can see the directory stack with the `dirs' command."
+msgstr ""
+" Removes entries from the directory stack.  With no arguments,\n"
+"    removes the top directory from the stack, and cd's to the new\n"
+"    top directory.\n"
+"    \n"
+"    +N\tremoves the Nth entry counting from the left of the list\n"
+"    \tshown by ‘dirs’, starting with zero.  For example: ‘popd +0’\n"
+"    \tremoves the first directory, ‘popd +1’ the second.\n"
+"    \n"
+"    -N\tremoves the Nth entry counting from the right of the list\n"
+"    \tshown by ‘dirs’, starting with zero.  For example: ‘popd -0’\n"
+"    \tremoves the last directory, ‘popd -1’ the next to last.\n"
+"    \n"
+"    -n\tsuppress the normal change of directory when removing directories\n"
+"    \tfrom the stack, so only the stack is manipulated.\n"
+"    \n"
+"    You can see the directory stack with the ‘dirs’ command."
 
-#: builtins.c:573
-msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-msgstr "Place JOB_SPEC in the foreground, and make it the current job.  If"
+#: builtins.c:1341
+msgid ""
+" Display the list of currently remembered directories.  Directories\n"
+"    find their way onto the list with the `pushd' command; you can get\n"
+"    back up through the list with the `popd' command.\n"
+"    \n"
+"    The -l flag specifies that `dirs' should not print shorthand versions\n"
+"    of directories which are relative to your home directory.  This means\n"
+"    that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag\n"
+"    causes `dirs' to print the directory stack with one entry per line,\n"
+"    prepending the directory name with its position in the stack.  The -p\n"
+"    flag does the same thing, but the stack position is not prepended.\n"
+"    The -c flag clears the directory stack by deleting all of the elements.\n"
+"    \n"
+"    +N\tdisplays the Nth entry counting from the left of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero.\n"
+"    \n"
+"    -N\tdisplays the Nth entry counting from the right of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero."
+msgstr ""
+" Display the list of currently remembered directories.  Directories\n"
+"    find their way onto the list with the ‘pushd’ command; you can get\n"
+"    back up through the list with the ‘popd’ command.\n"
+"    \n"
+"    The -l flag specifies that ‘dirs’ should not print shorthand versions\n"
+"    of directories which are relative to your home directory.  This means\n"
+"    that ‘~/bin’ might be displayed as ‘/homes/bfox/bin’.  The -v flag\n"
+"    causes ‘dirs’ to print the directory stack with one entry per line,\n"
+"    prepending the directory name with its position in the stack.  The -p\n"
+"    flag does the same thing, but the stack position is not prepended.\n"
+"    The -c flag clears the directory stack by deleting all of the elements.\n"
+"    \n"
+"    +N\tdisplays the Nth entry counting from the left of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero.\n"
+"    \n"
+"    -N\tdisplays the Nth entry counting from the right of the list shown by\n"
+"    \tdirs when invoked without options, starting with zero."
+
+#: builtins.c:1364
+msgid ""
+" Toggle the values of variables controlling optional behavior.\n"
+"    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
+"    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
+"    status indicates whether each OPTNAME is set or unset.  The -o\n"
+"    option restricts the OPTNAMEs to those defined for use with\n"
+"    `set -o'.  With no options, or with the -p option, a list of all\n"
+"    settable options is displayed, with an indication of whether or\n"
+"    not each is set."
+msgstr ""
+" Toggle the values of variables controlling optional behavior.\n"
+"    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
+"    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
+"    status indicates whether each OPTNAME is set or unset.  The -o\n"
+"    option restricts the OPTNAMEs to those defined for use with\n"
+"    ‘set -o’.  With no options, or with the -p option, a list of all\n"
+"    settable options is displayed, with an indication of whether or\n"
+"    not each is set."
 
-#: builtins.c:574
-msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-msgstr "JOB_SPEC is not present, the shell's notion of the current job is"
+#: builtins.c:1377
+msgid ""
+" printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT\n"
+"    is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output, character "
+"escape\n"
+"    sequences which are converted and copied to the standard output, and\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
+"    argument.  In addition to the standard printf(1) formats, %b means to\n"
+"    expand backslash escape sequences in the corresponding argument, and %q\n"
+"    means to quote the argument in a way that can be reused as shell input.\n"
+"    If the -v option is supplied, the output is placed into the value of "
+"the\n"
+"    shell variable VAR rather than being sent to the standard output."
+msgstr ""
+" printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT\n"
+"    is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output, character "
+"escape\n"
+"    sequences which are converted and copied to the standard output, and\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
+"    argument.  In addition to the standard printf(1) formats, %b means to\n"
+"    expand backslash escape sequences in the corresponding argument, and %q\n"
+"    means to quote the argument in a way that can be reused as shell input.\n"
+"    If the -v option is supplied, the output is placed into the value of "
+"the\n"
+"    shell variable VAR rather than being sent to the standard output."
 
-#: builtins.c:575
-msgid "used."
-msgstr "used."
-
-#: builtins.c:583
-msgid "Place JOB_SPEC in the background, as if it had been started with"
-msgstr "Place JOB_SPEC in the background, as if it had been started with"
-
-#: builtins.c:584
-msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-msgstr "‘&’.  If JOB_SPEC is not present, the shell's notion of the current"
-
-#: builtins.c:585
-msgid "job is used."
-msgstr "job is used."
-
-#: builtins.c:592
-msgid "For each NAME, the full pathname of the command is determined and"
-msgstr "For each NAME, the full pathname of the command is determined and"
-
-#: builtins.c:593
-msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-msgstr "remembered.  If the -p option is supplied, PATHNAME is used as the"
-
-#: builtins.c:594
-msgid "full pathname of NAME, and no path search is performed.  The -r"
-msgstr "full pathname of NAME, and no path search is performed.  The -r"
-
-#: builtins.c:595
-msgid "option causes the shell to forget all remembered locations.  The -d"
-msgstr "option causes the shell to forget all remembered locations.  The -d"
-
-#: builtins.c:596
-msgid "option causes the shell to forget the remembered location of each NAME."
-msgstr ""
-"option causes the shell to forget the remembered location of each NAME."
-
-#: builtins.c:597
-msgid "If the -t option is supplied the full pathname to which each NAME"
-msgstr "If the -t option is supplied the full pathname to which each NAME"
-
-#: builtins.c:598
-msgid "corresponds is printed.  If multiple NAME arguments are supplied with"
-msgstr "corresponds is printed.  If multiple NAME arguments are supplied with"
-
-#: builtins.c:599
-msgid "-t, the NAME is printed before the hashed full pathname.  The -l option"
-msgstr ""
-"-t, the NAME is printed before the hashed full pathname.  The -l option"
-
-#: builtins.c:600
-msgid "causes output to be displayed in a format that may be reused as input."
-msgstr "causes output to be displayed in a format that may be reused as input."
-
-#: builtins.c:601
-msgid ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-msgstr ""
-"If no arguments are given, information about remembered commands is "
-"displayed."
-
-#: builtins.c:608
-msgid "Display helpful information about builtin commands.  If PATTERN is"
-msgstr "Display helpful information about builtin commands.  If PATTERN is"
-
-#: builtins.c:609
-msgid "specified, gives detailed help on all commands matching PATTERN,"
-msgstr "specified, gives detailed help on all commands matching PATTERN,"
-
-#: builtins.c:610
-msgid "otherwise a list of the builtins is printed.  The -s option"
-msgstr "otherwise a list of the builtins is printed.  The -s option"
-
-#: builtins.c:611
-msgid "restricts the output for each builtin command matching PATTERN to"
-msgstr "restricts the output for each builtin command matching PATTERN to"
-
-#: builtins.c:612
-msgid "a short usage synopsis."
-msgstr "a short usage synopsis."
-
-#: builtins.c:620
-msgid "Display the history list with line numbers.  Lines listed with"
-msgstr "Display the history list with line numbers.  Lines listed with"
-
-#: builtins.c:621
-msgid "with a `*' have been modified.  Argument of N says to list only"
-msgstr "with a ‘*’ have been modified.  Argument of N says to list only"
-
-#: builtins.c:622
-msgid "the last N lines.  The `-c' option causes the history list to be"
-msgstr "the last N lines.  The ‘-c’ option causes the history list to be"
-
-#: builtins.c:623
-msgid "cleared by deleting all of the entries.  The `-d' option deletes"
-msgstr "cleared by deleting all of the entries.  The ‘-d’ option deletes"
-
-#: builtins.c:624
-msgid "the history entry at offset OFFSET.  The `-w' option writes out the"
-msgstr "the history entry at offset OFFSET.  The ‘-w’ option writes out the"
-
-#: builtins.c:625
-msgid "current history to the history file;  `-r' means to read the file and"
-msgstr "current history to the history file;  ‘-r’ means to read the file and"
-
-#: builtins.c:626
-msgid "append the contents to the history list instead.  `-a' means"
-msgstr "append the contents to the history list instead.  ‘-a’ means"
-
-#: builtins.c:627
-msgid "to append history lines from this session to the history file."
-msgstr "to append history lines from this session to the history file."
-
-#: builtins.c:628
-msgid "Argument `-n' means to read all history lines not already read"
-msgstr "Argument ‘-n’ means to read all history lines not already read"
-
-#: builtins.c:629
-msgid "from the history file and append them to the history list."
-msgstr "from the history file and append them to the history list."
-
-#: builtins.c:631
-msgid "If FILENAME is given, then that is used as the history file else"
-msgstr "If FILENAME is given, then that is used as the history file else"
-
-#: builtins.c:632
-msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-msgstr "if $HISTFILE has a value, that is used, else ~/.bash_history."
-
-#: builtins.c:633
-msgid "If the -s option is supplied, the non-option ARGs are appended to"
-msgstr "If the -s option is supplied, the non-option ARGs are appended to"
-
-#: builtins.c:634
-msgid "the history list as a single entry.  The -p option means to perform"
-msgstr "the history list as a single entry.  The -p option means to perform"
-
-#: builtins.c:635
-msgid "history expansion on each ARG and display the result, without storing"
-msgstr "history expansion on each ARG and display the result, without storing"
-
-#: builtins.c:636
-msgid "anything in the history list."
-msgstr "anything in the history list."
-
-#: builtins.c:638
-msgid "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-msgstr "If the $HISTTIMEFORMAT variable is set and not null, its value is used"
-
-#: builtins.c:639
-msgid "as a format string for strftime(3) to print the time stamp associated"
-msgstr "as a format string for strftime(3) to print the time stamp associated"
-
-#: builtins.c:640
-msgid ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-msgstr ""
-"with each displayed history entry.  No time stamps are printed otherwise."
-
-#: builtins.c:648
-msgid "Lists the active jobs.  The -l option lists process id's in addition"
-msgstr "Lists the active jobs.  The -l option lists process id's in addition"
-
-#: builtins.c:649
-msgid "to the normal information; the -p option lists process id's only."
-msgstr "to the normal information; the -p option lists process id's only."
-
-#: builtins.c:650
-msgid "If -n is given, only processes that have changed status since the last"
-msgstr "If -n is given, only processes that have changed status since the last"
-
-#: builtins.c:651
-msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-msgstr "notification are printed.  JOBSPEC restricts output to that job.  The"
-
-#: builtins.c:652
-msgid "-r and -s options restrict output to running and stopped jobs only,"
-msgstr "-r and -s options restrict output to running and stopped jobs only,"
-
-#: builtins.c:653
-msgid "respectively.  Without options, the status of all active jobs is"
-msgstr "respectively.  Without options, the status of all active jobs is"
-
-#: builtins.c:654
-msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-msgstr "printed.  If -x is given, COMMAND is run after all job specifications"
-
-#: builtins.c:655
-msgid ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-msgstr ""
-"that appear in ARGS have been replaced with the process ID of that job's"
-
-#: builtins.c:656
-msgid "process group leader."
-msgstr "process group leader."
-
-#: builtins.c:664
-msgid ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-msgstr ""
-"By default, removes each JOBSPEC argument from the table of active jobs."
-
-#: builtins.c:665
-msgid ""
-"If the -h option is given, the job is not removed from the table, but is"
-msgstr ""
-"If the -h option is given, the job is not removed from the table, but is"
-
-#: builtins.c:666
-msgid "marked so that SIGHUP is not sent to the job if the shell receives a"
-msgstr "marked so that SIGHUP is not sent to the job if the shell receives a"
-
-#: builtins.c:667
-msgid ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-msgstr ""
-"SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all"
-
-#: builtins.c:668
-msgid ""
-"jobs from the job table; the -r option means to remove only running jobs."
-msgstr ""
-"jobs from the job table; the -r option means to remove only running jobs."
-
-#: builtins.c:675
-msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-msgstr "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-
-#: builtins.c:676
-msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-msgstr "SIGSPEC is not present, then SIGTERM is assumed.  An argument of ‘-l’"
-
-#: builtins.c:677
-msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-msgstr "lists the signal names; if arguments follow ‘-l’ they are assumed to"
-
-#: builtins.c:678
-msgid "be signal numbers for which names should be listed.  Kill is a shell"
-msgstr "be signal numbers for which names should be listed.  Kill is a shell"
-
-#: builtins.c:679
-msgid "builtin for two reasons: it allows job IDs to be used instead of"
-msgstr "builtin for two reasons: it allows job IDs to be used instead of"
-
-#: builtins.c:680
-msgid "process IDs, and, if you have reached the limit on processes that"
-msgstr "process IDs, and, if you have reached the limit on processes that"
-
-#: builtins.c:681
-msgid "you can create, you don't have to start a process to kill another one."
-msgstr "you can create, you don't have to start a process to kill another one."
-
-#: builtins.c:687
-msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-msgstr "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-
-#: builtins.c:688
-msgid "is done in fixed-width integers with no check for overflow, though"
-msgstr "is done in fixed-width integers with no check for overflow, though"
-
-#: builtins.c:689
-msgid "division by 0 is trapped and flagged as an error.  The following"
-msgstr "division by 0 is trapped and flagged as an error.  The following"
-
-#: builtins.c:690
-msgid "list of operators is grouped into levels of equal-precedence operators."
-msgstr ""
-"list of operators is grouped into levels of equal-precedence operators."
-
-#: builtins.c:691
-msgid "The levels are listed in order of decreasing precedence."
-msgstr "The levels are listed in order of decreasing precedence."
-
-#: builtins.c:693
-msgid "\tid++, id--\tvariable post-increment, post-decrement"
-msgstr "\tid++, id--\tvariable post-increment, post-decrement"
-
-#: builtins.c:694
-msgid "\t++id, --id\tvariable pre-increment, pre-decrement"
-msgstr "\t++id, --id\tvariable pre-increment, pre-decrement"
-
-#: builtins.c:695
-msgid "\t-, +\t\tunary minus, plus"
-msgstr "\t-, +\t\tunary minus, plus"
-
-#: builtins.c:696
-msgid "\t!, ~\t\tlogical and bitwise negation"
-msgstr "\t!, ~\t\tlogical and bitwise negation"
-
-#: builtins.c:697
-msgid "\t**\t\texponentiation"
-msgstr "\t**\t\texponentiation"
-
-#: builtins.c:698
-msgid "\t*, /, %\t\tmultiplication, division, remainder"
-msgstr "\t*, /, %\t\tmultiplication, division, remainder"
-
-#: builtins.c:699
-msgid "\t+, -\t\taddition, subtraction"
-msgstr "\t+, -\t\taddition, subtraction"
-
-#: builtins.c:700
-msgid "\t<<, >>\t\tleft and right bitwise shifts"
-msgstr "\t<<, >>\t\tleft and right bitwise shifts"
-
-#: builtins.c:701
-msgid "\t<=, >=, <, >\tcomparison"
-msgstr "\t<=, >=, <, >\tcomparison"
-
-#: builtins.c:702
-msgid "\t==, !=\t\tequality, inequality"
-msgstr "\t==, !=\t\tequality, inequality"
-
-#: builtins.c:703
-msgid "\t&\t\tbitwise AND"
-msgstr "\t&\t\tbitwise AND"
-
-#: builtins.c:704
-msgid "\t^\t\tbitwise XOR"
-msgstr "\t^\t\tbitwise XOR"
-
-#: builtins.c:705
-msgid "\t|\t\tbitwise OR"
-msgstr "\t|\t\tbitwise OR"
-
-#: builtins.c:706
-msgid "\t&&\t\tlogical AND"
-msgstr "\t&&\t\tlogical AND"
-
-#: builtins.c:707
-msgid "\t||\t\tlogical OR"
-msgstr "\t||\t\tlogical OR"
-
-#: builtins.c:708
-msgid "\texpr ? expr : expr"
-msgstr "\texpr ? expr : expr"
-
-#: builtins.c:709
-msgid "\t\t\tconditional operator"
-msgstr "\t\t\tconditional operator"
-
-#: builtins.c:710
-msgid "\t=, *=, /=, %=,"
-msgstr "\t=, *=, /=, %=,"
-
-#: builtins.c:711
-msgid "\t+=, -=, <<=, >>=,"
-msgstr "\t+=, -=, <<=, >>=,"
-
-#: builtins.c:712
-msgid "\t&=, ^=, |=\tassignment"
-msgstr "\t&=, ^=, |=\tassignment"
-
-#: builtins.c:714
-msgid "Shell variables are allowed as operands.  The name of the variable"
-msgstr "Shell variables are allowed as operands.  The name of the variable"
-
-#: builtins.c:715
-msgid "is replaced by its value (coerced to a fixed-width integer) within"
-msgstr "is replaced by its value (coerced to a fixed-width integer) within"
-
-#: builtins.c:716
-msgid "an expression.  The variable need not have its integer attribute"
-msgstr "an expression.  The variable need not have its integer attribute"
-
-#: builtins.c:717
-msgid "turned on to be used in an expression."
-msgstr "turned on to be used in an expression."
-
-#: builtins.c:719
-msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-msgstr "Operators are evaluated in order of precedence.  Sub-expressions in"
-
-#: builtins.c:720
-msgid "parentheses are evaluated first and may override the precedence"
-msgstr "parentheses are evaluated first and may override the precedence"
-
-#: builtins.c:721
-msgid "rules above."
-msgstr "rules above."
-
-#: builtins.c:723
-msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-msgstr "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-
-#: builtins.c:724
-msgid "otherwise."
-msgstr "otherwise."
-
-#: builtins.c:730
-msgid ""
-"One line is read from the standard input, or from file descriptor FD if the"
-msgstr ""
-"One line is read from the standard input, or from file descriptor FD if the"
-
-#: builtins.c:731
-msgid ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-msgstr ""
-"-u option is supplied, and the first word is assigned to the first NAME,"
-
-#: builtins.c:732
-msgid ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-msgstr ""
-"the second word to the second NAME, and so on, with leftover words assigned"
-
-#: builtins.c:733
-msgid ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-msgstr ""
-"to the last NAME.  Only the characters found in $IFS are recognized as word"
-
-#: builtins.c:734
-msgid ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-msgstr ""
-"delimiters.  If no NAMEs are supplied, the line read is stored in the REPLY"
-
-#: builtins.c:735
-msgid "variable.  If the -r option is given, this signifies `raw' input, and"
-msgstr "variable.  If the -r option is given, this signifies ‘raw’ input, and"
-
-#: builtins.c:736
-msgid "backslash escaping is disabled.  The -d option causes read to continue"
-msgstr "backslash escaping is disabled.  The -d option causes read to continue"
-
-#: builtins.c:737
-msgid ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-msgstr ""
-"until the first character of DELIM is read, rather than newline.  If the -p"
-
-#: builtins.c:738
-msgid ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-msgstr ""
-"option is supplied, the string PROMPT is output without a trailing newline"
-
-#: builtins.c:739
-msgid ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-msgstr ""
-"before attempting to read.  If -a is supplied, the words read are assigned"
-
-#: builtins.c:740
-msgid ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-msgstr ""
-"to sequential indices of ARRAY, starting at zero.  If -e is supplied and"
-
-#: builtins.c:741
-msgid ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-msgstr ""
-"the shell is interactive, readline is used to obtain the line.  If -n is"
-
-#: builtins.c:742
-msgid "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-msgstr "supplied with a non-zero NCHARS argument, read returns after NCHARS"
-
-#: builtins.c:743
-msgid "characters have been read.  The -s option causes input coming from a"
-msgstr "characters have been read.  The -s option causes input coming from a"
-
-#: builtins.c:744
-msgid "terminal to not be echoed."
-msgstr "terminal to not be echoed."
-
-#: builtins.c:746
-msgid ""
-"The -t option causes read to time out and return failure if a complete line"
-msgstr ""
-"The -t option causes read to time out and return failure if a complete line"
-
-#: builtins.c:747
-msgid ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-msgstr ""
-"of input is not read within TIMEOUT seconds.  If the TMOUT variable is set,"
-
-#: builtins.c:748
-msgid ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-msgstr ""
-"its value is the default timeout.  The return code is zero, unless end-of-"
-"file"
-
-#: builtins.c:749
-msgid ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-msgstr ""
-"is encountered, read times out, or an invalid file descriptor is supplied as"
-
-#: builtins.c:750
-msgid "the argument to -u."
-msgstr "the argument to -u."
-
-#: builtins.c:756
-msgid "Causes a function to exit with the return value specified by N.  If N"
-msgstr "Causes a function to exit with the return value specified by N.  If N"
-
-#: builtins.c:757
-msgid "is omitted, the return status is that of the last command."
-msgstr "is omitted, the return status is that of the last command."
-
-#: builtins.c:763
-msgid "    -a  Mark variables which are modified or created for export."
-msgstr "    -a  Mark variables which are modified or created for export."
-
-#: builtins.c:764
-msgid "    -b  Notify of job termination immediately."
-msgstr "    -b  Notify of job termination immediately."
-
-#: builtins.c:765
-msgid "    -e  Exit immediately if a command exits with a non-zero status."
-msgstr "    -e  Exit immediately if a command exits with a non-zero status."
-
-#: builtins.c:766
-msgid "    -f  Disable file name generation (globbing)."
-msgstr "    -f  Disable file name generation (globbing)."
-
-#: builtins.c:767
-msgid "    -h  Remember the location of commands as they are looked up."
-msgstr "    -h  Remember the location of commands as they are looked up."
-
-#: builtins.c:768
-msgid "    -k  All assignment arguments are placed in the environment for a"
-msgstr "    -k  All assignment arguments are placed in the environment for a"
-
-#: builtins.c:769
-msgid "        command, not just those that precede the command name."
-msgstr "        command, not just those that precede the command name."
-
-#: builtins.c:770
-msgid "    -m  Job control is enabled."
-msgstr "    -m  Job control is enabled."
-
-#: builtins.c:771
-msgid "    -n  Read commands but do not execute them."
-msgstr "    -n  Read commands but do not execute them."
-
-#: builtins.c:772
-msgid "    -o option-name"
-msgstr "    -o option-name"
-
-#: builtins.c:773
-msgid "        Set the variable corresponding to option-name:"
-msgstr "        Set the variable corresponding to option-name:"
-
-#: builtins.c:774
-msgid "            allexport    same as -a"
-msgstr "            allexport    same as -a"
-
-#: builtins.c:775
-msgid "            braceexpand  same as -B"
-msgstr "            braceexpand  same as -B"
-
-#: builtins.c:777
-msgid "            emacs        use an emacs-style line editing interface"
-msgstr "            emacs        use an emacs-style line editing interface"
-
-#: builtins.c:779
-msgid "            errexit      same as -e"
-msgstr "            errexit      same as -e"
-
-#: builtins.c:780
-msgid "            errtrace     same as -E"
-msgstr "            errtrace     same as -E"
-
-#: builtins.c:781
-msgid "            functrace    same as -T"
-msgstr "            functrace    same as -T"
-
-#: builtins.c:782
-msgid "            hashall      same as -h"
-msgstr "            hashall      same as -h"
-
-#: builtins.c:784
-msgid "            histexpand   same as -H"
-msgstr "            histexpand   same as -H"
-
-#: builtins.c:787
-msgid "            history      enable command history"
-msgstr "            history      enable command history"
-
-#: builtins.c:789
-msgid "            ignoreeof    the shell will not exit upon reading EOF"
-msgstr "            ignoreeof    the shell will not exit upon reading EOF"
-
-#: builtins.c:790
-msgid "            interactive-comments"
-msgstr "            interactive-comments"
-
-#: builtins.c:791
-msgid ""
-"                         allow comments to appear in interactive commands"
-msgstr ""
-"                         allow comments to appear in interactive commands"
-
-#: builtins.c:792
-msgid "            keyword      same as -k"
-msgstr "            keyword      same as -k"
-
-#: builtins.c:793
-msgid "            monitor      same as -m"
-msgstr "            monitor      same as -m"
-
-#: builtins.c:794
-msgid "            noclobber    same as -C"
-msgstr "            noclobber    same as -C"
-
-#: builtins.c:795
-msgid "            noexec       same as -n"
-msgstr "            noexec       same as -n"
-
-#: builtins.c:796
-msgid "            noglob       same as -f"
-msgstr "            noglob       same as -f"
-
-#: builtins.c:797
-msgid "            nolog        currently accepted but ignored"
-msgstr "            nolog        currently accepted but ignored"
-
-#: builtins.c:798
-msgid "            notify       same as -b"
-msgstr "            notify       same as -b"
-
-#: builtins.c:799
-msgid "            nounset      same as -u"
-msgstr "            nounset      same as -u"
-
-#: builtins.c:800
-msgid "            onecmd       same as -t"
-msgstr "            onecmd       same as -t"
-
-#: builtins.c:801
-msgid "            physical     same as -P"
-msgstr "            physical     same as -P"
-
-#: builtins.c:802
-msgid ""
-"            pipefail     the return value of a pipeline is the status of"
-msgstr ""
-"            pipefail     the return value of a pipeline is the status of"
-
-#: builtins.c:803
-msgid ""
-"                         the last command to exit with a non-zero status,"
-msgstr ""
-"                         the last command to exit with a non-zero status,"
-
-#: builtins.c:804
-msgid ""
-"                         or zero if no command exited with a non-zero status"
-msgstr ""
-"                         or zero if no command exited with a non-zero status"
-
-#: builtins.c:805
-msgid "            posix        change the behavior of bash where the default"
-msgstr "            posix        change the behavior of bash where the default"
-
-#: builtins.c:806
-msgid "                         operation differs from the 1003.2 standard to"
-msgstr "                         operation differs from the 1003.2 standard to"
-
-#: builtins.c:807
-msgid "                         match the standard"
-msgstr "                         match the standard"
-
-#: builtins.c:808
-msgid "            privileged   same as -p"
-msgstr "            privileged   same as -p"
-
-#: builtins.c:809
-msgid "            verbose      same as -v"
-msgstr "            verbose      same as -v"
-
-#: builtins.c:811
-msgid "            vi           use a vi-style line editing interface"
-msgstr "            vi           use a vi-style line editing interface"
-
-#: builtins.c:813
-msgid "            xtrace       same as -x"
-msgstr "            xtrace       same as -x"
-
-#: builtins.c:814
-msgid ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-msgstr ""
-"    -p  Turned on whenever the real and effective user ids do not match."
-
-#: builtins.c:815
-msgid "        Disables processing of the $ENV file and importing of shell"
-msgstr "        Disables processing of the $ENV file and importing of shell"
-
-#: builtins.c:816
-msgid ""
-"        functions.  Turning this option off causes the effective uid and"
-msgstr ""
-"        functions.  Turning this option off causes the effective uid and"
-
-#: builtins.c:817
-msgid "        gid to be set to the real uid and gid."
-msgstr "        gid to be set to the real uid and gid."
-
-#: builtins.c:818
-msgid "    -t  Exit after reading and executing one command."
-msgstr "    -t  Exit after reading and executing one command."
-
-#: builtins.c:819
-msgid "    -u  Treat unset variables as an error when substituting."
-msgstr "    -u  Treat unset variables as an error when substituting."
-
-#: builtins.c:820
-msgid "    -v  Print shell input lines as they are read."
-msgstr "    -v  Print shell input lines as they are read."
-
-#: builtins.c:821
-msgid "    -x  Print commands and their arguments as they are executed."
-msgstr "    -x  Print commands and their arguments as they are executed."
-
-#: builtins.c:823
-msgid "    -B  the shell will perform brace expansion"
-msgstr "    -B  the shell will perform brace expansion"
-
-#: builtins.c:825
-msgid "    -C  If set, disallow existing regular files to be overwritten"
-msgstr "    -C  If set, disallow existing regular files to be overwritten"
-
-#: builtins.c:826
-msgid "        by redirection of output."
-msgstr "        by redirection of output."
-
-#: builtins.c:827
-msgid "    -E  If set, the ERR trap is inherited by shell functions."
-msgstr "    -E  If set, the ERR trap is inherited by shell functions."
-
-#: builtins.c:829
-msgid "    -H  Enable ! style history substitution.  This flag is on"
-msgstr "    -H  Enable ! style history substitution.  This flag is on"
-
-#: builtins.c:830
-msgid "        by default."
-msgstr "        by default."
-
-#: builtins.c:832
-msgid "    -P  If set, do not follow symbolic links when executing commands"
-msgstr "    -P  If set, do not follow symbolic links when executing commands"
-
-#: builtins.c:833
-msgid "        such as cd which change the current directory."
-msgstr "        such as cd which change the current directory."
-
-#: builtins.c:834
-msgid "    -T  If set, the DEBUG trap is inherited by shell functions."
-msgstr "    -T  If set, the DEBUG trap is inherited by shell functions."
-
-#: builtins.c:836
-msgid "Using + rather than - causes these flags to be turned off.  The"
-msgstr "Using + rather than - causes these flags to be turned off.  The"
-
-#: builtins.c:837
-msgid "flags can also be used upon invocation of the shell.  The current"
-msgstr "flags can also be used upon invocation of the shell.  The current"
-
-#: builtins.c:838
-msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
-msgstr "set of flags may be found in $-.  The remaining n ARGs are positional"
-
-#: builtins.c:839
-msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-msgstr "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-
-#: builtins.c:840
-msgid "ARGs are given, all shell variables are printed."
-msgstr "ARGs are given, all shell variables are printed."
-
-#: builtins.c:846
-msgid "For each NAME, remove the corresponding variable or function.  Given"
-msgstr "For each NAME, remove the corresponding variable or function.  Given"
-
-#: builtins.c:847
-msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-msgstr "the ‘-v’, unset will only act on variables.  Given the ‘-f’ flag,"
-
-#: builtins.c:848
-msgid "unset will only act on functions.  With neither flag, unset first"
-msgstr "unset will only act on functions.  With neither flag, unset first"
-
-#: builtins.c:849
-msgid "tries to unset a variable, and if that fails, then tries to unset a"
-msgstr "tries to unset a variable, and if that fails, then tries to unset a"
-
-#: builtins.c:850
-msgid "function.  Some variables cannot be unset; also see readonly."
-msgstr "function.  Some variables cannot be unset; also see readonly."
-
-#: builtins.c:856
-msgid "NAMEs are marked for automatic export to the environment of"
-msgstr "NAMEs are marked for automatic export to the environment of"
-
-#: builtins.c:857
-msgid "subsequently executed commands.  If the -f option is given,"
-msgstr "subsequently executed commands.  If the -f option is given,"
-
-#: builtins.c:858
-msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-msgstr "the NAMEs refer to functions.  If no NAMEs are given, or if ‘-p’"
-
-#: builtins.c:859
-msgid "is given, a list of all names that are exported in this shell is"
-msgstr "is given, a list of all names that are exported in this shell is"
-
-#: builtins.c:860
-msgid "printed.  An argument of `-n' says to remove the export property"
-msgstr "printed.  An argument of ‘-n’ says to remove the export property"
-
-#: builtins.c:861
-msgid "from subsequent NAMEs.  An argument of `--' disables further option"
-msgstr "from subsequent NAMEs.  An argument of ‘--’ disables further option"
-
-#: builtins.c:862 builtins.c:874
-msgid "processing."
-msgstr "processing."
-
-#: builtins.c:868
-msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-msgstr "The given NAMEs are marked readonly and the values of these NAMEs may"
-
-#: builtins.c:869
-msgid "not be changed by subsequent assignment.  If the -f option is given,"
-msgstr "not be changed by subsequent assignment.  If the -f option is given,"
-
-#: builtins.c:870
-msgid "then functions corresponding to the NAMEs are so marked.  If no"
-msgstr "then functions corresponding to the NAMEs are so marked.  If no"
-
-#: builtins.c:871
-msgid "arguments are given, or if `-p' is given, a list of all readonly names"
-msgstr "arguments are given, or if ‘-p’ is given, a list of all readonly names"
-
-#: builtins.c:872
-msgid "is printed.  The `-a' option means to treat each NAME as"
-msgstr "is printed.  The ‘-a’ option means to treat each NAME as"
-
-#: builtins.c:873
-msgid "an array variable.  An argument of `--' disables further option"
-msgstr "an array variable.  An argument of ‘--’ disables further option"
-
-#: builtins.c:880
-msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-msgstr "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-
-#: builtins.c:881
-msgid "not given, it is assumed to be 1."
-msgstr "not given, it is assumed to be 1."
-
-#: builtins.c:887 builtins.c:896
-msgid "Read and execute commands from FILENAME and return.  The pathnames"
-msgstr "Read and execute commands from FILENAME and return.  The pathnames"
-
-#: builtins.c:888 builtins.c:897
-msgid "in $PATH are used to find the directory containing FILENAME.  If any"
-msgstr "in $PATH are used to find the directory containing FILENAME.  If any"
-
-#: builtins.c:889 builtins.c:898
-msgid "ARGUMENTS are supplied, they become the positional parameters when"
-msgstr "ARGUMENTS are supplied, they become the positional parameters when"
-
-#: builtins.c:890 builtins.c:899
-msgid "FILENAME is executed."
-msgstr "FILENAME is executed."
-
-#: builtins.c:906
-msgid "Suspend the execution of this shell until it receives a SIGCONT"
-msgstr "Suspend the execution of this shell until it receives a SIGCONT"
-
-#: builtins.c:907
-msgid "signal.  The `-f' if specified says not to complain about this"
-msgstr "signal.  The ‘-f’ if specified says not to complain about this"
-
-#: builtins.c:908
-msgid "being a login shell if it is; just suspend anyway."
-msgstr "being a login shell if it is; just suspend anyway."
-
-#: builtins.c:915
-msgid "Exits with a status of 0 (true) or 1 (false) depending on"
-msgstr "Exits with a status of 0 (true) or 1 (false) depending on"
-
-#: builtins.c:916
-msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-msgstr "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-
-#: builtins.c:917
-msgid "expressions are often used to examine the status of a file.  There"
-msgstr "expressions are often used to examine the status of a file.  There"
-
-#: builtins.c:918
-msgid "are string operators as well, and numeric comparison operators."
-msgstr "are string operators as well, and numeric comparison operators."
-
-#: builtins.c:920
-msgid "File operators:"
-msgstr "File operators:"
-
-#: builtins.c:922
-msgid "    -a FILE        True if file exists."
-msgstr "    -a FILE        True if file exists."
-
-#: builtins.c:923
-msgid "    -b FILE        True if file is block special."
-msgstr "    -b FILE        True if file is block special."
-
-#: builtins.c:924
-msgid "    -c FILE        True if file is character special."
-msgstr "    -c FILE        True if file is character special."
-
-#: builtins.c:925
-msgid "    -d FILE        True if file is a directory."
-msgstr "    -d FILE        True if file is a directory."
-
-#: builtins.c:926
-msgid "    -e FILE        True if file exists."
-msgstr "    -e FILE        True if file exists."
-
-#: builtins.c:927
-msgid "    -f FILE        True if file exists and is a regular file."
-msgstr "    -f FILE        True if file exists and is a regular file."
-
-#: builtins.c:928
-msgid "    -g FILE        True if file is set-group-id."
-msgstr "    -g FILE        True if file is set-group-id."
-
-#: builtins.c:929
-msgid "    -h FILE        True if file is a symbolic link."
-msgstr "    -h FILE        True if file is a symbolic link."
-
-#: builtins.c:930
-msgid "    -L FILE        True if file is a symbolic link."
-msgstr "    -L FILE        True if file is a symbolic link."
-
-#: builtins.c:931
-msgid "    -k FILE        True if file has its `sticky' bit set."
-msgstr "    -k FILE        True if file has its ‘sticky’ bit set."
-
-#: builtins.c:932
-msgid "    -p FILE        True if file is a named pipe."
-msgstr "    -p FILE        True if file is a named pipe."
-
-#: builtins.c:933
-msgid "    -r FILE        True if file is readable by you."
-msgstr "    -r FILE        True if file is readable by you."
-
-#: builtins.c:934
-msgid "    -s FILE        True if file exists and is not empty."
-msgstr "    -s FILE        True if file exists and is not empty."
-
-#: builtins.c:935
-msgid "    -S FILE        True if file is a socket."
-msgstr "    -S FILE        True if file is a socket."
-
-#: builtins.c:936
-msgid "    -t FD          True if FD is opened on a terminal."
-msgstr "    -t FD          True if FD is opened on a terminal."
-
-#: builtins.c:937
-msgid "    -u FILE        True if the file is set-user-id."
-msgstr "    -u FILE        True if the file is set-user-id."
-
-#: builtins.c:938
-msgid "    -w FILE        True if the file is writable by you."
-msgstr "    -w FILE        True if the file is writable by you."
-
-#: builtins.c:939
-msgid "    -x FILE        True if the file is executable by you."
-msgstr "    -x FILE        True if the file is executable by you."
-
-#: builtins.c:940
-msgid "    -O FILE        True if the file is effectively owned by you."
-msgstr "    -O FILE        True if the file is effectively owned by you."
-
-#: builtins.c:941
-msgid "    -G FILE        True if the file is effectively owned by your group."
-msgstr ""
-"    -G FILE        True if the file is effectively owned by your group."
-
-#: builtins.c:942
-msgid ""
-"    -N FILE        True if the file has been modified since it was last read."
-msgstr ""
-"    -N FILE        True if the file has been modified since it was last read."
-
-#: builtins.c:944
-msgid "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-msgstr "  FILE1 -nt FILE2  True if file1 is newer than file2 (according to"
-
-#: builtins.c:945
-msgid "                   modification date)."
-msgstr "                   modification date)."
-
-#: builtins.c:947
-msgid "  FILE1 -ot FILE2  True if file1 is older than file2."
-msgstr "  FILE1 -ot FILE2  True if file1 is older than file2."
-
-#: builtins.c:949
-msgid "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-msgstr "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-
-#: builtins.c:951
-msgid "String operators:"
-msgstr "String operators:"
-
-#: builtins.c:953
-msgid "    -z STRING      True if string is empty."
-msgstr "    -z STRING      True if string is empty."
-
-#: builtins.c:955
-msgid "    -n STRING"
-msgstr "    -n STRING"
-
-#: builtins.c:956
-msgid "    STRING         True if string is not empty."
-msgstr "    STRING         True if string is not empty."
-
-#: builtins.c:958
-msgid "    STRING1 = STRING2"
-msgstr "    STRING1 = STRING2"
-
-#: builtins.c:959
-msgid "                   True if the strings are equal."
-msgstr "                   True if the strings are equal."
-
-#: builtins.c:960
-msgid "    STRING1 != STRING2"
-msgstr "    STRING1 != STRING2"
-
-#: builtins.c:961
-msgid "                   True if the strings are not equal."
-msgstr "                   True if the strings are not equal."
-
-#: builtins.c:962
-msgid "    STRING1 < STRING2"
-msgstr "    STRING1 < STRING2"
-
-#: builtins.c:963
-msgid ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-msgstr ""
-"                   True if STRING1 sorts before STRING2 lexicographically."
-
-#: builtins.c:964
-msgid "    STRING1 > STRING2"
-msgstr "    STRING1 > STRING2"
-
-#: builtins.c:965
-msgid ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-msgstr ""
-"                   True if STRING1 sorts after STRING2 lexicographically."
-
-#: builtins.c:967
-msgid "Other operators:"
-msgstr "Other operators:"
-
-#: builtins.c:969
-msgid "    -o OPTION      True if the shell option OPTION is enabled."
-msgstr "    -o OPTION      True if the shell option OPTION is enabled."
-
-#: builtins.c:970
-msgid "    ! EXPR         True if expr is false."
-msgstr "    ! EXPR         True if expr is false."
-
-#: builtins.c:971
-msgid "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-msgstr "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-
-#: builtins.c:972
-msgid "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-msgstr "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-
-#: builtins.c:974
-msgid "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-msgstr "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-
-#: builtins.c:975
-msgid "                   -lt, -le, -gt, or -ge."
-msgstr "                   -lt, -le, -gt, or -ge."
-
-#: builtins.c:977
-msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-msgstr "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-
-#: builtins.c:978
-msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-msgstr "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-
-#: builtins.c:979
-msgid "than ARG2."
-msgstr "than ARG2."
-
-#: builtins.c:985
-msgid "This is a synonym for the \"test\" builtin, but the last"
-msgstr "This is a synonym for the “test” builtin, but the last"
-
-#: builtins.c:986
-msgid "argument must be a literal `]', to match the opening `['."
-msgstr "argument must be a literal ‘]’, to match the opening ‘[’."
-
-#: builtins.c:992
-msgid "Print the accumulated user and system times for processes run from"
-msgstr "Print the accumulated user and system times for processes run from"
-
-#: builtins.c:993
-msgid "the shell."
-msgstr "the shell."
-
-#: builtins.c:999
-msgid "The command ARG is to be read and executed when the shell receives"
-msgstr "The command ARG is to be read and executed when the shell receives"
-
-#: builtins.c:1000
-msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-msgstr "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-
-#: builtins.c:1001
-msgid "reset to their original values.  If ARG is the null string each"
-msgstr "reset to their original values.  If ARG is the null string each"
-
-#: builtins.c:1002
-msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-msgstr "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-
-#: builtins.c:1003
-msgid "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-msgstr "If a SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-
-#: builtins.c:1004
-msgid "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-msgstr "the shell.  If a SIGNAL_SPEC is DEBUG, ARG is executed after every"
-
-#: builtins.c:1005
-msgid "command.  If ARG is `-p' then the trap commands associated with"
-msgstr "command.  If ARG is ‘-p’ then the trap commands associated with"
-
-#: builtins.c:1006
-msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-msgstr "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-
-#: builtins.c:1007
-msgid "only `-p' is given, trap prints the list of commands associated with"
-msgstr "only ‘-p’ is given, trap prints the list of commands associated with"
-
-#: builtins.c:1008
-msgid ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-msgstr ""
-"each signal number.  Each SIGNAL_SPEC is either a signal name in <signal.h>"
-
-#: builtins.c:1009
-msgid "or a signal number.  `trap -l' prints a list of signal names and their"
-msgstr "or a signal number.  ‘trap -l’ prints a list of signal names and their"
-
-#: builtins.c:1010
-msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-msgstr "corresponding numbers.  Note that a signal can be sent to the shell"
-
-#: builtins.c:1011
-msgid "with \"kill -signal $$\"."
-msgstr "with “kill -signal $$”."
-
-#: builtins.c:1017
-msgid "For each NAME, indicate how it would be interpreted if used as a"
-msgstr "For each NAME, indicate how it would be interpreted if used as a"
-
-#: builtins.c:1018
-msgid "command name."
-msgstr "command name."
-
-#: builtins.c:1020
-msgid "If the -t option is used, `type' outputs a single word which is one of"
-msgstr "If the -t option is used, ‘type’ outputs a single word which is one of"
-
-#: builtins.c:1021
-msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-msgstr "‘alias’, ‘keyword’, ‘function’, ‘builtin’, ‘file’ or ‘’, if NAME is an"
-
-#: builtins.c:1022
-msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
-msgstr "alias, shell reserved word, shell function, shell builtin, disk file,"
-
-#: builtins.c:1023
-msgid "or unfound, respectively."
-msgstr "or unfound, respectively."
-
-#: builtins.c:1025
-msgid "If the -p flag is used, `type' either returns the name of the disk"
-msgstr "If the -p flag is used, ‘type’ either returns the name of the disk"
-
-#: builtins.c:1026
-msgid "file that would be executed, or nothing if `type -t NAME' would not"
-msgstr "file that would be executed, or nothing if ‘type -t NAME’ would not"
-
-#: builtins.c:1027
-msgid "return `file'."
-msgstr "return ‘file’."
-
-#: builtins.c:1029
-msgid "If the -a flag is used, `type' displays all of the places that contain"
-msgstr "If the -a flag is used, ‘type’ displays all of the places that contain"
-
-#: builtins.c:1030
-msgid "an executable named `file'.  This includes aliases, builtins, and"
-msgstr "an executable named ‘file’.  This includes aliases, builtins, and"
-
-#: builtins.c:1031
-msgid "functions, if and only if the -p flag is not also used."
-msgstr "functions, if and only if the -p flag is not also used."
-
-#: builtins.c:1033
-msgid "The -f flag suppresses shell function lookup."
-msgstr "The -f flag suppresses shell function lookup."
-
-#: builtins.c:1035
-msgid "The -P flag forces a PATH search for each NAME, even if it is an alias,"
-msgstr ""
-"The -P flag forces a PATH search for each NAME, even if it is an alias,"
-
-#: builtins.c:1036
-msgid "builtin, or function, and returns the name of the disk file that would"
-msgstr "builtin, or function, and returns the name of the disk file that would"
-
-#: builtins.c:1037
-msgid "be executed."
-msgstr "be executed."
-
-#: builtins.c:1044
-msgid "Ulimit provides control over the resources available to processes"
-msgstr "Ulimit provides control over the resources available to processes"
-
-#: builtins.c:1045
-msgid "started by the shell, on systems that allow such control.  If an"
-msgstr "started by the shell, on systems that allow such control.  If an"
-
-#: builtins.c:1046
-msgid "option is given, it is interpreted as follows:"
-msgstr "option is given, it is interpreted as follows:"
-
-#: builtins.c:1048
-msgid "    -S\tuse the `soft' resource limit"
-msgstr "    -S\tuse the ‘soft’ resource limit"
-
-#: builtins.c:1049
-msgid "    -H\tuse the `hard' resource limit"
-msgstr "    -H\tuse the ‘hard’ resource limit"
-
-#: builtins.c:1050
-msgid "    -a\tall current limits are reported"
-msgstr "    -a\tall current limits are reported"
-
-#: builtins.c:1051
-msgid "    -c\tthe maximum size of core files created"
-msgstr "    -c\tthe maximum size of core files created"
-
-#: builtins.c:1052
-msgid "    -d\tthe maximum size of a process's data segment"
-msgstr "    -d\tthe maximum size of a process's data segment"
-
-#: builtins.c:1053
-msgid "    -f\tthe maximum size of files created by the shell"
-msgstr "    -f\tthe maximum size of files created by the shell"
-
-#: builtins.c:1054
-msgid "    -l\tthe maximum size a process may lock into memory"
-msgstr "    -l\tthe maximum size a process may lock into memory"
-
-#: builtins.c:1055
-msgid "    -m\tthe maximum resident set size"
-msgstr "    -m\tthe maximum resident set size"
-
-#: builtins.c:1056
-msgid "    -n\tthe maximum number of open file descriptors"
-msgstr "    -n\tthe maximum number of open file descriptors"
-
-#: builtins.c:1057
-msgid "    -p\tthe pipe buffer size"
-msgstr "    -p\tthe pipe buffer size"
-
-#: builtins.c:1058
-msgid "    -s\tthe maximum stack size"
-msgstr "    -s\tthe maximum stack size"
-
-#: builtins.c:1059
-msgid "    -t\tthe maximum amount of cpu time in seconds"
-msgstr "    -t\tthe maximum amount of cpu time in seconds"
-
-#: builtins.c:1060
-msgid "    -u\tthe maximum number of user processes"
-msgstr "    -u\tthe maximum number of user processes"
-
-#: builtins.c:1061
-msgid "    -v\tthe size of virtual memory"
-msgstr "    -v\tthe size of virtual memory"
-
-#: builtins.c:1063
-msgid "If LIMIT is given, it is the new value of the specified resource;"
-msgstr "If LIMIT is given, it is the new value of the specified resource;"
-
-#: builtins.c:1064
-msgid "the special LIMIT values `soft', `hard', and `unlimited' stand for"
-msgstr "the special LIMIT values ‘soft’, ‘hard’, and ‘unlimited’ stand for"
-
-#: builtins.c:1065
-msgid ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-msgstr ""
-"the current soft limit, the current hard limit, and no limit, respectively."
-
-#: builtins.c:1066
-msgid "Otherwise, the current value of the specified resource is printed."
-msgstr "Otherwise, the current value of the specified resource is printed."
-
-#: builtins.c:1067
-msgid "If no option is given, then -f is assumed.  Values are in 1024-byte"
-msgstr "If no option is given, then -f is assumed.  Values are in 1024-byte"
-
-#: builtins.c:1068
-msgid "increments, except for -t, which is in seconds, -p, which is in"
-msgstr "increments, except for -t, which is in seconds, -p, which is in"
-
-#: builtins.c:1069
-msgid "increments of 512 bytes, and -u, which is an unscaled number of"
-msgstr "increments of 512 bytes, and -u, which is an unscaled number of"
-
-#: builtins.c:1070
-msgid "processes."
-msgstr "processes."
-
-#: builtins.c:1077
-msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-msgstr "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-
-#: builtins.c:1078
-msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-msgstr "‘-S’ is supplied, the current value of the mask is printed.  The ‘-S’"
-
-#: builtins.c:1079
-msgid "option makes the output symbolic; otherwise an octal number is output."
-msgstr "option makes the output symbolic; otherwise an octal number is output."
-
-#: builtins.c:1080
-msgid "If `-p' is supplied, and MODE is omitted, the output is in a form"
-msgstr "If ‘-p’ is supplied, and MODE is omitted, the output is in a form"
-
-#: builtins.c:1081
-msgid "that may be used as input.  If MODE begins with a digit, it is"
-msgstr "that may be used as input.  If MODE begins with a digit, it is"
-
-#: builtins.c:1082
-msgid "interpreted as an octal number, otherwise it is a symbolic mode string"
-msgstr "interpreted as an octal number, otherwise it is a symbolic mode string"
-
-#: builtins.c:1083
-msgid "like that accepted by chmod(1)."
-msgstr "like that accepted by chmod(1)."
-
-#: builtins.c:1090 builtins.c:1102
-msgid "Wait for the specified process and report its termination status.  If"
-msgstr "Wait for the specified process and report its termination status.  If"
-
-#: builtins.c:1091 builtins.c:1103
-msgid "N is not given, all currently active child processes are waited for,"
-msgstr "N is not given, all currently active child processes are waited for,"
-
-#: builtins.c:1092
-msgid "and the return code is zero.  N may be a process ID or a job"
-msgstr "and the return code is zero.  N may be a process ID or a job"
-
-#: builtins.c:1093
-msgid "specification; if a job spec is given, all processes in the job's"
-msgstr "specification; if a job spec is given, all processes in the job's"
-
-#: builtins.c:1094
-msgid "pipeline are waited for."
-msgstr "pipeline are waited for."
-
-#: builtins.c:1104
-msgid "and the return code is zero.  N is a process ID; if it is not given,"
-msgstr "and the return code is zero.  N is a process ID; if it is not given,"
-
-#: builtins.c:1105
-msgid "all child processes of the shell are waited for."
-msgstr "all child processes of the shell are waited for."
-
-#: builtins.c:1112
-msgid "The `for' loop executes a sequence of commands for each member in a"
-msgstr "The ‘for’ loop executes a sequence of commands for each member in a"
-
-#: builtins.c:1113
-msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-msgstr "list of items.  If ‘in WORDS ...;’ is not present, then ‘in “$@”’ is"
-
-#: builtins.c:1114
-msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
-msgstr "assumed.  For each element in WORDS, NAME is set to that element, and"
-
-#: builtins.c:1115
-msgid "the COMMANDS are executed."
-msgstr "the COMMANDS are executed."
-
-#: builtins.c:1121
-msgid "Equivalent to"
-msgstr "Equivalent to"
-
-#: builtins.c:1122
-msgid "\t(( EXP1 ))"
-msgstr "\t(( EXP1 ))"
-
-#: builtins.c:1123
-msgid "\twhile (( EXP2 )); do"
-msgstr "\twhile (( EXP2 )); do"
-
-#: builtins.c:1124
-msgid "\t\tCOMMANDS"
-msgstr "\t\tCOMMANDS"
-
-#: builtins.c:1125
-msgid "\t\t(( EXP3 ))"
-msgstr "\t\t(( EXP3 ))"
-
-#: builtins.c:1126
-msgid "\tdone"
-msgstr "\tdone"
-
-#: builtins.c:1127
-msgid "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-msgstr "EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is"
-
-#: builtins.c:1128
-msgid "omitted, it behaves as if it evaluates to 1."
-msgstr "omitted, it behaves as if it evaluates to 1."
-
-#: builtins.c:1134
-msgid "The WORDS are expanded, generating a list of words.  The"
-msgstr "The WORDS are expanded, generating a list of words.  The"
-
-#: builtins.c:1135
-msgid "set of expanded words is printed on the standard error, each"
-msgstr "set of expanded words is printed on the standard error, each"
-
-#: builtins.c:1136
-msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-msgstr "preceded by a number.  If ‘in WORDS’ is not present, ‘in “$@”’"
-
-#: builtins.c:1137
-msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-msgstr "is assumed.  The PS3 prompt is then displayed and a line read"
-
-#: builtins.c:1138
-msgid "from the standard input.  If the line consists of the number"
-msgstr "from the standard input.  If the line consists of the number"
-
-#: builtins.c:1139
-msgid "corresponding to one of the displayed words, then NAME is set"
-msgstr "corresponding to one of the displayed words, then NAME is set"
-
-#: builtins.c:1140
-msgid "to that word.  If the line is empty, WORDS and the prompt are"
-msgstr "to that word.  If the line is empty, WORDS and the prompt are"
-
-#: builtins.c:1141
-msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-msgstr "redisplayed.  If EOF is read, the command completes.  Any other"
-
-#: builtins.c:1142
-msgid "value read causes NAME to be set to null.  The line read is saved"
-msgstr "value read causes NAME to be set to null.  The line read is saved"
-
-#: builtins.c:1143
-msgid "in the variable REPLY.  COMMANDS are executed after each selection"
-msgstr "in the variable REPLY.  COMMANDS are executed after each selection"
-
-#: builtins.c:1144
-msgid "until a break command is executed."
-msgstr "until a break command is executed."
-
-#: builtins.c:1150
-msgid "Execute PIPELINE and print a summary of the real time, user CPU time,"
-msgstr "Execute PIPELINE and print a summary of the real time, user CPU time,"
-
-#: builtins.c:1151
-msgid "and system CPU time spent executing PIPELINE when it terminates."
-msgstr "and system CPU time spent executing PIPELINE when it terminates."
-
-#: builtins.c:1152
-msgid "The return status is the return status of PIPELINE.  The `-p' option"
-msgstr "The return status is the return status of PIPELINE.  The ‘-p’ option"
-
-#: builtins.c:1153
-msgid "prints the timing summary in a slightly different format.  This uses"
-msgstr "prints the timing summary in a slightly different format.  This uses"
-
-#: builtins.c:1154
-msgid "the value of the TIMEFORMAT variable as the output format."
-msgstr "the value of the TIMEFORMAT variable as the output format."
-
-#: builtins.c:1160
-msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-msgstr "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-
-#: builtins.c:1161
-msgid "`|' is used to separate multiple patterns."
-msgstr "‘|’ is used to separate multiple patterns."
-
-#: builtins.c:1167
-msgid ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-msgstr ""
-"The if COMMANDS are executed.  If the exit status is zero, then the then"
-
-#: builtins.c:1168
-msgid ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-msgstr ""
-"COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-
-#: builtins.c:1169
-msgid ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-msgstr ""
-"in turn, and if the exit status is zero, the corresponding then COMMANDS"
-
-#: builtins.c:1170
-msgid ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-msgstr ""
-"are executed and the if command completes.  Otherwise, the else COMMANDS"
-
-#: builtins.c:1171
-msgid ""
-"are executed, if present.  The exit status is the exit status of the last"
-msgstr ""
-"are executed, if present.  The exit status is the exit status of the last"
-
-#: builtins.c:1172
-msgid "command executed, or zero if no condition tested true."
-msgstr "command executed, or zero if no condition tested true."
-
-#: builtins.c:1178 builtins.c:1185
-msgid "Expand and execute COMMANDS as long as the final command in the"
-msgstr "Expand and execute COMMANDS as long as the final command in the"
-
-#: builtins.c:1179
-msgid "`while' COMMANDS has an exit status of zero."
-msgstr "‘while’ COMMANDS has an exit status of zero."
-
-#: builtins.c:1186
-msgid "`until' COMMANDS has an exit status which is not zero."
-msgstr "‘until’ COMMANDS has an exit status which is not zero."
-
-#: builtins.c:1192
-msgid "Create a simple command invoked by NAME which runs COMMANDS."
-msgstr "Create a simple command invoked by NAME which runs COMMANDS."
-
-#: builtins.c:1193
-msgid "Arguments on the command line along with NAME are passed to the"
-msgstr "Arguments on the command line along with NAME are passed to the"
-
-#: builtins.c:1194
-msgid "function as $0 .. $n."
-msgstr "function as $0 .. $n."
-
-#: builtins.c:1200
-msgid "Run a set of commands in a group.  This is one way to redirect an"
-msgstr "Run a set of commands in a group.  This is one way to redirect an"
-
-#: builtins.c:1201
-msgid "entire set of commands."
-msgstr "entire set of commands."
-
-#: builtins.c:1207
-msgid "This is similar to the `fg' command.  Resume a stopped or background"
-msgstr "This is similar to the ‘fg’ command.  Resume a stopped or background"
-
-#: builtins.c:1208
-msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-msgstr "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-
-#: builtins.c:1209
-msgid "WORD, then the job whose name begins with WORD is used.  Following the"
-msgstr "WORD, then the job whose name begins with WORD is used.  Following the"
-
-#: builtins.c:1210
-msgid "job specification with a `&' places the job in the background."
-msgstr "job specification with a ‘&’ places the job in the background."
-
-#: builtins.c:1216
-msgid "The EXPRESSION is evaluated according to the rules for arithmetic"
-msgstr "The EXPRESSION is evaluated according to the rules for arithmetic"
-
-#: builtins.c:1217
-msgid "evaluation.  Equivalent to \"let EXPRESSION\"."
-msgstr "evaluation.  Equivalent to “let EXPRESSION”."
-
-#: builtins.c:1223
-msgid ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-msgstr ""
-"Returns a status of 0 or 1 depending on the evaluation of the conditional"
-
-#: builtins.c:1224
-msgid ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-msgstr ""
-"expression EXPRESSION.  Expressions are composed of the same primaries used"
-
-#: builtins.c:1225
-msgid ""
-"by the `test' builtin, and may be combined using the following operators"
-msgstr ""
-"by the ‘test’ builtin, and may be combined using the following operators"
-
-#: builtins.c:1227
-msgid "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-msgstr "\t( EXPRESSION )\tReturns the value of EXPRESSION"
-
-#: builtins.c:1228
-msgid "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-msgstr "\t! EXPRESSION\tTrue if EXPRESSION is false; else false"
-
-#: builtins.c:1229
-msgid "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-msgstr "\tEXPR1 && EXPR2\tTrue if both EXPR1 and EXPR2 are true; else false"
-
-#: builtins.c:1230
-msgid "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-msgstr "\tEXPR1 || EXPR2\tTrue if either EXPR1 or EXPR2 is true; else false"
-
-#: builtins.c:1232
-msgid ""
-"When the `==' and `!=' operators are used, the string to the right of the"
-msgstr ""
-"When the ‘==’ and ‘!=’ operators are used, the string to the right of the"
-
-#: builtins.c:1233
-msgid "operator is used as a pattern and pattern matching is performed.  The"
-msgstr "operator is used as a pattern and pattern matching is performed.  The"
-
-#: builtins.c:1234
-msgid "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-msgstr "&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to"
-
-#: builtins.c:1235
-msgid "determine the expression's value."
-msgstr "determine the expression's value."
-
-#: builtins.c:1241
-msgid "BASH_VERSION    Version information for this Bash."
-msgstr "BASH_VERSION    Version information for this Bash."
-
-#: builtins.c:1242
-msgid "CDPATH          A colon separated list of directories to search"
-msgstr "CDPATH          A colon separated list of directories to search"
-
-#: builtins.c:1243
-msgid "\t\twhen the argument to `cd' is not found in the current"
-msgstr "\t\twhen the argument to ‘cd’ is not found in the current"
-
-#: builtins.c:1244
-msgid "\t\tdirectory."
-msgstr "\t\tdirectory."
-
-#: builtins.c:1245
-msgid "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-msgstr "GLOBIGNORE\tA colon-separated list of patterns describing filenames to"
-
-#: builtins.c:1246
-msgid "\t\tbe ignored by pathname expansion."
-msgstr "\t\tbe ignored by pathname expansion."
-
-#: builtins.c:1248
-msgid ""
-"HISTFILE        The name of the file where your command history is stored."
-msgstr ""
-"HISTFILE        The name of the file where your command history is stored."
-
-#: builtins.c:1249
-msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-msgstr "HISTFILESIZE    The maximum number of lines this file can contain."
-
-#: builtins.c:1250
-msgid "HISTSIZE        The maximum number of history lines that a running"
-msgstr "HISTSIZE        The maximum number of history lines that a running"
-
-#: builtins.c:1251
-msgid "\t\tshell can access."
-msgstr "\t\tshell can access."
-
-#: builtins.c:1253
-msgid "HOME            The complete pathname to your login directory."
-msgstr "HOME            The complete pathname to your login directory."
-
-#: builtins.c:1254
-msgid "HOSTNAME\tThe name of the current host."
-msgstr "HOSTNAME\tThe name of the current host."
-
-#: builtins.c:1255
-msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-msgstr "HOSTTYPE        The type of CPU this version of Bash is running under."
-
-#: builtins.c:1256
-msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-msgstr "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-
-#: builtins.c:1257
-msgid "\t\tcharacter as the sole input.  If set, then the value"
-msgstr "\t\tcharacter as the sole input.  If set, then the value"
-
-#: builtins.c:1258
-msgid "\t\tof it is the number of EOF characters that can be seen"
-msgstr "\t\tof it is the number of EOF characters that can be seen"
-
-#: builtins.c:1259
-msgid "\t\tin a row on an empty line before the shell will exit"
-msgstr "\t\tin a row on an empty line before the shell will exit"
-
-#: builtins.c:1260
-msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-msgstr "\t\t(default 10).  When unset, EOF signifies the end of input."
-
-#: builtins.c:1261
-msgid "MACHTYPE\tA string describing the current system Bash is running on."
-msgstr "MACHTYPE\tA string describing the current system Bash is running on."
-
-#: builtins.c:1262
-msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-msgstr "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-
-#: builtins.c:1263
-msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-msgstr "MAILPATH\tA colon-separated list of filenames which Bash checks"
-
-#: builtins.c:1264
-msgid "\t\tfor new mail."
-msgstr "\t\tfor new mail."
-
-#: builtins.c:1265
-msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-msgstr "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-
-#: builtins.c:1266
-msgid "PATH            A colon-separated list of directories to search when"
-msgstr "PATH            A colon-separated list of directories to search when"
-
-#: builtins.c:1267
-msgid "\t\tlooking for commands."
-msgstr "\t\tlooking for commands."
-
-#: builtins.c:1268
-msgid "PROMPT_COMMAND  A command to be executed before the printing of each"
-msgstr "PROMPT_COMMAND  A command to be executed before the printing of each"
-
-#: builtins.c:1269
-msgid "\t\tprimary prompt."
-msgstr "\t\tprimary prompt."
-
-#: builtins.c:1270
-msgid "PS1             The primary prompt string."
-msgstr "PS1             The primary prompt string."
-
-#: builtins.c:1271
-msgid "PS2             The secondary prompt string."
-msgstr "PS2             The secondary prompt string."
-
-#: builtins.c:1272
-msgid "PWD\t\tThe full pathname of the current directory."
-msgstr "PWD\t\tThe full pathname of the current directory."
-
-#: builtins.c:1273
-msgid "SHELLOPTS\tA colon-separated list of enabled shell options."
-msgstr "SHELLOPTS\tA colon-separated list of enabled shell options."
-
-#: builtins.c:1274
-msgid "TERM            The name of the current terminal type."
-msgstr "TERM            The name of the current terminal type."
-
-#: builtins.c:1275
-msgid "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-msgstr "TIMEFORMAT\tThe output format for timing statistics displayed by the"
-
-#: builtins.c:1276
-msgid "\t\t`time' reserved word."
-msgstr "\t\t‘time’ reserved word."
-
-#: builtins.c:1277
-msgid "auto_resume     Non-null means a command word appearing on a line by"
-msgstr "auto_resume     Non-null means a command word appearing on a line by"
-
-#: builtins.c:1278
-msgid "\t\titself is first looked for in the list of currently"
-msgstr "\t\titself is first looked for in the list of currently"
-
-#: builtins.c:1279
-msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-msgstr "\t\tstopped jobs.  If found there, that job is foregrounded."
-
-#: builtins.c:1280
-msgid "\t\tA value of `exact' means that the command word must"
-msgstr "\t\tA value of ‘exact’ means that the command word must"
-
-#: builtins.c:1281
-msgid "\t\texactly match a command in the list of stopped jobs.  A"
-msgstr "\t\texactly match a command in the list of stopped jobs.  A"
-
-#: builtins.c:1282
-msgid "\t\tvalue of `substring' means that the command word must"
-msgstr "\t\tvalue of ‘substring’ means that the command word must"
-
-#: builtins.c:1283
-msgid "\t\tmatch a substring of the job.  Any other value means that"
-msgstr "\t\tmatch a substring of the job.  Any other value means that"
-
-#: builtins.c:1284
-msgid "\t\tthe command must be a prefix of a stopped job."
-msgstr "\t\tthe command must be a prefix of a stopped job."
-
-#: builtins.c:1287
-msgid "histchars       Characters controlling history expansion and quick"
-msgstr "histchars       Characters controlling history expansion and quick"
-
-#: builtins.c:1288
-msgid "\t\tsubstitution.  The first character is the history"
-msgstr "\t\tsubstitution.  The first character is the history"
-
-#: builtins.c:1289
-msgid "\t\tsubstitution character, usually `!'.  The second is"
-msgstr "\t\tsubstitution character, usually ‘!’.  The second is"
-
-#: builtins.c:1290
-msgid "\t\tthe `quick substitution' character, usually `^'.  The"
-msgstr "\t\tthe ‘quick substitution’ character, usually ‘^’.  The"
-
-#: builtins.c:1291
-msgid "\t\tthird is the `history comment' character, usually `#'."
-msgstr "\t\tthird is the ‘history comment’ character, usually ‘#’."
-
-#: builtins.c:1293
-msgid "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-msgstr "HISTIGNORE\tA colon-separated list of patterns used to decide which"
-
-#: builtins.c:1294
-msgid "\t\tcommands should be saved on the history list."
-msgstr "\t\tcommands should be saved on the history list."
-
-#: builtins.c:1306
-msgid "+N\tRotates the stack so that the Nth directory (counting"
-msgstr "+N\tRotates the stack so that the Nth directory (counting"
-
-#: builtins.c:1307
-msgid "\tfrom the left of the list shown by `dirs', starting with"
-msgstr "\tfrom the left of the list shown by ‘dirs’, starting with"
-
-#: builtins.c:1308 builtins.c:1312
-msgid "\tzero) is at the top."
-msgstr "\tzero) is at the top."
-
-#: builtins.c:1310
-msgid "-N\tRotates the stack so that the Nth directory (counting"
-msgstr "-N\tRotates the stack so that the Nth directory (counting"
-
-#: builtins.c:1311
-msgid "\tfrom the right of the list shown by `dirs', starting with"
-msgstr "\tfrom the right of the list shown by ‘dirs’, starting with"
-
-#: builtins.c:1314
-msgid "-n\tsuppress the normal change of directory when adding directories"
-msgstr "-n\tsuppress the normal change of directory when adding directories"
-
-#: builtins.c:1315
-msgid "\tto the stack, so only the stack is manipulated."
-msgstr "\tto the stack, so only the stack is manipulated."
-
-#: builtins.c:1317
-msgid "dir\tadds DIR to the directory stack at the top, making it the"
-msgstr "dir\tadds DIR to the directory stack at the top, making it the"
-
-#: builtins.c:1318
-msgid "\tnew current working directory."
-msgstr "\tnew current working directory."
-
-#: builtins.c:1332
-msgid "+N\tremoves the Nth entry counting from the left of the list"
-msgstr "+N\tremoves the Nth entry counting from the left of the list"
-
-#: builtins.c:1333
-msgid "\tshown by `dirs', starting with zero.  For example: `popd +0'"
-msgstr "\tshown by ‘dirs’, starting with zero.  For example: ‘popd +0’"
-
-#: builtins.c:1334
-msgid "\tremoves the first directory, `popd +1' the second."
-msgstr "\tremoves the first directory, ‘popd +1’ the second."
-
-#: builtins.c:1336
-msgid "-N\tremoves the Nth entry counting from the right of the list"
-msgstr "-N\tremoves the Nth entry counting from the right of the list"
-
-#: builtins.c:1337
-msgid "\tshown by `dirs', starting with zero.  For example: `popd -0'"
-msgstr "\tshown by ‘dirs’, starting with zero.  For example: ‘popd -0’"
-
-#: builtins.c:1338
-msgid "\tremoves the last directory, `popd -1' the next to last."
-msgstr "\tremoves the last directory, ‘popd -1’ the next to last."
-
-#: builtins.c:1340
-msgid "-n\tsuppress the normal change of directory when removing directories"
-msgstr "-n\tsuppress the normal change of directory when removing directories"
-
-#: builtins.c:1341
-msgid "\tfrom the stack, so only the stack is manipulated."
-msgstr "\tfrom the stack, so only the stack is manipulated."
-
-#: builtins.c:1363
-msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
-msgstr "+N\tdisplays the Nth entry counting from the left of the list shown by"
-
-#: builtins.c:1364 builtins.c:1367
-msgid "\tdirs when invoked without options, starting with zero."
-msgstr "\tdirs when invoked without options, starting with zero."
-
-#: builtins.c:1366
-msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
-msgstr ""
-"-N\tdisplays the Nth entry counting from the right of the list shown by"
-
-#: builtins.c:1374
-msgid "Toggle the values of variables controlling optional behavior."
-msgstr "Toggle the values of variables controlling optional behavior."
-
-#: builtins.c:1375
-msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
-msgstr "The -s flag means to enable (set) each OPTNAME; the -u flag"
-
-#: builtins.c:1376
-msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-msgstr "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-
-#: builtins.c:1377
-msgid "status indicates whether each OPTNAME is set or unset.  The -o"
-msgstr "status indicates whether each OPTNAME is set or unset.  The -o"
-
-#: builtins.c:1378
-msgid "option restricts the OPTNAMEs to those defined for use with"
-msgstr "option restricts the OPTNAMEs to those defined for use with"
-
-#: builtins.c:1379
-msgid "`set -o'.  With no options, or with the -p option, a list of all"
-msgstr "‘set -o’.  With no options, or with the -p option, a list of all"
-
-#: builtins.c:1380
-msgid "settable options is displayed, with an indication of whether or"
-msgstr "settable options is displayed, with an indication of whether or"
-
-#: builtins.c:1381
-msgid "not each is set."
-msgstr "not each is set."
-
-#: builtins.c:1387
-msgid "printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-msgstr ""
-"printf formats and prints ARGUMENTS under control of the FORMAT. FORMAT"
-
-#: builtins.c:1388
-msgid "is a character string which contains three types of objects: plain"
-msgstr "is a character string which contains three types of objects: plain"
-
-#: builtins.c:1389
-msgid ""
-"characters, which are simply copied to standard output, character escape"
-msgstr ""
-"characters, which are simply copied to standard output, character escape"
-
-#: builtins.c:1390
-msgid "sequences which are converted and copied to the standard output, and"
-msgstr "sequences which are converted and copied to the standard output, and"
-
-#: builtins.c:1391
-msgid ""
-"format specifications, each of which causes printing of the next successive"
-msgstr ""
-"format specifications, each of which causes printing of the next successive"
-
-#: builtins.c:1392
-msgid "argument.  In addition to the standard printf(1) formats, %b means to"
-msgstr "argument.  In addition to the standard printf(1) formats, %b means to"
-
-#: builtins.c:1393
-msgid "expand backslash escape sequences in the corresponding argument, and %q"
-msgstr ""
-"expand backslash escape sequences in the corresponding argument, and %q"
-
-#: builtins.c:1394
-msgid "means to quote the argument in a way that can be reused as shell input."
-msgstr ""
-"means to quote the argument in a way that can be reused as shell input."
-
-#: builtins.c:1401
-msgid "For each NAME, specify how arguments are to be completed."
-msgstr "For each NAME, specify how arguments are to be completed."
-
-#: builtins.c:1402
-msgid "If the -p option is supplied, or if no options are supplied, existing"
-msgstr "If the -p option is supplied, or if no options are supplied, existing"
-
-#: builtins.c:1403
-msgid "completion specifications are printed in a way that allows them to be"
-msgstr "completion specifications are printed in a way that allows them to be"
-
-#: builtins.c:1404
-msgid "reused as input.  The -r option removes a completion specification for"
-msgstr "reused as input.  The -r option removes a completion specification for"
+#: builtins.c:1393
+msgid ""
+" For each NAME, specify how arguments are to be completed.\n"
+"    If the -p option is supplied, or if no options are supplied, existing\n"
+"    completion specifications are printed in a way that allows them to be\n"
+"    reused as input.  The -r option removes a completion specification for\n"
+"    each NAME, or, if no NAMEs are supplied, all completion specifications."
+msgstr ""
+" For each NAME, specify how arguments are to be completed.\n"
+"    If the -p option is supplied, or if no options are supplied, existing\n"
+"    completion specifications are printed in a way that allows them to be\n"
+"    reused as input.  The -r option removes a completion specification for\n"
+"    each NAME, or, if no NAMEs are supplied, all completion specifications."
 
 #: builtins.c:1405
-msgid "each NAME, or, if no NAMEs are supplied, all completion specifications."
-msgstr ""
-"each NAME, or, if no NAMEs are supplied, all completion specifications."
-
-#: builtins.c:1413
-msgid "Display the possible completions depending on the options.  Intended"
-msgstr "Display the possible completions depending on the options.  Intended"
-
-#: builtins.c:1414
 msgid ""
-"to be used from within a shell function generating possible completions."
-msgstr ""
-"to be used from within a shell function generating possible completions."
-
-#: builtins.c:1415
-msgid "If the optional WORD argument is supplied, matches against WORD are"
-msgstr "If the optional WORD argument is supplied, matches against WORD are"
-
-#: builtins.c:1416
-msgid "generated."
-msgstr "generated."
+" Display the possible completions depending on the options.  Intended\n"
+"    to be used from within a shell function generating possible "
+"completions.\n"
+"    If the optional WORD argument is supplied, matches against WORD are\n"
+"    generated."
+msgstr ""
+" Display the possible completions depending on the options.  Intended\n"
+"    to be used from within a shell function generating possible "
+"completions.\n"
+"    If the optional WORD argument is supplied, matches against WORD are\n"
+"    generated."
index c8c7757..7524f3d 100644 (file)
@@ -1,6 +1,6 @@
 /* print_command -- A way to make readable commands from a command tree. */
 
-/* Copyright (C) 1989-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -41,6 +41,9 @@ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
 #include "shell.h"
 #include "flags.h"
 #include <y.tab.h>     /* use <...> so we pick it up from the build directory */
+
+#include "shmbutil.h"
+
 #include "builtins/common.h"
 
 #if !HAVE_DECL_PRINTF
@@ -322,6 +325,8 @@ indirection_level_string ()
 {
   register int i, j;
   char *ps4;
+  char ps4_firstc[MB_LEN_MAX+1];
+  int ps4_firstc_len, ps4_len;
 
   indirection_string[0] = '\0';
   ps4 = get_string_value ("PS4");
@@ -336,10 +341,30 @@ indirection_level_string ()
   if (ps4 == 0 || *ps4 == '\0')
     return (indirection_string);
 
-  for (i = 0; *ps4 && i < indirection_level && i < 99; i++)
-    indirection_string[i] = *ps4;
+#if defined (HANDLE_MULTIBYTE)
+  ps4_len = strnlen (ps4, MB_CUR_MAX);
+  ps4_firstc_len = MBLEN (ps4, ps4_len);
+  if (ps4_firstc_len == 1 || ps4_firstc_len == 0 || MB_INVALIDCH (ps4_firstc_len))
+    {
+      ps4_firstc[0] = ps4[0];
+      ps4_firstc[ps4_firstc_len = 1] = '\0';
+    }
+  else
+    memcpy (ps4_firstc, ps4, ps4_firstc_len);
+#else
+  ps4_firstc[0] = ps4[0];
+  ps4_firstc[ps4_firstc_len = 1] = '\0';
+#endif
+      
+  for (i = j = 0; ps4_firstc[0] && j < indirection_level && i < 99; i += ps4_firstc_len, j++)
+    {
+      if (ps4_firstc_len == 1)
+       indirection_string[i] = ps4_firstc[0];
+      else
+       memcpy (indirection_string+i, ps4_firstc, ps4_firstc_len);
+    }      
 
-  for (j = 1; *ps4 && ps4[j] && i < 99; i++, j++)
+  for (j = ps4_firstc_len; *ps4 && ps4[j] && i < 99; i++, j++)
     indirection_string[i] = ps4[j];
 
   indirection_string[i] = '\0';
@@ -460,9 +485,9 @@ print_arith_for_command (arith_for_command)
 {
   cprintf ("for ((");
   command_print_word_list (arith_for_command->init, " ");
-  cprintf (" ; ");
+  cprintf ("; ");
   command_print_word_list (arith_for_command->test, " ");
-  cprintf (" ; ");
+  cprintf ("; ");
   command_print_word_list (arith_for_command->step, " ");
   cprintf ("))");
   newline ("do\n");
diff --git a/redir.c b/redir.c
index 228d67e..c9e5335 100644 (file)
--- a/redir.c
+++ b/redir.c
@@ -1,6 +1,6 @@
 /* redir.c -- Functions to perform input and output redirection. */
 
-/* Copyright (C) 1997-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -596,7 +596,10 @@ redir_open (filename, flags, mode, ri)
       fd = open (filename, flags, mode);
 #if defined (AFS)
       if ((fd < 0) && (errno == EACCES))
-       fd = open (filename, flags & ~O_CREAT, mode);
+       {
+         fd = open (filename, flags & ~O_CREAT, mode);
+         errno = EACCES;       /* restore errno */
+       }
 #endif /* AFS */
     }
 
@@ -627,6 +630,9 @@ do_redirection_internal (redirect, flags)
   redirector = redirect->redirector;
   ri = redirect->instruction;
 
+if (redirect->flags & RX_INTERNAL)
+  flags |= RX_INTERNAL;
+
   if (TRANSLATE_REDIRECT (ri))
     {
       /* We have [N]>&WORD[-] or [N]<&WORD[-].  Expand WORD, then translate
@@ -893,11 +899,20 @@ do_redirection_internal (redirect, flags)
             leaves the flag unset on the new descriptor, which means it
             stays open.  Only set the close-on-exec bit for file descriptors
             greater than 2 in any case, since 0-2 should always be open
-            unless closed by something like `exec 2<&-'. */
+            unless closed by something like `exec 2<&-'.  It should always
+            be safe to set fds > 2 to close-on-exec if they're being used to
+            save file descriptors < 2, since we don't need to preserve the
+            state of the close-on-exec flag for those fds -- they should
+            always be open. */
          /* if ((already_set || set_unconditionally) && (ok_to_set))
                set_it () */
-         if (((fcntl (redir_fd, F_GETFD, 0) == 1) || (flags & RX_CLEXEC)) &&
+#if 0
+         if (((fcntl (redir_fd, F_GETFD, 0) == 1) || redir_fd < 2 || (flags & RX_CLEXEC)) &&
+              (redirector > 2))
+#else
+         if (((fcntl (redir_fd, F_GETFD, 0) == 1) || (redir_fd < 2 && (flags & RX_INTERNAL)) || (flags & RX_CLEXEC)) &&
               (redirector > 2))
+#endif
            SET_CLOSE_ON_EXEC (redirector);
 
          /* dup-and-close redirection */
@@ -954,6 +969,7 @@ add_undo_redirect (fd)
 
   rd.dest = 0;
   closer = make_redirection (new_fd, r_close_this, rd);
+  closer->flags |= RX_INTERNAL;
   dummy_redirect = copy_redirects (closer);
 
   rd.dest = new_fd;
@@ -961,6 +977,7 @@ add_undo_redirect (fd)
     new_redirect = make_redirection (fd, r_duplicating_input, rd);
   else
     new_redirect = make_redirection (fd, r_duplicating_output, rd);
+  new_redirect->flags |= RX_INTERNAL;
   new_redirect->next = closer;
 
   closer->next = redirection_undo_list;
@@ -970,6 +987,21 @@ add_undo_redirect (fd)
      is thrown away by the `exec' builtin. */
   add_exec_redirect (dummy_redirect);
 
+  /* experimental:  if we're saving a redirection to undo for a file descriptor
+     above SHELL_FD_BASE, add a redirection to be undone if the exec builtin
+     causes redirections to be discarded. */
+  if (fd >= SHELL_FD_BASE)
+    {
+      rd.dest = new_fd;
+      new_redirect = make_redirection (fd, r_duplicating_output, rd);
+#if 0
+      closer = copy_redirects (new_redirect);
+      add_exec_redirect (closer);
+#else
+      add_exec_redirect (new_redirect);
+#endif     
+    }
+
   /* File descriptors used only for saving others should always be
      marked close-on-exec.  Unfortunately, we have to preserve the
      close-on-exec state of the file descriptor we are saving, since
@@ -994,6 +1026,7 @@ add_undo_close_redirect (fd)
 
   rd.dest = 0;
   closer = make_redirection (fd, r_close_this, rd);
+  closer->flags |= RX_INTERNAL;
   closer->next = redirection_undo_list;
   redirection_undo_list = closer;
 }
diff --git a/redir.h b/redir.h
index acb91e7..3eb7261 100644 (file)
--- a/redir.h
+++ b/redir.h
@@ -27,6 +27,8 @@
 #define RX_ACTIVE      0x01    /* do it; don't just go through the motions */
 #define RX_UNDOABLE    0x02    /* make a list to undo these redirections */
 #define RX_CLEXEC      0x04    /* set close-on-exec for opened fds > 2 */
+#define RX_INTERNAL    0x08
+#define RX_USER                0x10
 
 extern void redirection_error __P((REDIRECT *, int));
 extern int do_redirections __P((REDIRECT *, int));
diff --git a/shell.c b/shell.c
index 2e17baa..6d07c78 100644 (file)
--- a/shell.c
+++ b/shell.c
@@ -1,6 +1,6 @@
 /* shell.c -- GNU's idea of the POSIX shell specification. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -96,10 +96,11 @@ extern int shell_level;
 extern int subshell_environment;
 extern int last_command_exit_value;
 extern int line_number;
-extern char *primary_prompt, *secondary_prompt;
 extern int expand_aliases;
-extern char *this_command_name;
 extern int array_needs_making;
+extern int gnu_error_format;
+extern char *primary_prompt, *secondary_prompt;
+extern char *this_command_name;
 
 /* Non-zero means that this shell has already been run; i.e. you should
    call shell_reinitialize () if you need to start afresh. */
@@ -196,12 +197,18 @@ static int want_initial_help;             /* --help option */
 
 int debugging_mode = 0;                /* In debugging mode with --debugger */
 int no_line_editing = 0;       /* Don't do fancy line editing. */
-int posixly_correct = 0;       /* Non-zero means posix.2 superset. */
 int dump_translatable_strings; /* Dump strings in $"...", don't execute. */
 int dump_po_strings;           /* Dump strings in $"..." in po format */
 int wordexp_only = 0;          /* Do word expansion only */
 int protected_mode = 0;                /* No command substitution with --wordexp */
 
+#if defined (STRICT_POSIX)
+int posixly_correct = 1;       /* Non-zero means posix.2 superset. */
+#else
+int posixly_correct = 0;       /* Non-zero means posix.2 superset. */
+#endif
+
+
 /* Some long-winded argument names.  These are obviously new. */
 #define Int 1
 #define Charp 2
@@ -361,7 +368,7 @@ main (argc, argv, env)
 #endif /* __CYGWIN__ */
 
   /* Wait forever if we are debugging a login shell. */
-  while (debugging_login_shell);
+  while (debugging_login_shell) sleep (3);
 
   set_default_locale ();
 
@@ -386,6 +393,8 @@ main (argc, argv, env)
 
   /* Initialize `local' variables for all `invocations' of main (). */
   arg_index = 1;
+  if (arg_index > argc)
+    arg_index = argc;
   command_execution_string = (char *)NULL;
   want_pending_command = locally_skip_execution = read_from_stdin = 0;
   default_input = stdin;
@@ -511,7 +520,7 @@ main (argc, argv, env)
      alias expansion in non-interactive shells, and other Posix.2 things. */
   if (posixly_correct)
     {
-      bind_variable ("POSIXLY_CORRECT", "y");
+      bind_variable ("POSIXLY_CORRECT", "y", 0);
       sv_strict_posix ("POSIXLY_CORRECT");
     }
 
@@ -532,13 +541,14 @@ main (argc, argv, env)
       term = get_string_value ("TERM");
       no_line_editing |= term && (STREQ (term, "emacs"));
       emacs = get_string_value ("EMACS");
-      running_under_emacs = emacs ? ((strmatch ("*term*", emacs, 0) == 0) ? 2 : 1)
-                                : 0;
+      running_under_emacs = emacs ? ((strstr (emacs, "term") != 0) ? 2 : 1) : 0;
 #if 0
       no_line_editing |= emacs && emacs[0] == 't' && emacs[1] == '\0';
 #else
       no_line_editing |= emacs && emacs[0] == 't' && emacs[1] == '\0' && STREQ (term, "dumb");
 #endif
+      if (running_under_emacs)
+       gnu_error_format = 1;
     }
 
   top_level_arg_index = arg_index;
@@ -610,7 +620,7 @@ main (argc, argv, env)
   /* If we are invoked as `sh', turn on Posix mode. */
   if (act_like_sh)
     {
-      bind_variable ("POSIXLY_CORRECT", "y");
+      bind_variable ("POSIXLY_CORRECT", "y", 0);
       sv_strict_posix ("POSIXLY_CORRECT");
     }
 
@@ -1089,6 +1099,8 @@ shell_is_restricted (name)
   if (restricted)
     return 1;
   temp = base_pathname (name);
+  if (*temp == '-')
+    temp++;
   return (STREQ (temp, RESTRICTED_SHELL_NAME));
 }
 
@@ -1268,7 +1280,7 @@ bind_args (argv, arg_start, arg_end, start_index)
   register int i;
   WORD_LIST *args;
 
-  for (i = arg_start, args = (WORD_LIST *)NULL; i != arg_end; i++)
+  for (i = arg_start, args = (WORD_LIST *)NULL; i < arg_end; i++)
     args = make_word_list (make_word (argv[i]), args);
   if (args)
     {
@@ -1476,17 +1488,12 @@ set_bash_input ()
   /* with_input_from_stdin really means `with_input_from_readline' */
   if (interactive && no_line_editing == 0)
     with_input_from_stdin ();
-  else
 #if defined (BUFFERED_INPUT)
-    {
-      if (interactive == 0)
-       with_input_from_buffered_stream (default_buffered_input, dollar_vars[0]);
-      else
-       with_input_from_stream (default_input, dollar_vars[0]);
-    }
-#else /* !BUFFERED_INPUT */
+  else if (interactive == 0)
+    with_input_from_buffered_stream (default_buffered_input, dollar_vars[0]);
+#endif /* BUFFERED_INPUT */
+  else
     with_input_from_stream (default_input, dollar_vars[0]);
-#endif /* !BUFFERED_INPUT */
 }
 
 /* Close the current shell script input source and forget about it.  This is
@@ -1524,7 +1531,7 @@ set_shell_name (argv0)
 {
   /* Here's a hack.  If the name of this shell is "sh", then don't do
      any startup files; just try to be more like /bin/sh. */
-  shell_name = base_pathname (argv0);
+  shell_name = argv0 ? base_pathname (argv0) : PROGRAM;
 
   if (*shell_name == '-')
     {
@@ -1537,7 +1544,7 @@ set_shell_name (argv0)
   if (shell_name[0] == 's' && shell_name[1] == 'u' && shell_name[2] == '\0')
     su_shell++;
 
-  shell_name = argv0;
+  shell_name = argv0 ? argv0 : PROGRAM;
   FREE (dollar_vars[0]);
   dollar_vars[0] = savestring (shell_name);
 
diff --git a/sig.c b/sig.c
index 0771f14..9480279 100644 (file)
--- a/sig.c
+++ b/sig.c
@@ -1,6 +1,6 @@
 /* sig.c - interface for shell signal handlers and signal initialization. */
 
-/* Copyright (C) 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -61,6 +61,9 @@ extern int parse_and_execute_level, shell_initialized;
 /* Non-zero after SIGINT. */
 int interrupt_state;
 
+/* Non-zero after SIGWINCH */
+volatile int sigwinch_received = 0;
+
 /* The environment at the top-level R-E loop.  We use this in
    the case of error return. */
 procenv_t top_level;
@@ -73,6 +76,10 @@ sigset_t top_level_mask;
 /* When non-zero, we throw_to_top_level (). */
 int interrupt_immediately = 0;
 
+#if defined (SIGWINCH)
+static SigHandler *old_winch = (SigHandler *)SIG_DFL;
+#endif
+
 static void initialize_shell_signals __P((void));
 
 void
@@ -93,6 +100,7 @@ initialize_signals (reinit)
 struct termsig {
      int signum;
      SigHandler *orig_handler;
+     int orig_flags;
 };
 
 #define NULL_HANDLER (SigHandler *)SIG_DFL
@@ -102,89 +110,89 @@ struct termsig {
    and so forth. */
 static struct termsig terminating_signals[] = {
 #ifdef SIGHUP
-{  SIGHUP, NULL_HANDLER },
+{  SIGHUP, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGINT
-{  SIGINT, NULL_HANDLER },
+{  SIGINT, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGILL
-{  SIGILL, NULL_HANDLER },
+{  SIGILL, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGTRAP
-{  SIGTRAP, NULL_HANDLER },
+{  SIGTRAP, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGIOT
-{  SIGIOT, NULL_HANDLER },
+{  SIGIOT, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGDANGER
-{  SIGDANGER, NULL_HANDLER },
+{  SIGDANGER, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGEMT
-{  SIGEMT, NULL_HANDLER },
+{  SIGEMT, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGFPE
-{  SIGFPE, NULL_HANDLER },
+{  SIGFPE, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGBUS
-{  SIGBUS, NULL_HANDLER },
+{  SIGBUS, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGSEGV
-{  SIGSEGV, NULL_HANDLER },
+{  SIGSEGV, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGSYS
-{  SIGSYS, NULL_HANDLER },
+{  SIGSYS, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGPIPE
-{  SIGPIPE, NULL_HANDLER },
+{  SIGPIPE, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGALRM
-{  SIGALRM, NULL_HANDLER },
+{  SIGALRM, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGTERM
-{  SIGTERM, NULL_HANDLER },
+{  SIGTERM, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGXCPU
-{  SIGXCPU, NULL_HANDLER },
+{  SIGXCPU, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGXFSZ
-{  SIGXFSZ, NULL_HANDLER },
+{  SIGXFSZ, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGVTALRM
-{  SIGVTALRM, NULL_HANDLER },
+{  SIGVTALRM, NULL_HANDLER, 0 },
 #endif
 
 #if 0
 #ifdef SIGPROF
-{  SIGPROF, NULL_HANDLER },
+{  SIGPROF, NULL_HANDLER, 0 },
 #endif
 #endif
 
 #ifdef SIGLOST
-{  SIGLOST, NULL_HANDLER },
+{  SIGLOST, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGUSR1
-{  SIGUSR1, NULL_HANDLER },
+{  SIGUSR1, NULL_HANDLER, 0 },
 #endif
 
 #ifdef SIGUSR2
-{  SIGUSR2, NULL_HANDLER },
+{  SIGUSR2, NULL_HANDLER, 0 },
 #endif
 };
 
@@ -192,6 +200,7 @@ static struct termsig terminating_signals[] = {
 
 #define XSIG(x) (terminating_signals[x].signum)
 #define XHANDLER(x) (terminating_signals[x].orig_handler)
+#define XSAFLAGS(x) (terminating_signals[x].orig_flags)
 
 static int termsigs_initialized = 0;
 
@@ -228,6 +237,7 @@ initialize_terminating_signals ()
 
       sigaction (XSIG (i), &act, &oact);
       XHANDLER(i) = oact.sa_handler;
+      XSAFLAGS(i) = oact.sa_flags;
       /* Don't do anything with signals that are ignored at shell entry
         if the shell is not interactive. */
       if (!interactive_shell && XHANDLER (i) == SIG_IGN)
@@ -250,6 +260,7 @@ initialize_terminating_signals ()
        continue;
 
       XHANDLER(i) = signal (XSIG (i), termination_unwind_protect);
+      XSAFLAGS(i) = 0;
       /* Don't do anything with signals that are ignored at shell entry
         if the shell is not interactive. */
       if (!interactive_shell && XHANDLER (i) == SIG_IGN)
@@ -291,6 +302,7 @@ initialize_shell_signals ()
     {
       set_signal_handler (SIGINT, sigint_sighandler);
       set_signal_handler (SIGTERM, SIG_IGN);
+      set_sigwinch_handler ();
     }
 }
 
@@ -316,6 +328,7 @@ reset_terminating_signals ()
        continue;
 
       act.sa_handler = XHANDLER (i);
+      act.sa_flags = XSAFLAGS (i);
       sigaction (XSIG (i), &act, (struct sigaction *) NULL);
     }
 #else /* !HAVE_POSIX_SIGNALS */
@@ -408,10 +421,14 @@ sighandler
 termination_unwind_protect (sig)
      int sig;
 {
+  /* I don't believe this condition ever tests true. */
   if (sig == SIGINT && signal_is_trapped (SIGINT))
     run_interrupt_trap ();
 
 #if defined (HISTORY)
+  /* This might be unsafe, since it eventually calls functions POSIX says
+     not to call from signal handlers.  If it's a problem, take this code
+     out. */
   if (interactive_shell && sig != SIGABRT)
     maybe_save_shell_history ();
 #endif /* HISTORY */
@@ -456,6 +473,35 @@ sigint_sighandler (sig)
   SIGRETURN (0);
 }
 
+#if defined (SIGWINCH)
+sighandler
+sigwinch_sighandler (sig)
+     int sig;
+{
+#if defined (MUST_REINSTALL_SIGHANDLERS)
+  set_signal_handler (SIGWINCH, sigwinch_sighandler);
+#endif /* MUST_REINSTALL_SIGHANDLERS */
+  sigwinch_received = 1;
+  SIGRETURN (0);
+}
+#endif /* SIGWINCH */
+
+void
+set_sigwinch_handler ()
+{
+#if defined (SIGWINCH)
+ old_winch = set_signal_handler (SIGWINCH, sigwinch_sighandler);
+#endif
+}
+
+void
+unset_sigwinch_handler ()
+{
+#if defined (SIGWINCH)
+  set_signal_handler (SIGWINCH, old_winch);
+#endif
+}
+
 /* Signal functions used by the rest of the code. */
 #if !defined (HAVE_POSIX_SIGNALS)
 
diff --git a/sig.h b/sig.h
index 2b4c115..a13f54c 100644 (file)
--- a/sig.h
+++ b/sig.h
@@ -1,6 +1,6 @@
 /* sig.h -- header file for signal handler definitions. */
 
-/* Copyright (C) 1994 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -108,6 +108,9 @@ do { \
 
 #endif /* JOB_CONTROL */
 
+/* Extern variables */
+extern volatile int sigwinch_received;
+
 /* Functions from sig.c. */
 extern sighandler termination_unwind_protect __P((int));
 extern sighandler sigint_sighandler __P((int));
@@ -117,6 +120,10 @@ extern void reset_terminating_signals __P((void));
 extern void throw_to_top_level __P((void));
 extern void jump_to_top_level __P((int)) __attribute__((__noreturn__));
 
+extern sighandler sigwinch_sighandler __P((int));
+extern void set_sigwinch_handler __P((void));
+extern void unset_sigwinch_handler __P((void));
+
 /* Functions defined in trap.c. */
 extern SigHandler *set_sigint_handler __P((void));
 extern SigHandler *trap_to_sighandler __P((int));
diff --git a/subst.c b/subst.c
index dbaecd6..73887ab 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -1,10 +1,10 @@
-/* subst.c -- The part of the shell that does parameter, command, and
-   globbing substitutions. */
+/* subst.c -- The part of the shell that does parameter, command, arithmetic,
+   and globbing substitutions. */
 
 /* ``Have a little faith, there's magic in the night.  You ain't a
      beauty, but, hey, you're alright.'' */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -81,6 +81,7 @@ extern int errno;
 /* Flags for the string extraction functions. */
 #define EX_NOALLOC     0x01    /* just skip; don't return substring */
 #define EX_VARNAME     0x02    /* variable name; for string_extract () */
+#define EX_REQMATCH    0x04    /* closing/matching delimiter required */
 
 /* Flags for the `pflags' argument to param_expand() */
 #define PF_NOCOMSUB    0x01    /* Do not perform command substitution */
@@ -124,7 +125,13 @@ pid_t current_command_subst_pid = NO_PID;
 SHELL_VAR *ifs_var;
 char *ifs_value;
 unsigned char ifs_cmap[UCHAR_MAX + 1];
+
+#if defined (HANDLE_MULTIBYTE)
+unsigned char ifs_firstc[MB_LEN_MAX];
+size_t ifs_firstc_len;
+#else
 unsigned char ifs_firstc;
+#endif
 
 /* Extern functions and variables from different files. */
 extern int last_command_exit_value, last_command_exit_signal;
@@ -157,7 +164,9 @@ static int glob_argv_flags_size;
 #endif
 
 static WORD_LIST expand_word_error, expand_word_fatal;
+static WORD_DESC expand_wdesc_error, expand_wdesc_fatal;
 static char expand_param_error, expand_param_fatal;
+static char extract_string_error, extract_string_fatal;
 
 /* Tell the expansion functions to not longjmp back to top_level on fatal
    errors.  Enabled when doing completion and prompt string expansion. */
@@ -198,9 +207,12 @@ static char *remove_quoted_nulls __P((char *));
 static int unquoted_substring __P((char *, char *));
 static int unquoted_member __P((int, char *));
 
-static int do_assignment_internal __P((const char *, int));
+#if defined (ARRAY_VARS)
+static SHELL_VAR *do_compound_assignment __P((char *, char *, int));
+#endif
+static int do_assignment_internal __P((const WORD_DESC *, int));
 
-static char *string_extract_verbatim __P((char *, int *, char *));
+static char *string_extract_verbatim __P((char *, size_t, int *, char *));
 static char *string_extract __P((char *, int *, char *, int));
 static char *string_extract_double_quoted __P((char *, int *, int));
 static inline char *string_extract_single_quoted __P((char *, int *));
@@ -250,9 +262,9 @@ static arrayind_t array_length_reference __P((char *));
 static int valid_brace_expansion_word __P((char *, int));
 static int chk_atstar __P((char *, int, int *, int *));
 
-static char *parameter_brace_expand_word __P((char *, int, int));
-static char *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
-static char *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
+static WORD_DESC *parameter_brace_expand_word __P((char *, int, int));
+static WORD_DESC *parameter_brace_expand_indir __P((char *, int, int, int *, int *));
+static WORD_DESC *parameter_brace_expand_rhs __P((char *, char *, int, int, int *, int *));
 static void parameter_brace_expand_error __P((char *, char *));
 
 static int valid_length_expression __P((char *));
@@ -268,8 +280,8 @@ static char *pos_params_pat_subst __P((char *, char *, char *, int));
 
 static char *parameter_brace_patsub __P((char *, char *, char *, int));
 
-static char *parameter_brace_expand __P((char *, int *, int, int *, int *));
-static char *param_expand __P((char *, int *, int, int *, int *, int *, int *, int));
+static WORD_DESC *parameter_brace_expand __P((char *, int *, int, int *, int *));
+static WORD_DESC *param_expand __P((char *, int *, int, int *, int *, int *, int *, int));
 
 static WORD_LIST *expand_word_internal __P((WORD_DESC *, int, int, int *, int *));
 
@@ -533,7 +545,8 @@ sub_append_number (number, target, indx, size)
    is non-zero, and array variables have been compiled into the shell,
    everything between a `[' and a corresponding `]' is skipped over.
    If (flags & EX_NOALLOC) is non-zero, don't return the substring, just
-   update SINDEX. */
+   update SINDEX.  If (flags & EX_REQMATCH) is non-zero, the string must
+   contain a closing character from CHARLIST. */
 static char *
 string_extract (string, sindex, charlist, flags)
      char *string;
@@ -542,12 +555,14 @@ string_extract (string, sindex, charlist, flags)
      int flags;
 {
   register int c, i;
+  int found;
   size_t slen;
   char *temp;
   DECLARE_MBSTATE;
 
-  slen = strlen (string + *sindex) + *sindex;
+  slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 0;
   i = *sindex;
+  found = 0;
   while (c = string[i])
     {
       if (c == '\\')
@@ -568,13 +583,25 @@ string_extract (string, sindex, charlist, flags)
        }
 #endif
       else if (MEMBER (c, charlist))
+       {
+         found = 1;
          break;
+       }
 
       ADVANCE_CHAR (string, slen, i);
     }
 
+  /* If we had to have a matching delimiter and didn't find one, return an
+     error and let the caller deal with it. */
+  if ((flags & EX_REQMATCH) && found == 0)
+    {
+      *sindex = i;
+      return (&extract_string_error);
+    }
+  
   temp = (flags & EX_NOALLOC) ? (char *)NULL : substring (string, *sindex, i);
   *sindex = i;
+  
   return (temp);
 }
 
@@ -785,7 +812,7 @@ skip_double_quoted (string, slen, sind)
        {
          si = i + 2;
          if (string[i + 1] == LPAREN)
-           ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC);
+           ret = extract_delimited_string (string, &si, "$(", "(", ")", EX_NOALLOC); /* ) */
          else
            ret = extract_dollar_brace_string (string, &si, 0, EX_NOALLOC);
 
@@ -821,7 +848,8 @@ string_extract_single_quoted (string, sindex)
   char *t;
   DECLARE_MBSTATE;
 
-  slen = strlen (string + *sindex) + *sindex;
+  /* Don't need slen for ADVANCE_CHAR unless multibyte chars possible. */
+  slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 0;
   i = *sindex;
   while (string[i] && string[i] != '\'')
     ADVANCE_CHAR (string, slen, i);
@@ -856,14 +884,20 @@ skip_single_quoted (string, slen, sind)
 /* Just like string_extract, but doesn't hack backslashes or any of
    that other stuff.  Obeys CTLESC quoting.  Used to do splitting on $IFS. */
 static char *
-string_extract_verbatim (string, sindex, charlist)
+string_extract_verbatim (string, slen, sindex, charlist)
      char *string;
+     size_t slen;
      int *sindex;
      char *charlist;
 {
   register int i = *sindex;
+#if defined (HANDLE_MULTIBYTE)
+  size_t clen;
+  wchar_t *wcharlist;
+#endif
   int c;
   char *temp;
+  DECLARE_MBSTATE;
 
   if (charlist[0] == '\'' && charlist[1] == '\0')
     {
@@ -872,18 +906,66 @@ string_extract_verbatim (string, sindex, charlist)
       return temp;
     }
 
-  for (i = *sindex; c = string[i]; i++)
+  i = *sindex;
+#if 0
+  /* See how the MBLEN and ADVANCE_CHAR macros work to understand why we need
+     this only if MB_CUR_MAX > 1. */
+  slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 1;
+#endif
+#if defined (HANDLE_MULTIBYTE)
+  clen = strlen (charlist);
+  wcharlist = 0;
+#endif
+  while (c = string[i])
     {
+#if defined (HANDLE_MULTIBYTE)
+      size_t mblength;
+#endif
       if (c == CTLESC)
        {
-         i++;
+         i += 2;
          continue;
        }
 
+#if defined (HANDLE_MULTIBYTE)
+      mblength = MBLEN (string + i, slen - i);
+      if (mblength > 1)
+       {
+         wchar_t wc;
+         mblength = mbtowc (&wc, string + i, slen - i);
+         if (MB_INVALIDCH (mblength))
+           {
+             if (MEMBER (c, charlist))
+               break;
+           }
+         else
+           {
+             if (wcharlist == 0)
+               {
+                 size_t len;
+                 len = mbstowcs (wcharlist, charlist, 0);
+                 if (len == -1)
+                   len = 0;
+                 wcharlist = xmalloc ((sizeof (wchar_t) * len) + 1);
+                 mbstowcs (wcharlist, charlist, len);
+               }
+
+             if (wcschr (wcharlist, wc))
+               break;
+           }
+       }
+      else             
+#endif
       if (MEMBER (c, charlist))
        break;
+
+      ADVANCE_CHAR (string, slen, i);
     }
 
+#if defined (HANDLE_MULTIBYTE)
+  FREE (wcharlist);
+#endif
+
   temp = substring (string, *sindex, i);
   *sindex = i;
 
@@ -892,13 +974,13 @@ string_extract_verbatim (string, sindex, charlist)
 
 /* Extract the $( construct in STRING, and return a new string.
    Start extracting at (SINDEX) as if we had just seen "$(".
-   Make (SINDEX) get the position of the matching ")". */
+   Make (SINDEX) get the position of the matching ")". */
 char *
 extract_command_subst (string, sindex)
      char *string;
      int *sindex;
 {
-  return (extract_delimited_string (string, sindex, "$(", "(", ")", 0));
+  return (extract_delimited_string (string, sindex, "$(", "(", ")", 0)); /*)*/
 }
 
 /* Extract the $[ construct in STRING, and return a new string. (])
@@ -927,12 +1009,25 @@ extract_process_subst (string, starter, sindex)
 #endif /* PROCESS_SUBSTITUTION */
 
 #if defined (ARRAY_VARS)
+/* This can be fooled by unquoted right parens in the passed string. If
+   each caller verifies that the last character in STRING is a right paren,
+   we don't even need to call extract_delimited_string. */
 char *
 extract_array_assignment_list (string, sindex)
      char *string;
      int *sindex;
 {
-  return (extract_delimited_string (string, sindex, "(", (char *)NULL, ")", 0));
+  int slen;
+  char *ret;
+
+  slen = strlen (string);      /* ( */
+  if (string[slen - 1] == ')')
+   {
+      ret = substring (string, *sindex, slen - 1);
+      *sindex = slen - 1;
+      return ret;
+    }
+  return 0;  
 }
 #endif
 
@@ -1456,11 +1551,36 @@ split_at_delims (string, slen, delims, sentinel, nwp, cwp)
   d2 = 0;
   if (delims)
     {
-      d2 = (char *)xmalloc (strlen (delims) + 1);
-      for (i = ts = 0; delims[i]; i++)
+      size_t slength;
+#if defined (HANDLE_MULTIBYTE)
+      size_t mblength = 1;
+#endif
+      DECLARE_MBSTATE;
+
+      slength = strlen (delims);
+      d2 = (char *)xmalloc (slength + 1);
+      i = ts = 0;
+      while (delims[i])
        {
-         if (whitespace(delims[i]) == 0)
+#if defined (HANDLE_MULTIBYTE)
+         mbstate_t state_bak = state;
+         mblength = MBRLEN (delims + i, slength, &state);
+         if (MB_INVALIDCH (mblength))
+           state = state_bak;
+         else if (mblength > 1)
+           {
+             memcpy (d2 + ts, delims + i, mblength);
+             ts += mblength;
+             i += mblength;
+             slength -= mblength;
+             continue;
+           }
+#endif
+         if (whitespace (delims[i]) == 0)
            d2[ts++] = delims[i];
+
+         i++;
+         slength--;
        }
       d2[ts] = '\0';
     }
@@ -1654,10 +1774,28 @@ char *
 string_list_dollar_star (list)
      WORD_LIST *list;
 {
+#if defined (HANDLE_MULTIBYTE)
+  char sep[MB_CUR_MAX + 1];
+#else
   char sep[2];
+#endif
 
+
+#if defined (HANDLE_MULTIBYTE)
+  if (ifs_firstc_len == 1)
+    {
+      sep[0] = ifs_firstc[0];
+      sep[1] = '\0';
+    }
+  else
+    {
+      memcpy (sep, ifs_firstc, ifs_firstc_len);
+      sep[ifs_firstc_len] = '\0';
+    }
+#else
   sep[0] = ifs_firstc;
   sep[1] = '\0';
+#endif
 
   return (string_list_internal (list, sep));
 }
@@ -1676,14 +1814,40 @@ string_list_dollar_at (list, quoted)
      WORD_LIST *list;
      int quoted;
 {
-  char *ifs, sep[2];
+  char *ifs, *ret;
+#if defined (HANDLE_MULTIBYTE)
+  char sep[MB_CUR_MAX + 1];
+#else
+  char sep[2];
+#endif
   WORD_LIST *tlist;
 
   /* XXX this could just be ifs = ifs_value; */
   ifs = ifs_var ? value_cell (ifs_var) : (char *)0;
 
+#if defined (HANDLE_MULTIBYTE)
+  if (ifs && *ifs)
+    {
+      if (ifs_firstc_len == 1)
+       {
+         sep[0] = ifs_firstc[0];
+         sep[1] = '\0';
+       }
+      else
+       {
+         memcpy (sep, ifs_firstc, ifs_firstc_len);
+         sep[ifs_firstc_len] = '\0';
+       }
+    }
+  else
+    {
+      sep[0] = ' ';
+      sep[1] = '\0';
+    }
+#else
   sep[0] = (ifs == 0 || *ifs == 0) ? ' ' : *ifs;
   sep[1] = '\0';
+#endif
 
   tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0))
                ? quote_list (list)
@@ -1732,6 +1896,7 @@ list_string (string, separators, quoted)
   WORD_DESC *t;
   char *current_word, *s;
   int sindex, sh_style_split, whitesep;
+  size_t slen;
 
   if (!string || !*string)
     return ((WORD_LIST *)NULL);
@@ -1741,6 +1906,7 @@ list_string (string, separators, quoted)
                                 separators[2] == '\n' &&
                                 separators[3] == '\0';
 
+  slen = 0;
   /* Remove sequences of whitespace at the beginning of STRING, as
      long as those characters appear in IFS.  Do not do this if
      STRING is quoted or if there are no separator characters. */
@@ -1759,9 +1925,12 @@ list_string (string, separators, quoted)
        extract a word, stopping at a separator
        skip sequences of spc, tab, or nl as long as they are separators
      This obeys the field splitting rules in Posix.2. */
+  slen = (MB_CUR_MAX > 1) ? strlen (string) : 1;
   for (result = (WORD_LIST *)NULL, sindex = 0; string[sindex]; )
     {
-      current_word = string_extract_verbatim (string, &sindex, separators);
+      /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim
+        unless multibyte chars are possible. */
+      current_word = string_extract_verbatim (string, slen, &sindex, separators);
       if (current_word == 0)
        break;
 
@@ -1771,10 +1940,9 @@ list_string (string, separators, quoted)
         below. */
       if (QUOTED_NULL (current_word))
        {
-         t = make_bare_word ("");
-         t->flags |= W_QUOTED;
-         free (t->word);
+         t = alloc_word_desc ();
          t->word = make_quoted_char ('\0');
+         t->flags |= W_QUOTED|W_HASQUOTEDNULL;
          result = make_word_list (t, result);
        }
       else if (current_word[0] != '\0')
@@ -1783,6 +1951,7 @@ list_string (string, separators, quoted)
             perform quoted null character removal on the current word. */
          remove_quoted_nulls (current_word);
          result = add_string_to_list (current_word, result);
+         result->word->flags &= ~W_HASQUOTEDNULL;      /* just to be sure */
          if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
            result->word->flags |= W_QUOTED;
        }
@@ -1791,10 +1960,9 @@ list_string (string, separators, quoted)
         Bourne shell style, then add a quoted null argument. */
       else if (!sh_style_split && !spctabnl (string[sindex]))
        {
-         t = make_bare_word ("");
-         t->flags |= W_QUOTED;
-         free (t->word);
+         t = alloc_word_desc ();
          t->word = make_quoted_char ('\0');
+         t->flags |= W_QUOTED|W_HASQUOTEDNULL;
          result = make_word_list (t, result);
        }
 
@@ -1805,7 +1973,10 @@ list_string (string, separators, quoted)
 
       /* Move past the current separator character. */
       if (string[sindex])
-       sindex++;
+       {
+         DECLARE_MBSTATE;
+         ADVANCE_CHAR (string, slen, sindex);
+       }
 
       /* Now skip sequences of space, tab, or newline characters if they are
         in the list of separators. */
@@ -1817,7 +1988,13 @@ list_string (string, separators, quoted)
         field delimiter, not a separate delimiter that would result in an
         empty field.  Look at POSIX.2, 3.6.5, (3)(b). */
       if (string[sindex] && whitesep && issep (string[sindex]) && !spctabnl (string[sindex]))
-       sindex++;
+       {
+         sindex++;
+         /* An IFS character that is not IFS white space, along with any
+            adjacent IFS white space, shall delimit a field. (SUSv3) */
+         while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
+           sindex++;
+       }
     }
   return (REVERSE_LIST (result, WORD_LIST *));
 }
@@ -1836,6 +2013,7 @@ get_word_from_string (stringp, separators, endptr)
   register char *s;
   char *current_word;
   int sindex, sh_style_split, whitesep;
+  size_t slen;
 
   if (!stringp || !*stringp || !**stringp)
     return ((char *)NULL);
@@ -1847,6 +2025,8 @@ get_word_from_string (stringp, separators, endptr)
                                 separators[2] == '\n' &&
                                 separators[3] == '\0';
 
+  slen = 0;
+
   /* Remove sequences of whitespace at the beginning of STRING, as
      long as those characters appear in IFS. */
   if (sh_style_split || !separators || !*separators)
@@ -1870,7 +2050,10 @@ get_word_from_string (stringp, separators, endptr)
 
      This obeys the field splitting rules in Posix.2. */
   sindex = 0;
-  current_word = string_extract_verbatim (s, &sindex, separators);
+  /* Don't need string length in ADVANCE_CHAR or string_extract_verbatim
+     unless multibyte chars are possible. */
+  slen = (MB_CUR_MAX > 1) ? strlen (s) : 1;
+  current_word = string_extract_verbatim (s, slen, &sindex, separators);
 
   /* Set ENDPTR to the first character after the end of the word. */
   if (endptr)
@@ -1881,7 +2064,10 @@ get_word_from_string (stringp, separators, endptr)
 
   /* Move past the current separator character. */
   if (s[sindex])
-    sindex++;
+    {
+      DECLARE_MBSTATE;
+      ADVANCE_CHAR (s, slen, sindex);
+    }
 
   /* Now skip sequences of space, tab, or newline characters if they are
      in the list of separators. */
@@ -1893,7 +2079,13 @@ get_word_from_string (stringp, separators, endptr)
      delimiter, not a separate delimiter that would result in an empty field.
      Look at POSIX.2, 3.6.5, (3)(b). */
   if (s[sindex] && whitesep && isifs (s[sindex]) && !spctabnl (s[sindex]))
-    sindex++;
+    {
+      sindex++;
+      /* An IFS character that is not IFS white space, along with any adjacent
+        IFS white space, shall delimit a field. */
+      while (s[sindex] && spctabnl (s[sindex]) && isifs (s[sindex]))
+       sindex++;
+    }
 
   /* Update STRING to point to the next field. */
   *stringp = s + sindex;
@@ -1981,25 +2173,55 @@ list_string_with_quotes (string)
 /*                                                     */
 /********************************************************/
 
+#if defined (ARRAY_VARS)
+static SHELL_VAR *
+do_compound_assignment (name, value, flags)
+     char *name, *value;
+     int flags;
+{
+  SHELL_VAR *v;
+  int off, mklocal;
+
+  mklocal = flags & ASS_MKLOCAL;
+
+  if (mklocal && variable_context)
+    {
+      v = find_variable (name);
+      if (v == 0 || array_p (v) == 0)
+        v = make_local_array_variable (name);
+      v = assign_array_var_from_string (v, value, flags);
+    }
+  else
+    v = assign_array_from_string (name, value, flags);
+
+  return (v);
+}
+#endif
+
 /* Given STRING, an assignment string, get the value of the right side
    of the `=', and bind it to the left side.  If EXPAND is true, then
    perform parameter expansion, command substitution, and arithmetic
    expansion on the right-hand side.  Perform tilde expansion in any
    case.  Do not perform word splitting on the result of expansion. */
 static int
-do_assignment_internal (string, expand)
-     const char *string;
+do_assignment_internal (word, expand)
+     const WORD_DESC *word;
      int expand;
 {
-  int offset;
-  char *name, *value;
+  int offset, tlen, appendop, assign_list, aflags;
+  char *name, *value, *ovalue, *nvalue;
   SHELL_VAR *entry;
 #if defined (ARRAY_VARS)
   char *t;
   int ni;
 #endif
-  int assign_list = 0;
+  const char *string;
 
+  if (word == 0 || word->word == 0)
+    return 0;
+
+  appendop = assign_list = aflags = 0;
+  string = word->word;
   offset = assignment (string, 0);
   name = savestring (string);
   value = (char *)NULL;
@@ -2008,28 +2230,31 @@ do_assignment_internal (string, expand)
     {
       char *temp;
 
-      name[offset] = 0;
+      if (name[offset - 1] == '+')
+       {
+         appendop = 1;
+         name[offset - 1] = '\0';
+       }
+
+      name[offset] = 0;                /* might need this set later */
       temp = name + offset + 1;
+      tlen = STRLEN (temp);
 
 #if defined (ARRAY_VARS)
-      if (expand && temp[0] == LPAREN && xstrchr (temp, RPAREN))
+#  if 0
+      if (expand && temp[0] == LPAREN && temp[tlen-1] == RPAREN)
+#else
+      if (expand && (word->flags & W_COMPASSIGN))
+#endif
        {
          assign_list = ni = 1;
-         value = extract_delimited_string (temp, &ni, "(", (char *)NULL, ")", 0);
+         value = extract_array_assignment_list (temp, &ni);
        }
       else
 #endif
 
-      /* Perform tilde expansion. */
       if (expand && temp[0])
-       {
-         temp = (xstrchr (temp, '~') && unquoted_member ('~', temp))
-                       ? bash_tilde_expand (temp, 1)
-                       : savestring (temp);
-
-         value = expand_string_if_necessary (temp, 0, expand_string_unsplit);
-         free (temp);
-       }
+       value = expand_string_if_necessary (temp, 0, expand_string_assignment);
       else
        value = savestring (temp);
     }
@@ -2041,10 +2266,19 @@ do_assignment_internal (string, expand)
     }
 
   if (echo_command_at_execute)
-     xtrace_print_assignment (name, value, assign_list, 1);
+    {
+      if (appendop)
+       name[offset - 1] = '+';
+      xtrace_print_assignment (name, value, assign_list, 1);
+      if (appendop)
+       name[offset - 1] = '\0';
+    }
 
 #define ASSIGN_RETURN(r)       do { FREE (value); free (name); return (r); } while (0)
 
+  if (appendop)
+    aflags |= ASS_APPEND;
+
 #if defined (ARRAY_VARS)
   if (t = xstrchr (name, '[')) /*]*/
     {
@@ -2053,15 +2287,19 @@ do_assignment_internal (string, expand)
          report_error (_("%s: cannot assign list to array member"), name);
          ASSIGN_RETURN (0);
        }
-      entry = assign_array_element (name, value);
+      entry = assign_array_element (name, value, aflags);
       if (entry == 0)
        ASSIGN_RETURN (0);
     }
   else if (assign_list)
-    entry = assign_array_from_string (name, value);
+    {
+      if (word->flags & W_ASSIGNARG)
+       aflags |= ASS_MKLOCAL;
+      entry = do_compound_assignment (name, value, aflags);
+    }
   else
 #endif /* ARRAY_VARS */
-  entry = bind_variable (name, value);
+  entry = bind_variable (name, value, aflags);
 
   stupidly_hack_special_variables (name);
 
@@ -2073,22 +2311,39 @@ do_assignment_internal (string, expand)
 }
 
 /* Perform the assignment statement in STRING, and expand the
-   right side by doing command and parameter expansion. */
+   right side by doing tilde, command and parameter expansion. */
 int
 do_assignment (string)
-     const char *string;
+     char *string;
 {
-  return do_assignment_internal (string, 1);
+  WORD_DESC td;
+
+  td.flags = W_ASSIGNMENT;
+  td.word = string;
+
+  return do_assignment_internal (&td, 1);
+}
+
+int
+do_word_assignment (word)
+     WORD_DESC *word;
+{
+  return do_assignment_internal (word, 1);
 }
 
 /* Given STRING, an assignment string, get the value of the right side
-   of the `=', and bind it to the left side.  Do not do command and
-   parameter substitution on the right hand side. */
+   of the `=', and bind it to the left side.  Do not perform any word
+   expansions on the right hand side. */
 int
 do_assignment_no_expand (string)
-     const char *string;
+     char *string;
 {
-  return do_assignment_internal (string, 0);
+  WORD_DESC td;
+
+  td.flags = W_ASSIGNMENT;
+  td.word = string;
+
+  return (do_assignment_internal (&td, 0));
 }
 
 /***************************************************
@@ -2197,9 +2452,6 @@ pos_params (string, start, end, quoted)
 
   t->next = (WORD_LIST *)NULL;
   if (string[0] == '*')
-#if 0
-    ret = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (quote_list (h)) : string_list (h);
-#else
     {
       if (quoted & Q_DOUBLE_QUOTES)
        ret = string_list_dollar_star (quote_list (h));
@@ -2208,7 +2460,6 @@ pos_params (string, start, end, quoted)
       else
        ret = string_list (h);
     }
-#endif
   else
     ret = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (h) : h);
   if (t != params)
@@ -2225,9 +2476,9 @@ pos_params (string, start, end, quoted)
 /******************************************************************/
 
 #if defined (PROCESS_SUBSTITUTION)
-#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC)
+#define EXP_CHAR(s) (s == '$' || s == '`' || s == '<' || s == '>' || s == CTLESC || s == '~')
 #else
-#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC)
+#define EXP_CHAR(s) (s == '$' || s == '`' || s == CTLESC || s == '~')
 #endif
 
 /* If there are any characters in STRING that require full expansion,
@@ -2245,7 +2496,8 @@ expand_string_if_necessary (string, quoted, func)
   char *ret;
   DECLARE_MBSTATE;
 
-  slen = strlen (string);
+  /* Don't need string length for ADVANCE_CHAR unless multibyte chars possible. */
+  slen = (MB_CUR_MAX > 1) ? strlen (string) : 0;
   i = saw_quote = 0;
   while (string[i])
     {
@@ -2315,6 +2567,14 @@ expand_string_unsplit_to_string (string, quoted)
   return (expand_string_to_string_internal (string, quoted, expand_string_unsplit));
 }
 
+char *
+expand_assignment_string_to_string (string, quoted)
+     char *string;
+     int quoted;
+{
+  return (expand_string_to_string_internal (string, quoted, expand_string_assignment));
+}
+
 #if defined (COND_COMMAND)
 /* Just remove backslashes in STRING.  Returns a new string. */
 char *
@@ -2354,13 +2614,6 @@ cond_expand_word (w, special)
   if (w->word == 0 || w->word[0] == '\0')
     return ((char *)NULL);
 
-  if (xstrchr (w->word, '~') && unquoted_member ('~', w->word))
-    {
-      p = bash_tilde_expand (w->word, 0);
-      free (w->word);
-      w->word = p;
-    }
-
   l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
   if (l)
     {
@@ -2454,7 +2707,43 @@ expand_string_unsplit (string, quoted)
   if (value)
     {
       if (value->word)
-       remove_quoted_nulls (value->word->word);
+       {
+         remove_quoted_nulls (value->word->word);
+         value->word->flags &= ~W_HASQUOTEDNULL;
+       }
+      dequote_list (value);
+    }
+  return (value);
+}
+
+/* Expand the rhs of an assignment statement */
+WORD_LIST *
+expand_string_assignment (string, quoted)
+     char *string;
+     int quoted;
+{
+  WORD_DESC td;
+  WORD_LIST *value;
+
+  if (string == 0 || *string == '\0')
+    return ((WORD_LIST *)NULL);
+
+  expand_no_split_dollar_star = 1;
+
+  td.flags = W_ASSIGNRHS;
+  td.word = savestring (string);
+  value = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL);
+  FREE (td.word);
+
+  expand_no_split_dollar_star = 0;
+
+  if (value)
+    {
+      if (value->word)
+       {
+         remove_quoted_nulls (value->word->word);
+         value->word->flags &= ~W_HASQUOTEDNULL;
+       }
       dequote_list (value);
     }
   return (value);
@@ -2492,7 +2781,10 @@ expand_prompt_string (string, quoted)
   if (value)
     {
       if (value->word)
-       remove_quoted_nulls (value->word->word);
+       {
+         remove_quoted_nulls (value->word->word);
+         value->word->flags &= ~W_HASQUOTEDNULL;
+       }
       dequote_list (value);
     }
   return (value);
@@ -2871,7 +3163,10 @@ word_list_remove_quoted_nulls (list)
   register WORD_LIST *t;
 
   for (t = list; t; t = t->next)
-    remove_quoted_nulls (t->word->word);
+    {
+      remove_quoted_nulls (t->word->word);
+      t->word->flags &= ~W_HASQUOTEDNULL;
+    }
 }
 
 /* **************************************************************** */
@@ -3168,9 +3463,38 @@ match_upattern (string, pat, mtype, sp, ep)
      char **sp, **ep;
 {
   int c, len;
-  register char *p, *p1;
+  register char *p, *p1, *npat;
   char *end;
 
+  /* If the pattern doesn't match anywhere in the string, go ahead and
+     short-circuit right away.  A minor optimization, saves a bunch of
+     unnecessary calls to strmatch (up to N calls for a string of N
+     characters) if the match is unsuccessful.  To preserve the semantics
+     of the substring matches below, we make sure that the pattern has
+     `*' as first and last character, making a new pattern if necessary. */
+  /* XXX - check this later if I ever implement `**' with special meaning,
+     since this will potentially result in `**' at the beginning or end */
+  len = STRLEN (pat);
+  if (pat[0] != '*' || pat[len - 1] != '*')
+    {
+      p = npat = xmalloc (len + 3);
+      p1 = pat;
+      if (*p1 != '*')
+       *p++ = '*';
+      while (*p1)
+       *p++ = *p1++;
+      if (p1[-1] != '*' || p[-2] == '\\')
+       *p++ = '*';
+      *p = '\0';
+    }
+  else
+    npat = pat;
+  c = strmatch (npat, string, FNMATCH_EXTFLAG);
+  if (npat != pat)
+    free (npat);
+  if (c == FNM_NOMATCH)
+    return (0);
+
   len = STRLEN (string);
   end = string + len;
 
@@ -3278,7 +3602,7 @@ match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep)
      int mtype;
      char **sp, **ep;
 {
-  wchar_t wc;
+  wchar_t wc, *wp, *nwpat, *wp1;
   int len;
 #if 0
   size_t n, n1;        /* Apple's gcc seems to miscompile this badly */
@@ -3286,6 +3610,35 @@ match_wpattern (wstring, indices, wstrlen, wpat, mtype, sp, ep)
   int n, n1;
 #endif
 
+  /* If the pattern doesn't match anywhere in the string, go ahead and
+     short-circuit right away.  A minor optimization, saves a bunch of
+     unnecessary calls to strmatch (up to N calls for a string of N
+     characters) if the match is unsuccessful.  To preserve the semantics
+     of the substring matches below, we make sure that the pattern has
+     `*' as first and last character, making a new pattern if necessary. */
+  /* XXX - check this later if I ever implement `**' with special meaning,
+     since this will potentially result in `**' at the beginning or end */
+  len = wcslen (wpat);
+  if (wpat[0] != L'*' || wpat[len - 1] != L'*')
+    {
+      wp = nwpat = xmalloc ((len + 3) * sizeof (wchar_t));
+      wp1 = wpat;
+      if (*wp1 != L'*')
+       *wp++ = L'*';
+      while (*wp1 != L'\0')
+       *wp++ = *wp1++;
+      if (wp1[-1] != L'*' || wp1[-2] == L'\\')
+        *wp++ = L'*';
+      *wp = '\0';
+    }
+  else
+    nwpat = wpat;
+  len = wcsmatch (nwpat, wstring, FNMATCH_EXTFLAG);
+  if (nwpat != wpat)
+    free (nwpat);
+  if (len == FNM_NOMATCH)
+    return (0);
+
   switch (mtype)
     {
     case MATCH_ANY:
@@ -3416,8 +3769,6 @@ getpattern (value, quoted, expandpat)
   WORD_LIST *l;
   int i;
 
-  tword = xstrchr (value, '~') ? bash_tilde_expand (value, 0) : savestring (value);
-
   /* There is a problem here:  how to handle single or double quotes in the
      pattern string when the whole expression is between double quotes?
      POSIX.2 says that enclosing double quotes do not cause the pattern to
@@ -3435,11 +3786,10 @@ getpattern (value, quoted, expandpat)
 
   /* expand_string_for_rhs () leaves WORD quoted and does not perform
      word splitting. */
-  l = *tword ? expand_string_for_rhs (tword,
+  l = *value ? expand_string_for_rhs (value,
                                      (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? Q_PATQUOTE : quoted,
                                      (int *)NULL, (int *)NULL)
             : (WORD_LIST *)0;
-  free (tword);
   pat = string_list (l);
   dispose_words (l);
   if (pat)
@@ -3480,18 +3830,14 @@ list_remove_pattern (list, pattern, patspec, itype, quoted)
   for (new = (WORD_LIST *)NULL, l = list; l; l = l->next)
     {
       tword = remove_pattern (l->word->word, pattern, patspec);
-      w = make_bare_word (tword);
-      FREE (tword);
+      w = alloc_word_desc ();
+      w->word = tword ? tword : savestring ("");
       new = make_word_list (w, new);
     }
 
   l = REVERSE_LIST (new, WORD_LIST *);
   if (itype == '*')
-#if 0
-    tword = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? string_list_dollar_star (l) : string_list (l);
-#else
     tword = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (l) : string_list (l);
-#endif
   else
     tword = string_list ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) ? quote_list (l) : l);
 
@@ -4129,7 +4475,7 @@ command_substitute (string, quoted)
      char *string;
      int quoted;
 {
-  pid_t pid, old_pid, old_pipeline_pgrp;
+  pid_t pid, old_pid, old_pipeline_pgrp, old_async_pid;
   char *istring;
   int result, fildes[2], function_value, pflags, rc;
 
@@ -4175,9 +4521,16 @@ command_substitute (string, quoted)
   if ((subshell_environment & SUBSHELL_PIPE) == 0)
     pipeline_pgrp = shell_pgrp;
   cleanup_the_pipeline ();
-#endif
+#endif /* JOB_CONTROL */
 
+  old_async_pid = last_asynchronous_pid;
+#if 0
   pid = make_child ((char *)NULL, 0);
+#else
+  pid = make_child ((char *)NULL, subshell_environment&SUBSHELL_ASYNC);
+#endif
+  last_asynchronous_pid = old_async_pid;
+
   if (pid == 0)
     /* Reset the signal handlers in the child, but don't free the
        trap strings. */
@@ -4459,18 +4812,21 @@ chk_atstar (name, quoted, quoted_dollar_atp, contains_dollar_at)
    VAR_IS_SPECIAL is non-zero if NAME is one of the special variables in
    the shell, e.g., "@", "$", "*", etc.  QUOTED, if non-zero, means that
    NAME was found inside of a double-quoted expression. */
-static char *
+static WORD_DESC *
 parameter_brace_expand_word (name, var_is_special, quoted)
      char *name;
      int var_is_special, quoted;
 {
+  WORD_DESC *ret;
   char *temp, *tt;
   intmax_t arg_index;
   SHELL_VAR *var;
   int atype;
 
-  /* Handle multiple digit arguments, as in ${11}. */
-  
+  ret = 0;
+  temp = 0;
+
+  /* Handle multiple digit arguments, as in ${11}. */  
   if (legal_number (name, &arg_index))
     {
       tt = get_dollar_var_value (arg_index);
@@ -4489,8 +4845,8 @@ parameter_brace_expand_word (name, var_is_special, quoted)
       tt[sindex = 0] = '$';
       strcpy (tt + 1, name);
 
-      temp = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
-                          (int *)NULL, (int *)NULL, 0);
+      ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
+                         (int *)NULL, (int *)NULL, 0);
       free (tt);
     }
 #if defined (ARRAY_VARS)
@@ -4524,20 +4880,27 @@ parameter_brace_expand_word (name, var_is_special, quoted)
   else
     temp = (char *)NULL;
 
-  return (temp);
+  if (ret == 0)
+    {
+      ret = alloc_word_desc ();
+      ret->word = temp;
+    }
+  return ret;
 }
 
 /* Expand an indirect reference to a variable: ${!NAME} expands to the
    value of the variable whose name is the value of NAME. */
-static char *
+static WORD_DESC *
 parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at)
      char *name;
      int var_is_special, quoted;
      int *quoted_dollar_atp, *contains_dollar_at;
 {
   char *temp, *t;
+  WORD_DESC *w;
 
-  t = parameter_brace_expand_word (name, var_is_special, quoted);
+  w = parameter_brace_expand_word (name, var_is_special, quoted);
+  t = w->word;
   /* Have to dequote here if necessary */
   if (t)
     {
@@ -4547,53 +4910,52 @@ parameter_brace_expand_indir (name, var_is_special, quoted, quoted_dollar_atp, c
       free (t);
       t = temp;
     }
+  dispose_word_desc (w);
+
   chk_atstar (t, quoted, quoted_dollar_atp, contains_dollar_at);
   if (t == 0)
-    return (t);
-  temp = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted);
+    return (WORD_DESC *)NULL;
+
+  w = parameter_brace_expand_word (t, SPECIAL_VAR(t, 0), quoted);
   free (t);
-  return temp;
+
+  return w;
 }
 
 /* Expand the right side of a parameter expansion of the form ${NAMEcVALUE},
    depending on the value of C, the separating character.  C can be one of
    "-", "+", or "=".  QUOTED is true if the entire brace expression occurs
    between double quotes. */
-static char *
+static WORD_DESC *
 parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat)
      char *name, *value;
      int c, quoted, *qdollaratp, *hasdollarat;
 {
+  WORD_DESC *w;
   WORD_LIST *l;
   char *t, *t1, *temp;
   int hasdol;
 
-  /* XXX - Should we tilde expand in an assignment context if C is `='? */
-  if (*value == '~')
-    temp = bash_tilde_expand (value, 0);
-  else if (xstrchr (value, '~')  && unquoted_substring ("=~", value))
-    temp = bash_tilde_expand (value, 1);
-  else
-    temp = savestring (value);
-
   /* If the entire expression is between double quotes, we want to treat
      the value as a double-quoted string, with the exception that we strip
      embedded unescaped double quotes. */
-  if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *temp)
+  if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *value)
     {
       hasdol = 0;
-      t = string_extract_double_quoted (temp, &hasdol, 1);
-      free (temp);
-      temp = t;
+      temp = string_extract_double_quoted (value, &hasdol, 1);
     }
+  else
+    temp = value;
 
+  w = alloc_word_desc ();
   hasdol = 0;
   /* XXX was 0 not quoted */
   l = *temp ? expand_string_for_rhs (temp, quoted, &hasdol, (int *)NULL)
            : (WORD_LIST *)0;
   if (hasdollarat)
     *hasdollarat = hasdol || (l && l->next);
-  free (temp);
+  if (temp != value)
+    free (temp);
   if (l)
     {
       /* The expansion of TEMP returned something.  We need to treat things
@@ -4619,12 +4981,16 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat)
       temp = (char *)xmalloc (2);
       temp[0] = CTLNUL;
       temp[1] = '\0';
+      w->flags |= W_HASQUOTEDNULL;
     }
   else
     temp = (char *)NULL;
 
   if (c == '-' || c == '+')
-    return (temp);
+    {
+      w->word = temp;
+      return w;
+    }
 
   /* c == '=' */
   t = temp ? savestring (temp) : savestring ("");
@@ -4632,12 +4998,14 @@ parameter_brace_expand_rhs (name, value, c, quoted, qdollaratp, hasdollarat)
   free (t);
 #if defined (ARRAY_VARS)
   if (valid_array_reference (name))
-    assign_array_element (name, t1);
+    assign_array_element (name, t1, 0);
   else
 #endif /* ARRAY_VARS */
-  bind_variable (name, t1);
+  bind_variable (name, t1, 0);
   free (t1);
-  return (temp);
+
+  w->word = temp;
+  return w;
 }
 
 /* Deal with the right hand side of a ${name:?value} expansion in the case
@@ -4653,15 +5021,7 @@ parameter_brace_expand_error (name, value)
 
   if (value && *value)
     {
-      if (*value == '~')
-       temp = bash_tilde_expand (value, 0);
-      else if (xstrchr (value, '~')  && unquoted_substring ("=~", value))
-       temp = bash_tilde_expand (value, 1);
-      else
-       temp = savestring (value);
-
-      l = expand_string (temp, 0);
-      FREE (temp);
+      l = expand_string (value, 0);
       temp =  string_list (l);
       report_error ("%s: %s", name, temp ? temp : ""); /* XXX was value not "" */
       FREE (temp);
@@ -4697,14 +5057,22 @@ mbstrlen (s)
      const char *s;
 {
   size_t clen, nc;
-  mbstate_t mbs;
+  mbstate_t mbs, mbsbak;
 
   nc = 0;
   memset (&mbs, 0, sizeof (mbs));
-  while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && (MB_INVALIDCH(clen) == 0))
+  mbsbak = mbs;
+  while ((clen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0)
     {
+      if (MB_INVALIDCH(clen))
+        {
+         clen = 1;     /* assume single byte */
+         mbs = mbsbak;
+        }
+
       s += clen;
       nc++;
+      mbsbak = mbs;
     }
   return nc;
 }
@@ -5000,6 +5368,15 @@ get_var_and_type (varname, value, quoted, varp, valp)
            }
          *varp = v;
        }
+      else if (v && (ALL_ELEMENT_SUB (temp[0]) && temp[1] == ']'))
+       {
+         vtype = VT_VARIABLE;
+         *varp = v;
+         if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+           *valp = dequote_string (value);
+         else
+           *valp = dequote_escapes (value);
+       }
       else
        return -1;
     }
@@ -5011,7 +5388,6 @@ get_var_and_type (varname, value, quoted, varp, valp)
     }
   else
 #endif
-#if 1
     {
       if (value && vtype == VT_VARIABLE)
        {
@@ -5023,9 +5399,6 @@ get_var_and_type (varname, value, quoted, varp, valp)
       else
        *valp = value;
     }
-#else
-  *valp = (value && vtype == VT_VARIABLE) ? dequote_escapes (value) : value;
-#endif
 
   return vtype;
 }
@@ -5051,7 +5424,8 @@ mb_substring (string, s, e)
   DECLARE_MBSTATE;
 
   start = 0;
-  slen = STRLEN (string);
+  /* Don't need string length in ADVANCE_CHAR unless multibyte chars possible. */
+  slen = (MB_CUR_MAX > 1) ? STRLEN (string) : 0;
 
   i = s;
   while (string[start] && i--)
@@ -5250,10 +5624,10 @@ pos_params_pat_subst (string, pat, rep, mflags)
   for ( ; params; params = params->next)
     {
       ret = pat_subst (params->word->word, pat, rep, mflags);
-      w = make_bare_word (ret);
+      w = alloc_word_desc ();
+      w->word = ret ? ret : savestring ("");
       dispose_word (params->word);
       params->word = w;
-      FREE (ret);
     }
 
   if ((mflags & (MATCH_QUOTED|MATCH_STARSUB)) == (MATCH_QUOTED|MATCH_STARSUB))
@@ -5315,16 +5689,9 @@ parameter_brace_patsub (varname, value, patsub, quoted)
   if (rep && *rep == '\0')
     rep = (char *)NULL;
 
-#if 0
-  /* Expand PAT and REP for command, variable and parameter, arithmetic,
-     and process substitution.  Also perform quote removal.  Do not
-     perform word splitting or filename generation. */
-  pat = expand_string_if_necessary (lpatsub, (quoted & ~Q_DOUBLE_QUOTES), expand_string_unsplit);
-#else
   /* Perform the same expansions on the pattern as performed by the
      pattern removal expansions. */
   pat = getpattern (lpatsub, quoted, 1);
-#endif
 
   if (rep)
     {
@@ -5409,7 +5776,7 @@ parameter_brace_patsub (varname, value, patsub, quoted)
 /****************************************************************/
 
 /* ${[#][!]name[[:]#[#]%[%]-=?+[word][:e1[:e2]]]} */
-static char *
+static WORD_DESC *
 parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_dollar_at)
      char *string;
      int *indexp, quoted, *quoted_dollar_atp, *contains_dollar_at;
@@ -5417,7 +5784,8 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
   int check_nullness, var_is_set, var_is_null, var_is_special;
   int want_substring, want_indir, want_patsub;
   char *name, *value, *temp, *temp1;
-  int t_index, sindex, c;
+  WORD_DESC *tdesc, *ret;
+  int t_index, sindex, c, tflag;
   intmax_t number;
 
   value = (char *)NULL;
@@ -5428,6 +5796,9 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
   t_index = ++sindex;
   name = string_extract (string, &t_index, "#%:-=?+/}", EX_VARNAME);
 
+  ret = 0;
+  tflag = 0;
+
   /* If the name really consists of a special variable, then make sure
      that we have the entire name.  We don't allow indirect references
      to special variables except `#', `?', `@' and `*'. */
@@ -5530,7 +5901,14 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       free (name);
 
       *indexp = sindex;
-      return ((number < 0) ? &expand_param_error : itos (number));
+      if (number < 0)
+        return (&expand_wdesc_error);
+      else
+       {
+         ret = alloc_word_desc ();
+         ret->word = itos (number);
+         return ret;
+       }
     }
 
   /* ${@} is identical to $@. */
@@ -5570,7 +5948,10 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       free (xlist);
       free (temp1);
       *indexp = sindex;
-      return (temp);
+
+      ret = alloc_word_desc ();
+      ret->word = temp;
+      return ret;
     }
 
 #if defined (ARRAY_VARS)      
@@ -5596,7 +5977,10 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
 
          free (temp1);
          *indexp = sindex;
-         return (temp);
+
+         ret = alloc_word_desc ();
+         ret->word = temp;
+         return ret;
        }
 
       free (temp1);
@@ -5612,9 +5996,18 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
     }
 
   if (want_indir)
-    temp = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+    tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+  else
+    tdesc = parameter_brace_expand_word (name, var_is_special, quoted);
+
+  if (tdesc)
+    {
+      temp = tdesc->word;
+      tflag = tdesc->flags;
+      dispose_word_desc (tdesc);
+    }
   else
-    temp = parameter_brace_expand_word (name, var_is_special, quoted);
+    temp = (char  *)0;
 
 #if defined (ARRAY_VARS)
   if (valid_array_reference (name))
@@ -5647,7 +6040,15 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       FREE (name);
       FREE (value);
       FREE (temp);
-      return (temp1);
+
+      if (temp1 == &expand_param_error)
+       return (&expand_wdesc_error);
+      else if (temp1 == &expand_param_fatal)
+       return (&expand_wdesc_fatal);
+
+      ret = alloc_word_desc ();
+      ret->word = temp1;
+      return ret;
     }
   else if (want_patsub)
     {
@@ -5655,7 +6056,15 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       FREE (name);
       FREE (value);
       FREE (temp);
-      return (temp1);
+
+      if (temp1 == &expand_param_error)
+       return (&expand_wdesc_error);
+      else if (temp1 == &expand_param_fatal)
+       return (&expand_wdesc_fatal);
+
+      ret = alloc_word_desc ();
+      ret->word = temp1;
+      return ret;
     }
 
   /* Do the right thing based on which character ended the variable name. */
@@ -5668,7 +6077,7 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       FREE (value);
       FREE (temp);
       free (name);
-      return &expand_param_error;
+      return &expand_wdesc_error;
 
     case RBRACE:
       if (var_is_set == 0 && unbound_vars_is_error)
@@ -5678,7 +6087,7 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
          FREE (temp);
          free (name);
          last_command_exit_value = EXECUTION_FAILURE;
-         return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+         return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
        }
       break;
 
@@ -5717,10 +6126,12 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
              FREE (temp);
              if (value)
                {
-                 temp = parameter_brace_expand_rhs (name, value, c,
-                                                    quoted,
-                                                    quoted_dollar_atp,
-                                                    contains_dollar_at);
+                 ret = parameter_brace_expand_rhs (name, value, c,
+                                                   quoted,
+                                                   quoted_dollar_atp,
+                                                   contains_dollar_at);
+                 /* XXX - fix up later, esp. noting presence of
+                          W_HASQUOTEDNULL in ret->flags */
                  free (value);
                }
              else
@@ -5741,12 +6152,12 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
              report_error (_("$%s: cannot assign in this way"), name);
              free (name);
              free (value);
-             return &expand_param_error;
+             return &expand_wdesc_error;
            }
          else if (c == '?')
            {
              parameter_brace_expand_error (name, value);
-             return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+             return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
            }
          else if (c != '+')
            {
@@ -5758,9 +6169,11 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
              if (contains_dollar_at)
                *contains_dollar_at = 0;
 
-             temp = parameter_brace_expand_rhs (name, value, c, quoted,
-                                                quoted_dollar_atp,
-                                                contains_dollar_at);
+             ret = parameter_brace_expand_rhs (name, value, c, quoted,
+                                               quoted_dollar_atp,
+                                               contains_dollar_at);
+             /* XXX - fix up later, esp. noting presence of
+                      W_HASQUOTEDNULL in tdesc->flags */
            }
          free (value);
        }
@@ -5768,13 +6181,20 @@ parameter_brace_expand (string, indexp, quoted, quoted_dollar_atp, contains_doll
       break;
     }
   free (name);
-  return (temp);
+
+  if (ret == 0)
+    {
+      ret = alloc_word_desc ();
+      ret->flags = tflag;
+      ret->word = temp;
+    }
+  return (ret);
 }
 
 /* Expand a single ${xxx} expansion.  The braces are optional.  When
    the braces are used, parameter_brace_expand() does the work,
    possibly calling param_expand recursively. */
-static char *
+static WORD_DESC *
 param_expand (string, sindex, quoted, expanded_something,
              contains_dollar_at, quoted_dollar_at_p, had_quoted_null_p,
              pflags)
@@ -5788,11 +6208,15 @@ param_expand (string, sindex, quoted, expanded_something,
   intmax_t number;
   SHELL_VAR *var;
   WORD_LIST *list;
+  WORD_DESC *tdesc, *ret;
+  int tflag;
 
   zindex = *sindex;
   c = string[++zindex];
 
   temp = (char *)NULL;
+  ret = tdesc = (WORD_DESC *)NULL;
+  tflag = 0;
 
   /* Do simple cases first. Switch on what follows '$'. */
   switch (c)
@@ -5816,18 +6240,15 @@ param_expand (string, sindex, quoted, expanded_something,
          uerror[2] = '\0';
          err_unboundvar (uerror);
          last_command_exit_value = EXECUTION_FAILURE;
-         return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+         return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
        }
-#if 1
       if (temp1)
        temp = (*temp1 && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
                  ? quote_string (temp1)
                  : quote_escapes (temp1);
       else
        temp = (char *)NULL;
-#else
-      temp = temp1 ? quote_escapes (temp1) : (char *)NULL;
-#endif
+
       break;
 
     /* $$ -- pid of the invoking shell. */
@@ -5867,7 +6288,7 @@ param_expand (string, sindex, quoted, expanded_something,
              uerror[2] = '\0';
              err_unboundvar (uerror);
              last_command_exit_value = EXECUTION_FAILURE;
-             return (interactive_shell ? &expand_param_error : &expand_param_fatal);
+             return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
            }
        }
       else
@@ -5890,19 +6311,32 @@ param_expand (string, sindex, quoted, expanded_something,
             quote the whole string, including the separators.  If IFS
             is unset, the parameters are separated by ' '; if $IFS is
             null, the parameters are concatenated. */
-#if 0
-         temp = string_list_dollar_star (list);
-#else
          temp = (quoted & Q_DOUBLE_QUOTES) ? string_list_dollar_star (list) : string_list (list);
-#endif
          temp1 = quote_string (temp);
+         if (*temp == 0)
+           tflag |= W_HASQUOTEDNULL;
          free (temp);
          temp = temp1;
        }
       else
        {
-         /* If the $* is not quoted it is identical to $@ */
+         /* We check whether or not we're eventually going to split $* here,
+            for example when IFS is empty and we are processing the rhs of
+            an assignment statement.  In that case, we don't separate the
+            arguments at all.  Otherwise, if the $* is not quoted it is
+            identical to $@ */
+#if 1
+#  if defined (HANDLE_MULTIBYTE)
+         if (expand_no_split_dollar_star && ifs_firstc[0] == 0)
+#  else
+         if (expand_no_split_dollar_star && ifs_firstc == 0)
+#  endif
+           temp = string_list_dollar_star (list);
+         else
+           temp = string_list_dollar_at (list, quoted);
+#else
          temp = string_list_dollar_at (list, quoted);
+#endif
          if (expand_no_split_dollar_star == 0 && contains_dollar_at)
            *contains_dollar_at = 1;
        }
@@ -5938,11 +6372,14 @@ param_expand (string, sindex, quoted, expanded_something,
       break;
 
     case LBRACE:
-      temp = parameter_brace_expand (string, &zindex, quoted,
-                                    quoted_dollar_at_p,
-                                    contains_dollar_at);
-      if (temp == &expand_param_error || temp == &expand_param_fatal)
-       return (temp);
+      tdesc = parameter_brace_expand (string, &zindex, quoted,
+                                     quoted_dollar_at_p,
+                                     contains_dollar_at);
+
+      /* Fix this later when parameter_brace_expand returns a WORD_DESC * */
+      if (tdesc == &expand_wdesc_error || tdesc == &expand_wdesc_fatal)
+       return (tdesc);
+      temp = tdesc ? tdesc->word : (char *)0;
 
       /* XXX */
       /* Quoted nulls should be removed if there is anything else
@@ -5952,18 +6389,24 @@ param_expand (string, sindex, quoted, expanded_something,
         in the string, discard TEMP, and go on.  The exception to
         this is when we have "${@}" and $1 is '', since $@ needs
         special handling. */
+      /* XXX - fix this once parameter_brace_expand returns a WORD_DESC * */
+#if 0
       if (temp && QUOTED_NULL (temp))
+#else
+      if (tdesc && tdesc->word && (tdesc->flags & W_HASQUOTEDNULL) && QUOTED_NULL (temp))
+#endif
        {
          if (had_quoted_null_p)
            *had_quoted_null_p = 1;
          if (*quoted_dollar_at_p == 0)
            {
              free (temp);
-             temp = (char *)NULL;
+             tdesc->word = temp = (char *)NULL;
            }
            
        }
 
+      ret = tdesc;
       goto return0;
 
     /* Do command or arithmetic substitution. */
@@ -6006,10 +6449,10 @@ arithsub:
              if (interactive_shell == 0 && posixly_correct)
                {
                  last_command_exit_value = EXECUTION_FAILURE;
-                 return (&expand_param_fatal);
+                 return (&expand_wdesc_fatal);
                }
              else
-               return (&expand_param_error);
+               return (&expand_wdesc_error);
            }
          temp = itos (number);
          break;
@@ -6103,8 +6546,8 @@ unbound_variable:
       free (temp1);
       last_command_exit_value = EXECUTION_FAILURE;
       return ((unbound_vars_is_error && interactive_shell == 0)
-               ? &expand_param_fatal
-               : &expand_param_error);
+               ? &expand_wdesc_fatal
+               : &expand_wdesc_error);
     }
 
   if (string[zindex])
@@ -6112,7 +6555,14 @@ unbound_variable:
 
 return0:
   *sindex = zindex;
-  return (temp);
+
+  if (ret == 0)
+    {
+      ret = alloc_word_desc ();
+      ret->flags = tflag;      /* XXX */
+      ret->word = temp;
+    }
+  return ret;
 }
 
 /* Make a word list which is the result of parameter and variable
@@ -6180,10 +6630,13 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
      string (e.g., "xx"ab), or is fully quoted (e.g., "xxab"). */
   int quoted_state;
 
+  /* State flags */
   int had_quoted_null;
   int has_dollar_at;
   int tflag;
 
+  int assignoff;               /* If assignment, offset of `=' */
+
   register unsigned char c;    /* Current character. */
   int t_index;                 /* For calls to string_extract_xxx. */
 
@@ -6199,11 +6652,15 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
   string = word->word;
   if (string == 0)
     goto finished_with_string;
-  string_size = strlen (string);
+  /* Don't need the string length for the SADD... and COPY_ macros unless
+     multibyte characters are possible. */
+  string_size = (MB_CUR_MAX > 1) ? strlen (string) : 1;
 
   if (contains_dollar_at)
     *contains_dollar_at = 0;
 
+  assignoff = -1;
+
   /* Begin the expansion. */
 
   for (sindex = 0; ;)
@@ -6250,7 +6707,7 @@ add_string:
        case '<':
        case '>':
          {
-           if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || posixly_correct)
+           if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (word->flags & W_DQUOTE) || posixly_correct)
              {
                sindex--;       /* add_character: label increments sindex */
                goto add_character;
@@ -6273,25 +6730,108 @@ add_string:
          }
 #endif /* PROCESS_SUBSTITUTION */
 
+       case '=':
+         /* Posix.2 section 3.6.1 says that tildes following `=' in words
+            which are not assignment statements are not expanded.  If the
+            shell isn't in posix mode, though, we perform tilde expansion
+            on `likely candidate' unquoted assignment statements (flags
+            include W_ASSIGNMENT but not W_QUOTED).  A likely candidate
+            contains an unquoted :~ or =~.  Something to think about: we
+            now have a flag that says  to perform tilde expansion on arguments
+            to `assignment builtins' like declare and export that look like
+            assignment statements.  We now do tilde expansion on such words
+            even in POSIX mode. */     
+         if (word->flags & (W_ASSIGNRHS|W_NOTILDE))
+           goto add_character;
+         /* If we're not in posix mode or forcing assignment-statement tilde
+            expansion, note where the `=' appears in the word and prepare to
+            do tilde expansion following the first `='. */
+         if ((word->flags & W_ASSIGNMENT) &&
+             (posixly_correct == 0 || (word->flags & W_TILDEEXP)) &&
+             assignoff == -1 && sindex > 0)
+           assignoff = sindex;
+         if (sindex == assignoff && string[sindex+1] == '~')   /* XXX */
+           word->flags |= W_ITILDE;
+#if 0
+         else if ((word->flags & W_ASSIGNMENT) &&
+                  (posixly_correct == 0 || (word->flags & W_TILDEEXP)) &&
+                  string[sindex+1] == '~')
+           word->flags |= W_ITILDE;
+#endif
+         goto add_character;
+
+       case ':':
+         if (word->flags & W_NOTILDE)
+           goto add_character;
+
+         if ((word->flags & (W_ASSIGNMENT|W_ASSIGNRHS|W_TILDEEXP)) &&
+             string[sindex+1] == '~')
+           word->flags |= W_ITILDE;
+         goto add_character;
+
+       case '~':
+         /* If the word isn't supposed to be tilde expanded, or we're not
+            at the start of a word or after an unquoted : or = in an
+            assignment statement, we don't do tilde expansion. */
+         if ((word->flags & (W_NOTILDE|W_DQUOTE)) ||
+             (sindex > 0 && ((word->flags & W_ITILDE) == 0)) ||
+             (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+           {
+             word->flags &= ~W_ITILDE;
+             goto add_character;
+           }
+
+         if (word->flags & W_ASSIGNRHS)
+           tflag = 2;
+         else if (word->flags & (W_ASSIGNMENT|W_TILDEEXP))
+           tflag = 1;
+         else
+           tflag = 0;
+
+         temp = bash_tilde_find_word (string + sindex, tflag, &t_index);
+           
+         word->flags &= ~W_ITILDE;
+
+         if (temp && *temp && t_index > 0)
+           {
+             temp1 = bash_tilde_expand (temp, tflag);
+             free (temp);
+             temp = temp1;
+             sindex += t_index;
+             goto add_string;
+           }
+         else
+           {
+             FREE (temp);
+             goto add_character;
+           }
+       
        case '$':
          if (expanded_something)
            *expanded_something = 1;
 
          has_dollar_at = 0;
-         temp = param_expand (string, &sindex, quoted, expanded_something,
+         tword = param_expand (string, &sindex, quoted, expanded_something,
                               &has_dollar_at, &quoted_dollar_at,
                               &had_quoted_null,
                               (word->flags & W_NOCOMSUB) ? PF_NOCOMSUB : 0);
 
-         if (temp == &expand_param_error || temp == &expand_param_fatal)
+         if (tword == &expand_wdesc_error || tword == &expand_wdesc_fatal)
            {
              free (string);
              free (istring);
-             return ((temp == &expand_param_error) ? &expand_word_error
-                                                   : &expand_word_fatal);
+             return ((tword == &expand_wdesc_error) ? &expand_word_error
+                                                    : &expand_word_fatal);
            }
          if (contains_dollar_at && has_dollar_at)
            *contains_dollar_at = 1;
+
+         if (tword && (tword->flags & W_HASQUOTEDNULL))
+           had_quoted_null = 1;
+
+         temp = tword->word;
+         dispose_word_desc (tword);
+
          goto add_string;
          break;
 
@@ -6299,10 +6839,26 @@ add_string:
          {
            t_index = sindex++;
 
+           temp = string_extract (string, &sindex, "`", EX_REQMATCH);
+           /* The test of sindex against t_index is to allow bare instances of
+              ` to pass through, for backwards compatibility. */
+           if (temp == &extract_string_error || temp == &extract_string_fatal)
+             {
+               if (sindex - 1 == t_index)
+                 {
+                   sindex = t_index;
+                   goto add_character;
+                 }
+               report_error ("bad substitution: no closing \"`\" in %s", string+t_index);
+               free (string);
+               free (istring);
+               return ((temp == &extract_string_error) ? &expand_word_error
+                                                       : &expand_word_fatal);
+             }
+               
            if (expanded_something)
              *expanded_something = 1;
 
-           temp = string_extract (string, &sindex, "`", 0);
            if (word->flags & W_NOCOMSUB)
              /* sindex + 1 because string[sindex] == '`' */
              temp1 = substring (string, t_index, sindex + 1);
@@ -6360,9 +6916,9 @@ add_twochars:
 
        case '"':
 #if 0
-         if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE))
+         if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (word->flags & W_DQUOTE))
 #else
-         if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+         if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
 #endif
            goto add_character;
 
@@ -6377,11 +6933,13 @@ add_twochars:
 
          if (temp && *temp)
            {
-             tword = make_word (temp);         /* XXX */
-             free (temp);
+             tword = alloc_word_desc ();
+             tword->word = temp;
+
              temp = (char *)NULL;
 
              has_dollar_at = 0;
+             /* Need to get W_HASQUOTEDNULL flag through this function. */
              list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &has_dollar_at, (int *)NULL);
 
              if (list == &expand_word_error || list == &expand_word_fatal)
@@ -6417,6 +6975,9 @@ add_twochars:
              if (list)
                dequote_list (list);
 
+             if (list && list->word && (list->word->flags & W_HASQUOTEDNULL))
+               had_quoted_null = 1;
+
              if (has_dollar_at)
                {
                  quoted_dollar_at++;
@@ -6456,8 +7017,9 @@ add_twochars:
              else
                {
                  temp = savestring (list->word->word);
+                 tflag = list->word->flags;
                  dispose_words (list);
-#if 1
+
                  /* If the string is not a quoted null string, we want
                     to remove any embedded unquoted CTLNUL characters.
                     We do not want to turn quoted null strings back into
@@ -6466,15 +7028,13 @@ add_twochars:
                     contain other characters.  For example, if we have
                     x"$*"y or "x$*y" and there are no positional parameters,
                     the $* should expand into nothing. */
-                 /* HOWEVER, this fails if the string contains a literal
-                    CTLNUL or CTLNUL is contained in the (non-null) expansion
-                    of some variable.  I'm not sure what to do about this
-                    yet.  There has to be some way to indicate the difference
-                    between the two.  An auxiliary data structure might be
-                    necessary. */
-                 if (QUOTED_NULL (temp) == 0)
+                 /* We use the W_HASQUOTEDNULL flag to differentiate the
+                    cases:  a quoted null character as above and when
+                    CTLNUL is contained in the (non-null) expansion
+                    of some variable.  We use the had_quoted_null flag to
+                    pass the value through this function to its caller. */
+                 if ((tflag & W_HASQUOTEDNULL) && QUOTED_NULL (temp) == 0)
                    remove_quoted_nulls (temp); /* XXX */
-#endif
                }
            }
          else
@@ -6506,9 +7066,9 @@ add_twochars:
 
        case '\'':
 #if 0
-         if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT|Q_PATQUOTE))
+         if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (word->flags & W_DQUOTE))
 #else
-         if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+         if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
 #endif
            goto add_character;
 
@@ -6625,6 +7185,7 @@ finished_with_string:
          istring[0] = CTLNUL;
          istring[1] = '\0';
          tword = make_bare_word (istring);
+         tword->flags |= W_HASQUOTEDNULL;              /* XXX */
          list = make_word_list (tword, (WORD_LIST *)NULL);
          if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
            tword->flags |= W_QUOTED;
@@ -6638,9 +7199,9 @@ finished_with_string:
       else
        {
          tword = make_bare_word (istring);
-         list = make_word_list (tword, (WORD_LIST *)NULL);
          if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
            tword->flags |= W_QUOTED;
+         list = make_word_list (tword, (WORD_LIST *)NULL);
        }
 #else
       else
@@ -6650,13 +7211,19 @@ finished_with_string:
   else if (word->flags & W_NOSPLIT)
     {
       tword = make_bare_word (istring);
-      list = make_word_list (tword, (WORD_LIST *)NULL);
       if (word->flags & W_ASSIGNMENT)
        tword->flags |= W_ASSIGNMENT;   /* XXX */
+      if (word->flags & W_COMPASSIGN)
+       tword->flags |= W_COMPASSIGN;   /* XXX */
       if (word->flags & W_NOGLOB)
        tword->flags |= W_NOGLOB;       /* XXX */
+      if (word->flags & W_NOEXPAND)
+       tword->flags |= W_NOEXPAND;     /* XXX */
       if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
        tword->flags |= W_QUOTED;
+      if (had_quoted_null)
+       tword->flags |= W_HASQUOTEDNULL;
+      list = make_word_list (tword, (WORD_LIST *)NULL);
     }
   else
     {
@@ -6675,13 +7242,19 @@ finished_with_string:
       else
        {
          tword = make_bare_word (istring);
-         list = make_word_list (tword, (WORD_LIST *)NULL);
          if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) || (quoted_state == WHOLLY_QUOTED))
            tword->flags |= W_QUOTED;
          if (word->flags & W_ASSIGNMENT)
            tword->flags |= W_ASSIGNMENT;
+         if (word->flags & W_COMPASSIGN)
+           tword->flags |= W_COMPASSIGN;
          if (word->flags & W_NOGLOB)
            tword->flags |= W_NOGLOB;
+         if (word->flags & W_NOEXPAND)
+           tword->flags |= W_NOEXPAND;
+         if (had_quoted_null)
+           tword->flags |= W_HASQUOTEDNULL;    /* XXX */
+         list = make_word_list (tword, (WORD_LIST *)NULL);
        }
     }
 
@@ -6769,8 +7342,8 @@ word_quote_removal (word, quoted)
   char *t;
 
   t = string_quote_removal (word->word, quoted);
-  w = make_bare_word (t);
-  free (t);
+  w = alloc_word_desc ();
+  w->word = t ? t : savestring ("");
   return (w);
 }
 
@@ -6782,12 +7355,23 @@ word_list_quote_removal (list, quoted)
      WORD_LIST *list;
      int quoted;
 {
-  WORD_LIST *result, *t, *tresult;
+  WORD_LIST *result, *t, *tresult, *e;
 
   for (t = list, result = (WORD_LIST *)NULL; t; t = t->next)
     {
       tresult = make_word_list (word_quote_removal (t->word, quoted), (WORD_LIST *)NULL);
+#if 0
       result = (WORD_LIST *) list_append (result, tresult);
+#else
+      if (result == 0)
+       result = e = tresult;
+      else
+       {
+         e->next = tresult;
+         while (e->next)
+           e = e->next;
+       }
+#endif
     }
   return (result);
 }
@@ -6807,9 +7391,14 @@ setifs (v)
   unsigned char uc;
 
   ifs_var = v;
+#if 0
   ifs_value = v ? value_cell (v) : " \t\n";
+#else
+  ifs_value = (v && value_cell (v)) ? value_cell (v) : " \t\n";
+#endif
 
-  /* Should really merge ifs_cmap with sh_syntaxtab. */
+  /* Should really merge ifs_cmap with sh_syntaxtab.  XXX - doesn't yet
+     handle multibyte chars in IFS */
   memset (ifs_cmap, '\0', sizeof (ifs_cmap));
   for (t = ifs_value ; t && *t; t++)
     {
@@ -6817,7 +7406,29 @@ setifs (v)
       ifs_cmap[uc] = 1;
     }
 
+#if defined (HANDLE_MULTIBYTE)
+  if (ifs_value == 0)
+    {
+      ifs_firstc[0] = '\0';
+      ifs_firstc_len = 1;
+    }
+  else
+    {
+      size_t ifs_len;
+      ifs_len = strnlen (ifs_value, MB_CUR_MAX);
+      ifs_firstc_len = MBLEN (ifs_value, ifs_len);
+      if (ifs_firstc_len == 1 || ifs_firstc_len == 0 || MB_INVALIDCH (ifs_firstc_len))
+       {
+         ifs_firstc[0] = ifs_value[0];
+         ifs_firstc[1] = '\0';
+         ifs_firstc_len = 1;
+       }
+      else
+       memcpy (ifs_firstc, ifs_value, ifs_firstc_len);
+    }
+#else
   ifs_firstc = ifs_value ? *ifs_value : 0;
+#endif
 }
 
 char *
@@ -6855,12 +7466,23 @@ static WORD_LIST *
 word_list_split (list)
      WORD_LIST *list;
 {
-  WORD_LIST *result, *t, *tresult;
+  WORD_LIST *result, *t, *tresult, *e;
 
   for (t = list, result = (WORD_LIST *)NULL; t; t = t->next)
     {
       tresult = word_split (t->word, ifs_value);
+#if 0
       result = (WORD_LIST *) list_append (result, tresult);
+#else
+      if (result == 0)
+        result = e = tresult;
+      else
+       {
+         e->next = tresult;
+         while (e->next)
+           e = e->next;
+       }
+#endif
     }
   return (result);
 }
@@ -7209,28 +7831,30 @@ shell_expand_word_list (tlist, eflags)
 
       next = tlist->next;
 
-      /* Posix.2 section 3.6.1 says that tildes following `=' in words
-        which are not assignment statements are not expanded.  If the
-        shell isn't in posix mode, though, we perform tilde expansion
-        on `likely candidate' unquoted assignment statements (flags
-        include W_ASSIGNMENT but not W_QUOTED).  A likely candidate
-        contains an unquoted :~ or =~.  Something to think about: we
-        now have a flag that says  to perform tilde expansion on arguments
-        to `assignment builtins' like declare and export that look like
-        assignment statements.  We now do tilde expansion on such words
-        even in POSIX mode. */
-      if (((tlist->word->flags & (W_ASSIGNMENT|W_QUOTED)) == W_ASSIGNMENT) &&
-            (posixly_correct == 0 || (tlist->word->flags & W_TILDEEXP)) &&
-            (unquoted_substring ("=~", temp_string) || unquoted_substring (":~", temp_string)))
-       {
-         tlist->word->word = bash_tilde_expand (temp_string, 1);
-         free (temp_string);
-       }
-      else if (temp_string[0] == '~')
-       {
-         tlist->word->word = bash_tilde_expand (temp_string, 0);
-         free (temp_string);
+#if defined (ARRAY_VARS)
+      /* If this is a compound array assignment to a builtin that accepts
+         such assignments (e.g., `declare'), take the assignment and perform
+         it separately, handling the semantics of declarations inside shell
+         functions.  This avoids the double-evaluation of such arguments,
+         because `declare' does some evaluation of compound assignments on
+         its own. */
+      if ((tlist->word->flags & (W_COMPASSIGN|W_ASSIGNARG)) == (W_COMPASSIGN|W_ASSIGNARG))
+       {
+         int t;
+
+         t = do_word_assignment (tlist->word);
+         if (t == 0)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             exp_jump_to_top_level (DISCARD);
+           }
+
+         /* Now transform the word as ksh93 appears to do and go on */
+         t = assignment (tlist->word->word, 0);
+         tlist->word->word[t] = '\0';
+         tlist->word->flags &= ~(W_ASSIGNMENT|W_NOSPLIT|W_COMPASSIGN|W_ASSIGNARG); 
        }
+#endif
 
       expanded_something = 0;
       expanded = expand_word_internal
@@ -7318,7 +7942,7 @@ expand_word_list_internal (list, eflags)
              for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
                {
                  this_command_name = (char *)NULL;     /* no arithmetic errors */
-                 tint = do_assignment (temp_list->word->word);
+                 tint = do_word_assignment (temp_list->word);
                  /* Variable assignment errors in non-interactive shells
                     running in Posix.2 mode cause the shell to exit. */
                  if (tint == 0)
@@ -7366,23 +7990,23 @@ expand_word_list_internal (list, eflags)
 
   if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist)
     {
-      sh_assign_func_t *assign_func;
+      sh_wassign_func_t *assign_func;
 
       /* If the remainder of the words expand to nothing, Posix.2 requires
         that the variable and environment assignments affect the shell's
         environment. */
-      assign_func = new_list ? assign_in_env : do_assignment;
+      assign_func = new_list ? assign_in_env : do_word_assignment;
       tempenv_assign_error = 0;
 
       for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
        {
          this_command_name = (char *)NULL;
-         tint = (*assign_func) (temp_list->word->word);
+         tint = (*assign_func) (temp_list->word);
          /* Variable assignment errors in non-interactive shells running
             in Posix.2 mode cause the shell to exit. */
          if (tint == 0)
            {
-             if (assign_func == do_assignment)
+             if (assign_func == do_word_assignment)
                {
                  last_command_exit_value = EXECUTION_FAILURE;
                  if (interactive_shell == 0 && posixly_correct)
diff --git a/subst.h b/subst.h
index 0acfdd7..33d3f49 100644 (file)
--- a/subst.h
+++ b/subst.h
@@ -1,6 +1,6 @@
 /* subst.h -- Names of externally visible functions in subst.c. */
 
-/* Copyright (C) 1993-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2004 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
    to unconditionally retain the backslash.  Q_PATQUOTE means that we're
    expanding a pattern ${var%#[#%]pattern} in an expansion surrounded
    by double quotes. */
-#define Q_DOUBLE_QUOTES  0x1
-#define Q_HERE_DOCUMENT  0x2
-#define Q_KEEP_BACKSLASH 0x4
-#define Q_PATQUOTE      0x8
+#define Q_DOUBLE_QUOTES  0x01
+#define Q_HERE_DOCUMENT  0x02
+#define Q_KEEP_BACKSLASH 0x04
+#define Q_PATQUOTE      0x08
 #define Q_QUOTED        0x10
 #define Q_ADDEDQUOTES   0x20
 #define Q_QUOTEDNULL    0x40
 
+/* Flag values controlling how assignment statements are treated. */
+#define ASS_APPEND     0x01
+#define ASS_MKLOCAL    0x02
+
 /* Remove backslashes which are quoting backquotes from STRING.  Modifies
    STRING, and returns a pointer to it. */
 extern char * de_backslash __P((char *));
@@ -93,11 +97,12 @@ extern char *strip_trailing_ifs_whitespace __P((char *, char *, int));
 
 /* Given STRING, an assignment string, get the value of the right side
    of the `=', and bind it to the left side.  If EXPAND is true, then
-   perform parameter expansion, command substitution, and arithmetic
-   expansion on the right-hand side.  Perform tilde expansion in any
-   case.  Do not perform word splitting on the result of expansion. */
-extern int do_assignment __P((const char *));
-extern int do_assignment_no_expand __P((const char *));
+   perform tilde expansion, parameter expansion, command substitution,
+   and arithmetic expansion on the right-hand side.  Do not perform word
+   splitting on the result of expansion. */
+extern int do_assignment __P((char *));
+extern int do_assignment_no_expand __P((char *));
+extern int do_word_assignment __P((WORD_DESC *));
 
 /* Append SOURCE to TARGET at INDEX.  SIZE is the current amount
    of space allocated to TARGET.  SOURCE can be NULL, in which
@@ -126,6 +131,9 @@ extern int number_of_args __P((void));
    takes care of quote removal. */
 extern WORD_LIST *expand_string_unsplit __P((char *, int));
 
+/* Expand the rhs of an assignment statement. */
+extern WORD_LIST *expand_string_assignment __P((char *, int));
+
 /* Expand a prompt string. */
 extern WORD_LIST *expand_prompt_string __P((char *, int));
 
@@ -141,6 +149,7 @@ extern WORD_LIST *expand_string __P((char *, int));
    to a string and deallocating the WORD_LIST *. */
 extern char *expand_string_to_string __P((char *, int));
 extern char *expand_string_unsplit_to_string __P((char *, int));
+extern char *expand_assignment_string_to_string __P((char *, int));
 
 /* De-quoted quoted characters in STRING. */
 extern char *dequote_string __P((char *));
@@ -231,7 +240,13 @@ extern WORD_LIST *split_at_delims __P((char *, int, char *, int, int *, int *));
 extern SHELL_VAR *ifs_var;
 extern char *ifs_value;
 extern unsigned char ifs_cmap[];
+
+#if defined (HANDLE_MULTIBYTE)
+extern unsigned char ifs_firstc[];
+extern size_t ifs_firstc_len;
+#else
 extern unsigned char ifs_firstc;
+#endif
 
 /* Evaluates to 1 if C is a character in $IFS. */
 #define isifs(c)       (ifs_cmap[(unsigned char)(c)] != 0)
index 9aacc2f..b49bd45 100644 (file)
@@ -81,7 +81,7 @@ man2html$(EXEEXT): $(OBJ1)
 clean:
        $(RM) man2html$(EXEEXT)
 
-distclean maintainer-clean mostly-clean: clean
+distclean maintainer-clean mostlyclean: clean
        $(RM) $(OBJ1)
 
 man2html.o: man2html.c
index 9a8a499..6d90d6f 100755 (executable)
@@ -1162,7 +1162,7 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit 0 ;;
-    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+    NSR-[DGKLNPTVWXY]:NONSTOP_KERNEL:*:*)
        echo nsr-tandem-nsk${UNAME_RELEASE}
        exit 0 ;;
     *:NonStop-UX:*:*)
index d1ed8bc..2432c13 100644 (file)
 
 static char location_base[NULL_TERMINATED(MED_STR_MAX)] = "";
 
+static char th_page_and_sec[128] = { '\0' };
+static char th_datestr[128] = { '\0' };
+static char th_version[128] = { '\0' };
+
 char   *signature = "<HR>\nThis document was created by man2html from %s.<BR>\nTime: %s\n";
 
 /* timeformat for signature */
@@ -2148,6 +2152,26 @@ skip_till_newline(char *c)
        return c;
 }
 
+static void
+outputPageHeader(char *l, char *c, char *r)
+{
+       out_html("<TABLE WIDTH=100%>\n<TR>\n");
+       out_html("<TH ALIGN=LEFT width=33%>");
+       out_html(l);
+       out_html("<TH ALIGN=CENTER width=33%>");
+       out_html(c);
+       out_html("<TH ALIGN=RIGHT width=33%>");
+       out_html(r);
+       out_html("\n</TR>\n</TABLE>\n");
+}
+
+static void
+outputPageFooter(char *l, char *c, char *r)
+{
+       out_html("<HR>\n");
+       outputPageHeader(l, c, r);
+}
+
 static int ifelseval = 0;
 
 static char *
@@ -2836,15 +2860,15 @@ scan_request(char *c)
                        out_html(label);
                        /* &nbsp; for mosaic users */
                        if (mode)
-                               out_html("\">&nbsp;</A>\n<H3>");
+                               out_html("\">&nbsp;</A>\n<H4>");
                        else
-                               out_html("\">&nbsp;</A>\n<H2>");
+                               out_html("\">&nbsp;</A>\n<H3>");
                        mandoc_synopsis = strncmp(c, "SYNOPSIS", 8) == 0;
                        c = mandoc_command ? scan_troff_mandoc(c, 1, NULL) : scan_troff(c, 1, NULL);
                        if (mode)
-                               out_html("</H3>\n");
+                               out_html("</H4>\n");
                        else
-                               out_html("</H2>\n");
+                               out_html("</H3>\n");
                        curpos = 0;
                        break;
                case V('T', 'S'):
@@ -2856,25 +2880,31 @@ scan_request(char *c)
                        if (!output_possible) {
                                sl = fill_words(c + j, wordlist, &words);
                                if (words > 1) {
-                                       char    page_and_sec[128];
-
+                                       char    *t;
                                        for (i = 1; i < words; i++)
                                                wordlist[i][-1] = '\0';
                                        *sl = '\0';
                                        output_possible = 1;
-                                       sprintf(page_and_sec, "%s(%s)", wordlist[0], wordlist[1]);
+                                       sprintf(th_page_and_sec, "%s(%s)", wordlist[0], wordlist[1]);
+                                       if (words > 2) {
+                                               t = unescape(wordlist[2]);
+                                               strncpy(th_datestr, t, sizeof(th_datestr));
+                                               th_datestr[sizeof(th_datestr) - 1] = '\0';
+                                       } else
+                                               th_datestr[0] = '\0';
+                                       if (words > 3) {
+                                               t = unescape(wordlist[3]);
+                                               strncpy(th_version, t, sizeof(th_version));
+                                               th_version[sizeof(th_version) - 1] = '\0';
+                                       } else
+                                               th_version[0] = '\0';
                                        out_html("<HTML><HEAD>\n<TITLE>");
-                                       out_html(page_and_sec);
+                                       out_html(th_page_and_sec);
                                        out_html(" Manual Page");
                                        out_html("</TITLE>\n</HEAD>\n<BODY>");
-                                       out_html("<TABLE WIDTH=100%>\n");
-                                       out_html("<TH ALIGN=LEFT>");
-                                       out_html(page_and_sec);
-                                       out_html("<TH ALIGN=CENTER>");
-                                       out_html(unescape(wordlist[2]));
-                                       out_html("<TH ALIGN=RIGHT>");
-                                       out_html(page_and_sec);
-                                       out_html("\n</TABLE>\n");
+
+                                       outputPageHeader(th_page_and_sec, th_datestr, th_page_and_sec);
+                                       
                                        out_html("<BR><A HREF=\"#index\">Index</A>\n");
                                        *sl = '\n';
                                        out_html("<HR>\n");
@@ -4023,6 +4053,7 @@ main(int argc, char **argv)
        out_html(NEWLINE);
 
        if (output_possible) {
+               outputPageFooter(th_version, th_datestr, th_page_and_sec);
                /* &nbsp; for mosaic users */
                fputs("<HR>\n<A NAME=\"index\">&nbsp;</A><H2>Index</H2>\n<DL>\n", stdout);
                manidx[mip] = 0;
index c395e33..e6a1518 100644 (file)
@@ -133,11 +133,11 @@ initialize_signames ()
     }
 #endif /* SIGRTMIN && SIGRTMAX */
 
-/* AIX */
 #if defined (SIGLOST)  /* resource lost (eg, record-lock lost) */
   signal_names[SIGLOST] = "SIGLOST";
 #endif
 
+/* AIX */
 #if defined (SIGMSG)   /* HFT input data pending */
   signal_names[SIGMSG] = "SIGMSG";
 #endif
@@ -203,6 +203,10 @@ initialize_signames ()
   signal_names[SIGCANCEL] = "SIGCANCEL";
 #endif
 
+#if defined (SIGXRES)  /* resource control exceeded */
+  signal_names[SIGXRES] = "SIGXRES";
+#endif
+
 /* HP-UX */
 #if defined (SIGDIL)   /* DIL signal (?) */
   signal_names[SIGDIL] = "SIGDIL";
@@ -226,6 +230,16 @@ initialize_signames ()
   signal_names[SIGWINDOW] = "SIGWINDOW";
 #endif
 
+/* Linux */
+#if defined (SIGSTKFLT)
+  signal_names[SIGSTKFLT] = "SIGSTKFLT";
+#endif
+
+/* FreeBSD */
+#if defined (SIGTHR)   /* thread interrupt */
+  signal_names[SIGTHR] = "SIGTHR";
+#endif
+
 /* Common */
 #if defined (SIGHUP)   /* hangup */
   signal_names[SIGHUP] = "SIGHUP";
index a42eb78..6aca944 100755 (executable)
@@ -96,11 +96,11 @@ echo "/* Version control for the shell.  This file gets changed when you say"
 echo "   \`make version.h' to the Makefile.  It is created by mkversion. */"
 
 # Output the distribution version.  Single numbers are converted to x.00.
-# Allow, as a special case, `[:digit:].[:digit:][:digit:][:alpha:]' for
-# intermediate versions (e.g., `2.05a').
+# Allow, as a special case, `[:digit:].[:digit:][:alpha:]' for
+# intermediate versions (e.g., `2.5a').
 # Any characters other than digits and `.' are invalid.
 case "$dist_version" in
-[0-9].[0-9][0-9][a-z]) ;;      # special case
+[0-9].[0-9][a-z])      ;;      # special case
 *[!0-9.]*)     echo "mkversion.sh: ${dist_version}: bad distribution version" >&2
                exit 1 ;;
 *.*)   ;;
@@ -112,9 +112,9 @@ dist_major=`echo $dist_version | sed 's:\..*$::'`
 
 dist_minor=`echo $dist_version | sed 's:^.*\.::'`
 case "$dist_minor" in
-"")    dist_minor=00 ;;
-[a-z]) dist_minor=00${dist_minor} ;;
-?)     dist_minor=0${dist_minor} ;;
+"")    dist_minor=0 ;;
+[a-z]) dist_minor=0${dist_minor} ;;
+?)     dist_minor=${dist_minor} ;;
 *)     ;;
 esac
 
index 29629b3..f835792 100644 (file)
    with Bash; see the file COPYING.  If not, write to the Free Software
    Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
 
+#if defined (HAVE_CONFIG_H)
+#  include  <config.h>
+#endif
+
+#include "bashansi.h"
+
 extern char **environ;
 
 int
index c622582..287fffb 100644 (file)
@@ -6,7 +6,7 @@
    chet@po.cwru.edu
 */
 
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
    You should have received a copy of the GNU General Public License along
    with Bash; see the file COPYING.  If not, write to the Free Software
    Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#if defined (HAVE_CONFIG_H)
+#  include  <config.h>
+#endif
 
+#include "bashansi.h"
 #include <stdio.h>
 
 void strprint();
index 4c13717..0e306bc 100755 (executable)
@@ -41,9 +41,13 @@ SHOBJ_LIBS=
 
 SHLIB_XLDFLAGS=
 SHLIB_LIBS=
+
+SHLIB_DOT='.'
+SHLIB_LIBPREF='lib'
 SHLIB_LIBSUFF='so'
 
 SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)'
+SHLIB_DLLVERSION='$(SHLIB_MAJOR)'
 
 PROGNAME=`basename $0`
 USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor"
@@ -78,10 +82,14 @@ sunos4*)
 sunos5*-*gcc*|solaris2*-*gcc*)
        SHOBJ_CFLAGS=-fpic
        SHOBJ_LD='${CC}'
-       # This line works for the Solaris linker in /usr/ccs/bin/ld
-       SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@'
-       # This line works for the GNU ld
-#      SHOBJ_LDFLAGS='-shared -Wl,-h,$@'
+       ld_used=`gcc -print-prog-name=ld`
+       if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then
+               # This line works for the GNU ld
+               SHOBJ_LDFLAGS='-shared -Wl,-h,$@'
+       else
+               # This line works for the Solaris linker in /usr/ccs/bin/ld
+               SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@'
+       fi
 
 #      SHLIB_XLDFLAGS='-R $(libdir)'
        SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
@@ -116,7 +124,7 @@ freebsd2* | netbsd*)
        ;;
 
 # FreeBSD-3.x ELF
-freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
+freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*|dragonfly*)
        SHOBJ_CFLAGS=-fpic
        SHOBJ_LD='${CC}'
 
@@ -146,7 +154,7 @@ darwin*|macosx*)
        SHLIB_LIBSUFF='dylib'
 
        case "${host_os}" in
-       darwin7*)       SHOBJ_LDFLAGS=''
+       darwin[78]*)    SHOBJ_LDFLAGS=''
                        SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
                        ;;
        *)              SHOBJ_LDFLAGS='-dynamic'
@@ -408,7 +416,39 @@ sysv5uw7*)
 
        SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
        ;;
-       
+
+sysv5UnixWare*-*gcc*)
+       SHOBJ_CFLAGS=-fpic
+       SHOBJ_LD='${CC}'
+       SHOBJ_LDFLAGS='-shared'
+
+       SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+       ;;
+
+sysv5UnixWare*)
+       SHOBJ_CFLAGS='-K PIC'
+       SHOBJ_LD=ld
+       SHOBJ_LDFLAGS='-G -dy -z text -h $@'
+
+       SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+       ;;
+
+sysv5OpenUNIX*-*gcc*)
+       SHOBJ_CFLAGS=-fpic
+       SHOBJ_LD='${CC}'
+       SHOBJ_LDFLAGS='-shared'
+
+       SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+       ;;
+
+sysv5OpenUNIX*)
+       SHOBJ_CFLAGS='-K PIC'
+       SHOBJ_LD=ld
+       SHOBJ_LDFLAGS='-G -dy -z text -h $@'
+
+       SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+       ;;
+
 dgux*-*gcc*)
        SHOBJ_CFLAGS=-fpic
        SHOBJ_LD='${CC}'
@@ -430,6 +470,24 @@ msdos*)
        SHLIB_STATUS=unsupported
        ;;
 
+cygwin*)
+       SHOBJ_LD='$(CC)'
+        SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a'
+        SHLIB_LIBPREF='cyg'
+        SHLIB_LIBSUFF='dll'
+        SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)'
+        SHLIB_LIBS='$(TERMCAP_LIB)'
+
+       SHLIB_DOT=
+        # For official cygwin releases, DLLVERSION will be defined in the
+        # environment of configure, and will be incremented any time the API
+        # changes in a non-backwards compatible manner.  Otherwise, it is just
+        # SHLIB_MAJOR.
+        if [ -n "$DLLVERSION" ] ; then
+               SHLIB_DLLVERSION="$DLLVERSION"
+        fi
+       ;;
+
 #
 # Rely on correct gcc configuration for everything else
 #
@@ -457,8 +515,14 @@ echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\'
 
 echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\'
 echo SHLIB_LIBS=\'"$SHLIB_LIBS"\'
+
+echo SHLIB_DOT=\'"$SHLIB_DOT"\'
+
+echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\'
 echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\'
+
 echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\'
+echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\'
 
 echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\'
 echo SHLIB_STATUS=\'"$SHLIB_STATUS"\'
index 3bc1fba..cc6ae60 100644 (file)
    You should have received a copy of the GNU General Public License along
    with Bash; see the file COPYING.  If not, write to the Free Software
    Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#if defined (HAVE_CONFIG_H)
+#  include  <config.h>
+#endif
 
+#include "bashansi.h"
 #include <stdio.h>
 
 int
diff --git a/test.c b/test.c
index faa7c39..4fc0ade 100644 (file)
--- a/test.c
+++ b/test.c
@@ -2,7 +2,7 @@
 
 /* Modified to run with the GNU shell Apr 25, 1988 by bfox. */
 
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -459,7 +459,7 @@ patcomp (string, pat, op)
 {
   int m;
 
-  m = strmatch (pat, string, FNMATCH_EXTFLAG);
+  m = strmatch (pat, string, FNMATCH_EXTFLAG|FNMATCH_IGNCASE);
   return ((op == EQ) ? (m == 0) : (m != 0));
 }
 
diff --git a/tests/appendop.right b/tests/appendop.right
new file mode 100644 (file)
index 0000000..1e24333
--- /dev/null
@@ -0,0 +1,18 @@
+14
+1 2 3 4 5 6
+1 2 3 4 51 6
+5
+14
+7
+42
+1 2 3 4 12
+18
+1 2 3 4 18
+1 2 7 4 5
+1 2 7 13 5 9
+14
+9
+4
+9
+16
+./appendop.tests: line 83: x: readonly variable
diff --git a/tests/appendop.tests b/tests/appendop.tests
new file mode 100644 (file)
index 0000000..7b61f3f
--- /dev/null
@@ -0,0 +1,83 @@
+# basic cases
+a=1
+a+=4
+echo $a
+
+x=(1 2 3)
+x+=(4 5 6)
+
+echo ${x[@]}
+
+x[4]+=1
+echo ${x[@]}
+
+# trickier cases
+
+a+=5 printenv a
+echo $a
+
+# if the integer flag is set, ksh93 appears to do arithmetic += and evaluate
+# old value as an arithmetic expression
+a=
+typeset -i a
+a+=7
+echo $a
+
+b=4+1
+typeset -i b
+b+=37
+
+echo $b
+
+unset x
+x=(1 2 3 4 5)
+
+typeset -i x
+
+x[4]+=7
+
+echo ${x[@]}
+
+unset x
+typeset -i x
+
+x=([0]=7+11)
+echo ${x[@]}
+
+unset x
+x=(1 2 3 4 5)
+
+typeset -i x
+
+#x[4]=7+11
+
+x=(1 2 3 4 [4]=7+11 )
+echo ${x[@]}
+
+x=( 1 2 [2]+=7 4 5 )
+echo ${x[@]}
+
+x+=( [3]+=9 [5]=9 )
+echo ${x[@]}
+
+unset a
+a=1
+export a+=4
+printenv a
+printenv a+
+
+unset x
+typeset -i x=4+5
+echo $x
+
+unset x
+typeset x+=4
+echo $x
+
+typeset -i x+=5
+echo $x
+
+readonly x+=7
+echo $x
+
+x+=5
index c74baa4..4494110 100644 (file)
@@ -14,24 +14,24 @@ fx is a function
 fx () 
 { 
     i=0;
-    for ((1 ; i < 3 ; i++ ))
+    for ((1; i < 3; i++ ))
     do
         echo $i;
     done;
-    for ((i=0 ; 1 ; i++ ))
+    for ((i=0; 1; i++ ))
     do
         if (( i >= 3 )); then
             break;
         fi;
         echo $i;
     done;
-    for ((i=0 ; i<3 ; 1))
+    for ((i=0; i<3; 1))
     do
         echo $i;
         (( i++ ));
     done;
     i=0;
-    for ((1 ; 1 ; 1))
+    for ((1; 1; 1))
     do
         if (( i > 2 )); then
             break;
@@ -40,7 +40,7 @@ fx ()
         (( i++ ));
     done;
     i=0;
-    for ((1 ; 1 ; 1))
+    for ((1; 1; 1))
     do
         if (( i > 2 )); then
             break;
index fa2ae2a..488b4e4 100644 (file)
@@ -128,6 +128,15 @@ grep [ 123 ] *
 length = 3
 value = new1 new2 new3
 ./array.tests: line 237: narray: unbound variable
+./array1.sub: line 1: syntax error near unexpected token `('
+./array1.sub: line 1: `printf "%s\n" -a a=(a 'b  c')'
+./array2.sub: line 1: syntax error near unexpected token `('
+./array2.sub: line 1: `declare -a ''=(a 'b c')'
+9
+9
+
+
+7 8 9
 
 a b c d e f g
 for case if then else
@@ -135,10 +144,10 @@ for case if then else
 12 14 16 18 20
 4414758999202
 aaa bbb
-./array.tests: line 277: syntax error near unexpected token `<>'
-./array.tests: line 277: `metas=( <> < > ! )'
-./array.tests: line 278: syntax error near unexpected token `<>'
-./array.tests: line 278: `metas=( [1]=<> [2]=< [3]=> [4]=! )'
+./array.tests: line 282: syntax error near unexpected token `<>'
+./array.tests: line 282: `metas=( <> < > ! )'
+./array.tests: line 283: syntax error near unexpected token `<>'
+./array.tests: line 283: `metas=( [1]=<> [2]=< [3]=> [4]=! )'
 abc 3
 case 4
 abc case if then else 5
@@ -178,3 +187,13 @@ negative offset 2 - expect seven
 seven
 out-of-range offset
 
+e
+4
+1 4 7 10
+'b
+b  c
+$0
+t
+[3]=abcde r s t u v
+e
+9
index 4f5d830..4a735d8 100644 (file)
@@ -236,7 +236,12 @@ echo "value = ${barray[*]}"
 set -u
 ( echo ${#narray[4]} )
 
+${THIS_SH} ./array1.sub
+${THIS_SH} ./array2.sub
+
 # some old bugs and ksh93 compatibility tests
+${THIS_SH} ./array3.sub
+
 set +u
 cd /tmp
 
@@ -332,3 +337,62 @@ echo ${av[@]: -1:2}
 
 echo out-of-range offset
 echo ${av[@]:12}
+
+# parsing problems and other inconsistencies not fixed until post bash-3.0
+unset x
+declare -a x=(')' $$)
+[ ${x[1]} -eq $$ ] || echo bad
+
+unset x
+declare -a x=(a b c d e)
+echo ${x[4]}
+
+z=([1]=one [4]=four [7]=seven [10]=ten)
+
+echo ${#z[@]}
+
+echo ${!z[@]}
+
+unset x
+declare -a x=(a \'b  c\')
+
+echo "${x[1]}"
+
+unset x
+declare -a x=(a 'b  c')
+
+echo "${x[1]}"
+
+unset x
+declare -a x=($0)
+[ "${x[@]}" = $0 ] || echo double expansion of \$0
+declare -a x=(\$0)
+echo "${x[@]}"
+
+: ${TMPDIR:=/tmp}
+
+mkdir $TMPDIR/bash-test-$$
+cd $TMPDIR/bash-test-$$
+
+trap "cd / ; rm -rf $TMPDIR/bash-test-$$" 0 1 2 3 6 15
+
+touch '[3]=abcde'
+
+touch r s t u v
+
+declare -a x=(*)
+
+echo ${x[3]}
+echo ${x[@]}
+
+unset x
+x=(a b c d e)
+
+echo ${x[*]: -1}
+
+unset x[4]
+unset x[2]
+
+x[9]='9'
+
+echo ${x[*]: -1}
diff --git a/tests/array1.sub b/tests/array1.sub
new file mode 100644 (file)
index 0000000..86e9332
--- /dev/null
@@ -0,0 +1 @@
+printf "%s\n" -a a=(a 'b  c')
diff --git a/tests/array2.sub b/tests/array2.sub
new file mode 100644 (file)
index 0000000..0e6417d
--- /dev/null
@@ -0,0 +1 @@
+declare -a ''=(a 'b c')
diff --git a/tests/array3.sub b/tests/array3.sub
new file mode 100644 (file)
index 0000000..579b42b
--- /dev/null
@@ -0,0 +1,9 @@
+a=(0 1 2 3 4 5 6 7 8 9)
+
+echo ${a[@]: -1}
+
+echo ${a[@]:9}
+echo ${a[@]:10}
+echo ${a[@]:11}
+
+echo ${a[@]:7:3}
index 006f2c2..3d7ef8e 100644 (file)
@@ -17,6 +17,11 @@ abcd{efgh
 foo 1 2 bar
 foo 1 2 bar
 foo 1 2 bar
+foobar foobaz.
+foobar foobaz
+bazx bazy
+vx vy
+bazx bazy
 1 2 3 4 5 6 7 8 9 10
 0..10 braces
 0 1 2 3 4 5 6 7 8 9 10 braces
@@ -28,8 +33,8 @@ x3y
 x10y x9y x8y x7y x6y x5y x4y x3y x2y x1y
 a b c d e f
 f e d c b a
-a _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
-A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ a
+a _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
+A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ a
 f
 {1..f}
 {f..1}
index b9ae180..3f57829 100644 (file)
@@ -23,6 +23,19 @@ echo foo {1,2} bar
 echo `zecho foo {1,2} bar`
 echo $(zecho foo {1,2} bar)
 
+var=baz
+varx=vx
+vary=vy
+
+echo foo{bar,${var}.}
+echo foo{bar,${var}}
+
+echo "${var}"{x,y}
+echo $var{x,y}
+echo ${var}{x,y}
+
+unset var varx vary
+
 # new sequence brace operators
 echo {1..10}
 
index f686606..9266b5a 100644 (file)
@@ -63,6 +63,7 @@ enable return
 enable set
 enable shift
 enable source
+enable times
 enable trap
 enable unset
 enable .
@@ -78,6 +79,7 @@ enable return
 enable set
 enable shift
 enable source
+enable times
 enable trap
 enable unset
 enable -n test worked
index 3a5e4ae..517591c 100755 (executable)
@@ -56,7 +56,7 @@ fn4() {
 #
 # Test of support for debugging facilities in bash
 # 
-# Test debugger set option fntrace - set on. Not in vanilla Bash 2.05
+# Test debugger set option functrace - set on. Not in vanilla Bash 2.05
 #
 set -o functrace
 trap 'print_debug_trap $LINENO' DEBUG
@@ -72,7 +72,7 @@ fn2
 fn3
 source ./dbg-support.sub
 
-# Test debugger set option fntrace - set off
+# Test debugger set option functrace - set off
 set +T
 
 # We should not trace into this.
@@ -82,7 +82,7 @@ fn3
 fn4
 source ./dbg-support.sub
 
-# Another way to say: set -o fntrace
+# Another way to say: set -o functrace
 set -T
 
 # We should trace into this.
index d8329b1..25c2443 100755 (executable)
@@ -219,4 +219,8 @@ ${THIS_SH} ./dollar-at1.sub
 # $@.  Bugs through bash-2.05b
 ${THIS_SH} ./dollar-at2.sub
 
+# tests for various expansions of $* in different contexts -- word split,
+# no splitting, etc. when $IFS is NUL
+${THIS_SH} ./dollar-star2.sub
+
 exit 0
diff --git a/tests/dollar-star2.sub b/tests/dollar-star2.sub
new file mode 100644 (file)
index 0000000..844a297
--- /dev/null
@@ -0,0 +1,26 @@
+set A B
+
+IFS=
+
+x=$*
+y="$*"
+
+recho "$x"
+recho "$y" 
+
+IFS=$' \t\n'
+
+set 'A B' 'C D'
+
+IFS=
+
+x=$*
+y="$*"
+
+recho "$x"
+recho "$y"
+
+recho $x
+recho $*
+recho $y
+recho "$*"
index 7b0f511..ff57f1c 100644 (file)
@@ -125,3 +125,12 @@ argv[2] = <2>
 argv[1] = <echo 1 ; echo 1>
 argv[1] = <echo 1 2 ; echo 1>
 argv[2] = <2>
+argv[1] = <AB>
+argv[1] = <AB>
+argv[1] = <A BC D>
+argv[1] = <A BC D>
+argv[1] = <A BC D>
+argv[1] = <A B>
+argv[2] = <C D>
+argv[1] = <A BC D>
+argv[1] = <A BC D>
index 9d8e185..ac987fb 100644 (file)
@@ -95,6 +95,6 @@ trap: usage: trap [-lp] [arg signal_spec ...]
 ./errors.tests: line 246: kill: -s: option requires an argument
 ./errors.tests: line 248: kill: S: invalid signal specification
 ./errors.tests: line 250: kill: `': not a pid or valid job spec
-kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
+kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
 ./errors.tests: line 255: set: trackall: invalid option name
 ./errors.tests: line 262: `!!': not a valid identifier
index fbd2624..d65b89d 100644 (file)
@@ -12,7 +12,7 @@ after exec1.sub without args: 0
 126
 ./execscript: line 39: /: is a directory
 126
-/: /: cannot execute binary file
+/: /: is a directory
 126
 ./execscript: line 46: .: /: is a directory
 1
@@ -51,3 +51,4 @@ this is ohio-state
 0
 1
 testb
+after
index 61722f2..09a4ba5 100644 (file)
@@ -104,3 +104,7 @@ ${THIS_SH} ./exec6.sub
 
 # checks for properly deciding what constitutes an executable file
 ${THIS_SH} ./exec7.sub
+
+true | `echo true` &
+
+echo after
index f8512c3..884b5a6 100644 (file)
@@ -372,3 +372,9 @@ a="a b c d e"
 declare b=$a
 expect '<a> <b> <c> <d> <e>'
 recho $b
+
+a="a?b?c"
+
+echo ${a//\\?/ }
+
+echo ${a//\?/ }
index 747c80e..fdadbd9 100644 (file)
@@ -143,3 +143,5 @@ argv[2] = <b>
 argv[3] = <c>
 argv[4] = <d>
 argv[5] = <e>
+a?b?c
+a b c
index 154a969..f063b26 100644 (file)
@@ -77,3 +77,4 @@ a b a,b a-b a:b a;b a_b
 a b a,b a-b a.b a:b a;b a_b
 a b a,b a-b a.b a:b a;b a_b
 a b a,b a-b a.b a:b a;b a_b
+argv[1] = <ef>
index 1a123d8..2d93850 100644 (file)
@@ -353,6 +353,9 @@ echo a@(.|[^[:alnum:]])b
 builtin cd /
 rm -rf $TESTDIR
 
+x=abcdef
+recho "${x#*(a|b)cd}"
+
 # this is for the benefit of pure coverage, so it writes the pcv file
 # in the right place
 builtin cd $MYDIR
diff --git a/tests/extglob3.right b/tests/extglob3.right
new file mode 100644 (file)
index 0000000..db9447e
--- /dev/null
@@ -0,0 +1,27 @@
+match 1
+match 2
+match 3
+match 4
+match 1a
+match 1b
+match 2a
+match 2b
+match 3a
+match 3b
+match 4a
+match 4b
+match 5
+match 6
+match 7
+match 8
+match 9
+match 10
+match 11
+match 12
+match 13
+match 14
+match 15
+match 16
+match 17
+match 18
+ok 19
diff --git a/tests/extglob3.tests b/tests/extglob3.tests
new file mode 100644 (file)
index 0000000..60454a2
--- /dev/null
@@ -0,0 +1,56 @@
+shopt -s extglob
+
+[[ ab/../ == @(ab|+([^/]))/..?(/) ]] && echo match 1
+
+[[ ab/../ == +([^/])/..?(/) ]] && echo match 2
+
+[[ ab/../ == @(ab|?b)/..?(/) ]] && echo match 3
+
+[[ ab/../ == +([^/])/../ ]] && echo match 4
+
+[[ ab/../ == +([!/])/..?(/) ]] && echo match 1a
+
+[[ ab/../ == @(ab|+([!/]))/..?(/) ]] && echo match 1b
+
+[[ ab/../ == +([!/])/../ ]] && echo match 2a
+
+[[ ab/../ == +([!/])/..?(/) ]] && echo match 2b
+
+[[ ab/../ == +([!/])/..@(/) ]] && echo match 3a
+
+[[ ab/../ == +(ab)/..?(/) ]] && echo match 3b
+
+[[ ab/../ == [!/][!/]/../ ]] && echo match 4a
+
+[[ ab/../ == @(ab|?b)/..?(/) ]] && echo match 4b
+
+[[ ab/../ == [^/][^/]/../ ]] && echo match 5
+
+[[ ab/../ == ?b/..?(/) ]] && echo match 6
+
+[[ ab/../ == +(?b)/..?(/) ]] && echo match 7
+
+[[ ab/../ == +(?b|?b)/..?(/) ]] && echo match 8
+
+[[ ab/../ == @(?b|?b)/..?(/) ]] && echo match 9
+
+[[ ab/../ == @(a?|?b)/..?(/) ]] && echo match 10
+
+[[ ab/../ == ?(ab)/..?(/) ]] && echo match 11
+
+[[ ab/../ == ?(ab|??)/..?(/) ]] && echo match 12
+
+[[ ab/../ == @(??)/..?(/) ]] && echo match 13
+
+[[ ab/../ == @(??|a*)/..?(/) ]] && echo match 14
+
+[[ ab/../ == @(a*)/..?(/) ]] && echo match 15
+
+[[ ab/../ == +(??)/..?(/) ]] && echo match 16
+
+[[ ab/../ == +(??|a*)/..?(/) ]] && echo match 17
+
+[[ ab/../ == +(a*)/..?(/) ]] && echo match 18
+
+#
+j="@(x)" ; [[ x == $j ]] && echo ok 19
index 2095f24..063f4e0 100644 (file)
@@ -157,4 +157,12 @@ ${THIS_SH} ./func2.sub
 # test for some posix-specific function behavior
 ${THIS_SH} ./func3.sub
 
+unset -f myfunction
+myfunction() {
+    echo "bad shell function redirection"
+} >> /dev/null
+
+myfunction
+myfunction | cat
+
 exit 0
index 2659aac..80b01cf 100644 (file)
@@ -24,5 +24,5 @@ f3 ()
 echo $(echo hi)
 echo ho
 echo off to work we go
-declare -a uu='([0]="" [1]="kghfjk" [2]="jkfzuk" [3]="i\
+declare -a uu='([0]="" [1]="kghfjk" [2]="jkfzuk" [3]="i
 ")'
index 193e9d4..f1c9e9d 100644 (file)
@@ -1,5 +1,5 @@
 echo $BASH_VERSION
-./histexp.tests: line 22: history: !!:z: history expansion failed
+./histexp.tests: line 24: history: !!:z: history expansion failed
     1  for i in one two three; do echo $i; done
     2  /bin/sh -c 'echo this is $0'
     3  ls
index 11596dd..721208c 100644 (file)
@@ -5,6 +5,8 @@ trap 'rm /tmp/newhistory' 0
 file=bax
 histchars='!^#'        # make sure history comment char is set correctly
 
+unset HISTFILESIZE
+
 history -c
 
 HISTFILE=history.list
index 619d34c..556a312 100644 (file)
@@ -97,7 +97,7 @@ line 2 for history
 6       HISTFILE=/tmp/newhistory
 7       echo displaying \$HISTFILE after history -a
 8       cat $HISTFILE
-./history.tests: line 73: fc: history specification out of range
+./history.tests: line 75: fc: history specification out of range
    14  set -H
    15  echo line 2 for history
    16  unset HISTSIZE
@@ -107,5 +107,5 @@ echo xx xb xc
 xx xb xc
 echo 44 48 4c
 44 48 4c
-./history.tests: line 88: fc: no command found
+./history.tests: line 90: fc: no command found
 1
index 76ea561..833cf3a 100644 (file)
@@ -8,6 +8,8 @@ history -r -w /dev/null
 # bad option
 fc -v
 
+unset HISTFILESIZE
+
 # all of these should result in an empty history list
 history -c
 history -r /dev/null
diff --git a/tests/ifs-posix.right b/tests/ifs-posix.right
new file mode 100644 (file)
index 0000000..f3bdccc
--- /dev/null
@@ -0,0 +1 @@
+# tests 6856 passed 6856 failed 0
diff --git a/tests/ifs-posix.tests b/tests/ifs-posix.tests
new file mode 100644 (file)
index 0000000..cf9a898
--- /dev/null
@@ -0,0 +1,257 @@
+# Usage: $SHELL ifs.sh
+#
+# This script generates 6856 tests for the set(1) and read(1)
+# builtins w.r.t. IFS whitespace and non-whitespace characters.
+# Each failed test produces one line on the standard output that
+# contains the test along with the expected and actual results.
+# The last output line contains the test result counts.  ordered>0
+# are the number of tests where IFS=": " produced different results
+# than IFS=" :".  If a test fails the same way for IFS=": " and
+# IFS=" :" then the second output line is suppressed.
+
+TESTS=6856
+
+ksh_read=0
+echo 1 | read ksh_read
+ksh_arith=0
+eval '((ksh_arith+=1))' 2>/dev/null
+
+failed=0
+ordered=0
+passed=0
+
+split()
+{
+       i=$1 s=$2 r=$3 S='' R=''
+       for ifs in ': ' ' :'
+       do      IFS=$ifs
+               set x $i
+               shift
+               IFS=' '
+               g="[$#]"
+               while   :
+               do      case $# in
+                       0)      break ;;
+                       esac
+                       g="$g($1)"
+                       shift
+               done
+               case $g in
+               "$s")   case $ksh_arith in
+                       1)      ((passed+=1)) ;;
+                       *)      passed=`expr $passed + 1` ;;
+                       esac
+                       case $S in
+                       '')     S=$g
+                               ;;
+                       "$g")   ;;
+                       *)      case $ksh_arith in
+                               1)      ((ordered+=1)) ;;
+                               *)      ordered=`expr $ordered + 1` ;;
+                               esac
+                               ;;
+                       esac
+                       ;;
+               "$S")   case $ksh_arith in
+                       1)      ((failed+=1)) ;;
+                       *)      failed=`expr $failed + 1` ;;
+                       esac
+                       ;;
+               *)      case $ksh_arith in
+                       1)      ((failed+=1)) ;;
+                       *)      failed=`expr $failed + 1` ;;
+                       esac
+                       case $s in
+                       "$S")   ;;
+                       ?0*)    echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#]\" # expected \"$s\" got \"$g\"" ;;
+                       ?1*)    echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)\" # expected \"$s\" got \"$g\"" ;;
+                       ?2*)    echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)\" # expected \"$s\" got \"$g\"" ;;
+                       ?3*)    echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)(\$3)\" # expected \"$s\" got \"$g\"" ;;
+                       *)      echo TEST ERROR i="'$i'" s="'$s'" ;;
+                       esac
+                       case $S in
+                       '')     S=$g
+                               ;;
+                       "$g")   ;;
+                       *)      case $ksh_arith in
+                               1)      ((ordered+=1)) ;;
+                               *)      ordered=`expr $ordered + 1` ;;
+                               esac
+                               ;;
+                       esac
+               esac
+               case $ksh_read in
+               1)      echo "$i" | IFS=$ifs read x y; g="($x)($y)" ;;
+               *)      g=`export ifs; echo "$i" | ( IFS=$ifs; read x y; echo "($x)($y)" )` ;;
+               esac
+               case $g in
+               "$r")   case $ksh_arith in
+                       1)      ((passed+=1)) ;;
+                       *)      passed=`expr $passed + 1` ;;
+                       esac
+                       case $R in
+                       '')     R=$g
+                               ;;
+                       "$g")   ;;
+                       *)      case $ksh_arith in
+                               1)      ((ordered+=1)) ;;
+                               *)      ordered=`expr $ordered + 1` ;;
+                               esac
+                               ;;
+                       esac
+                       ;;
+               "$R")   case $ksh_arith in
+                       1)      ((failed+=1)) ;;
+                       *)      failed=`expr $failed + 1` ;;
+                       esac
+                       ;;
+               *)      case $ksh_arith in
+                       1)      ((failed+=1)) ;;
+                       *)      failed=`expr $failed + 1` ;;
+                       esac
+                       case $r in
+                       "$R")   ;;
+                       *)      echo "echo \"$i\" | ( IFS=\"$ifs\" read x y; echo \"(\$x)(\$y)\" ) # expected \"$r\" got \"$g\"" ;;
+                       esac
+                       case $R in
+                       '')     R=$g
+                               ;;
+                       "$g")   ;;
+                       *)      case $ksh_arith in
+                               1)      ((ordered+=1)) ;;
+                               *)      ordered=`expr $ordered + 1` ;;
+                               esac
+                               ;;
+                       esac
+                       ;;
+               esac
+       done
+}
+
+for str in     \
+       '-'     \
+       'a'     \
+       '- -'   \
+       '- a'   \
+       'a -'   \
+       'a b'   \
+       '- - -' \
+       '- - a' \
+       '- a -' \
+       '- a b' \
+       'a - -' \
+       'a - b' \
+       'a b -' \
+       'a b c' \
+
+do
+       IFS=' '
+       set x $str
+
+       shift
+       case $# in
+       0)      continue ;;
+       esac
+
+       f1=$1
+       case $f1 in
+       '-')    f1='' ;;
+       esac
+
+       shift
+       case $# in
+       0)      for d0 in '' ' '
+               do
+                       for d1 in '' ' ' ':' ' :' ': ' ' : '
+                       do
+                               case $f1$d1 in
+                               '')     split "$d0$f1$d1" "[0]" "()()" ;;
+                               ' ')    ;;
+                               *)      split "$d0$f1$d1" "[1]($f1)" "($f1)()" ;;
+                               esac
+                       done
+               done
+               continue
+               ;;
+       esac
+       f2=$1
+       case $f2 in
+       '-')    f2='' ;;
+       esac
+
+       shift
+       case $# in
+       0)      for d0 in '' ' '
+               do
+                       for d1 in ' ' ':' ' :' ': ' ' : '
+                       do
+                               case ' ' in
+                               $f1$d1|$d1$f2)  continue ;;
+                               esac
+                               for d2 in '' ' ' ':' ' :' ': ' ' : '
+                               do
+                                       case $f2$d2 in
+                                       '')     split "$d0$f1$d1$f2$d2" "[1]($f1)" "($f1)()" ;;
+                                       ' ')    ;;
+                                       *)      split "$d0$f1$d1$f2$d2" "[2]($f1)($f2)" "($f1)($f2)" ;;
+                                       esac
+                               done
+                       done
+               done
+               continue
+               ;;
+       esac
+       f3=$1
+       case $f3 in
+       '-')    f3='' ;;
+       esac
+
+       shift
+       case $# in
+       0)      for d0 in '' ' '
+               do
+                       for d1 in ':' ' :' ': ' ' : '
+                       do
+                               case ' ' in
+                               $f1$d1|$d1$f2)  continue ;;
+                               esac
+                               for d2 in ' ' ':' ' :' ': ' ' : '
+                               do
+                                       case $f2$d2 in
+                                       ' ')    continue ;;
+                                       esac
+                                       case ' ' in
+                                       $f2$d2|$d2$f3)  continue ;;
+                                       esac
+                                       for d3 in '' ' ' ':' ' :' ': ' ' : '
+                                       do
+                                               case $f3$d3 in
+                                               '')     split "$d0$f1$d1$f2$d2$f3$d3" "[2]($f1)($f2)" "($f1)($f2)" ;;
+                                               ' ')    ;;
+                                               *)      x=$f2$d2$f3$d3
+                                                       x=${x#' '}
+                                                       x=${x%' '}
+                                                       split "$d0$f1$d1$f2$d2$f3$d3" "[3]($f1)($f2)($f3)" "($f1)($x)"
+                                                       ;;
+                                               esac
+                                       done
+                               done
+                       done
+               done
+               continue
+               ;;
+       esac
+done
+case $ksh_arith in
+1)     ((tests=passed+failed)) ;;
+*)     tests=`expr $passed + $failed` ;;
+esac
+case $ordered in
+0)     ordered="" ;;
+*)     ordered=" ordered $ordered" ;;
+esac
+case $tests in
+$TESTS)        fatal="" ;;
+*)     fatal=" -- fundamental IFS error -- $TESTS tests expected"
+esac
+echo "# tests $tests passed $passed failed $failed$ordered$fatal"
diff --git a/tests/intl.right b/tests/intl.right
new file mode 100644 (file)
index 0000000..21a3b4f
--- /dev/null
@@ -0,0 +1,10 @@
+1
+AéB
+B
+B
+ok 1
+ok 2
+aéb
+0000000   141 303 251 142                                                
+0000004
diff --git a/tests/intl.tests b/tests/intl.tests
new file mode 100644 (file)
index 0000000..0dc33cb
--- /dev/null
@@ -0,0 +1,38 @@
+export LANG=en_US.UTF-8
+
+a=$'\303\251'
+
+echo "$a"
+
+echo ${#a}
+
+b=$'A\303\251B'
+
+echo "$b"
+
+echo ${b: -1}
+
+c=AeB
+
+echo ${c: -1}
+
+unset a
+a=$(printf '%b' 'A\303\251B')
+IFS=$(printf '%b' '\303\251')
+
+case "$a" in
+"A${IFS}B")    echo ok 1 ;;
+*)             echo bad 1 ;;
+esac
+
+set $a
+
+case $1 in
+A)             echo ok 2 ;;
+*)             echo bad 2 ;;
+esac
+
+set a b
+
+printf '%s\n' "$*"
+printf '%s' "$*" | od -b
diff --git a/tests/iquote.right b/tests/iquote.right
new file mode 100644 (file)
index 0000000..d164f10
--- /dev/null
@@ -0,0 +1,61 @@
+argv[1] = <xxxyyy>
+argv[1] = <xxx^?yyy>
+argv[1] = <xy>
+argv[1] = <x^?y>
+argv[1] = <-->
+argv[1] = <-^?->
+argv[1] = <>
+argv[1] = <>
+argv[1] = <^?>
+argv[1] = <^?yy>
+0x7f
+0x7f
+0x7f
+argv[1] = <^?>
+argv[1] = <^?@>
+argv[1] = <@^?@>
+argv[1] = <@^?>
+argv[1] = <^?>
+argv[1] = <^?@>
+argv[1] = <@^?@>
+argv[1] = <@^?>
+argv[1] = <1>
+argv[2] = <^?>
+argv[3] = <^?>
+argv[1] = <2>
+argv[2] = <^?a>
+argv[3] = <^?a>
+argv[1] = <2>
+argv[2] = <^?a>
+argv[3] = <^?a>
+argv[1] = <3>
+argv[2] = <^?aa>
+argv[3] = <^?aa>
+argv[1] = <>
+argv[1] = <-->
+argv[1] = <-->
+argv[1] = <^?>
+argv[1] = <-^?->
+argv[1] = <^?>
+argv[1] = <-^?->
+ok
+argv[1] = <aaa^?bbb>
+argv[1] = <ccc^?ddd>
+argv[1] = <eee^?fff>
+argv[1] = <ggg^?hhh>
+argv[1] = <aaabbb>
+argv[1] = <cccddd>
+argv[1] = <eeefff>
+argv[1] = <ggghhh>
+argv[1] = <aaa^?bbb>
+argv[1] = <ccc^?ddd>
+argv[1] = <eee^?fff>
+argv[1] = <ggg^?hhh>
+argv[1] = <aaabbb>
+argv[1] = <cccddd>
+argv[1] = <eeefff>
+argv[1] = <ggghhh>
+argv[1] = <aaa^?bbb>
+argv[1] = <ccc^?ddd>
+argv[1] = <eee^?fff>
+argv[1] = <ggg^?hhh>
diff --git a/tests/iquote.tests b/tests/iquote.tests
new file mode 100644 (file)
index 0000000..a2cdf4f
--- /dev/null
@@ -0,0 +1,143 @@
+# bug in bash up to and including bash-3.0 (including patches)
+#
+# problem is conflict between CTLNUL used internally to denote quoted null
+# characters and its value (0x7f) appearing in the expansion of a variable
+#
+unset x
+recho "xxx${x}yyy"
+
+y=$'\177'
+recho "xxx${y}yyy"
+
+unset y
+
+unset undef
+
+set ""
+recho ${undef-"x$*y"}
+
+set $'\177'
+recho ${undef-"x$*y"}
+
+shift $#
+
+f()
+{
+       recho "-${*-x}-"
+}
+
+f ''
+f $'\177'
+
+unset -f f
+
+x=12345
+
+recho "${x:6:1}"
+
+x=
+recho "${x:0:1}"
+
+y=$'\177'
+recho "${y:0:1}"
+
+y=xxx$'\177'yyy
+recho "${y:3:3}"
+
+unset x y
+
+eval tmp=`printf "$'\\\\\x%x'\n" 127`
+printf "%#1x\n" "'$tmp"
+
+x=$'\177'
+printf "%#1x\n" "'$x"
+
+a=127
+eval c=\$\'\\$(printf '%o' $a)\'
+printf "%#1x\n" "'$c"
+
+recho "$c"
+recho "$c"@
+recho @"$c"@
+recho @"$c"
+
+recho "$c"
+recho "$c@"
+recho "@$c@"
+recho "@$c"
+
+unset tmp x a c
+
+qtest()
+{
+       recho ${#q} "${q}" ${q}
+}
+
+q=$'\x7f'
+qtest
+
+q=${q}a
+qtest
+
+q=$'\x7fa'
+qtest
+
+q="${q}a"
+qtest
+
+unset -f qtest
+unset q
+
+set -- ''
+recho "${*:1}"
+recho  ${*:1}
+recho  -${*:1}-
+recho  -"${*:1}"-
+
+set $'\177'
+recho "${*:1}"
+recho "-${*:1}-"
+
+recho  ${*:1}
+recho -${*:1}-
+
+shift $#
+
+DEL=`awk 'END{printf("%c", 0+127)}' </dev/null`
+T1=a\ $DEL
+T2="a $DEL"
+set -- x $(echo $T1|wc -c) $(echo $T2|wc -c); shift
+L1=$1; L2=$2
+case "$L1/$L2" in
+4/4) echo ok;;
+*) echo CTLNUL bug: L1=$L1, L2=$L2;;
+esac
+
+x=$'\177'
+recho "aaa${x}bbb"
+recho ccc"${x}"ddd
+recho eee"$x"fff
+recho ggg"$(echo $x)"hhh
+
+x=
+recho "aaa${x}bbb"
+recho ccc"${x}"ddd
+recho eee"$x"fff
+recho ggg"$(echo $x)"hhh
+
+set -- $'\177'
+recho "aaa${1}bbb"
+recho ccc"${1}"ddd
+recho eee"$1"fff
+recho ggg"$(echo $1)"hhh
+
+set -- ""
+recho "aaa${1}bbb"
+recho ccc"${1}"ddd
+recho eee"$1"fff
+recho ggg"$(echo $1)"hhh
+
+recho aaa$'\177'bbb
+recho ccc"\7f"ddd
+recho "eee\7ffff"
+recho ggg"$(echo $'\177')"hhh
index 3ec1bbe..0a6fce9 100644 (file)
@@ -56,7 +56,7 @@ fg-bg 6
 ./jobs.tests: line 95: fg: -s: invalid option
 fg: usage: fg [job_spec]
 ./jobs.tests: line 96: bg: -s: invalid option
-bg: usage: bg [job_spec]
+bg: usage: bg [job_spec ...]
 ./jobs.tests: line 101: disown: -s: invalid option
 disown: usage: disown [-h] [-ar] [jobspec ...]
 ./jobs.tests: line 105: disown: %1: no such job
index 51980d1..2eb4197 100644 (file)
@@ -18,5 +18,7 @@ echo $?
 
 wait
 
-cat &
+# the sleep is intended to give the kill time to execute before the job
+# exits
+(sleep 1 ; cat ) &
 kill -1 %% && echo i killed it || echo could not kill it
index a985856..91a375c 100644 (file)
@@ -28,7 +28,7 @@ argv[3] = <d>
 argv[4] = <e>
 argv[5] = <f>
 argv[1] = </usr/homes/chet>
-argv[1] = </usr/homes/chet>
+argv[1] = <~>
 argv[1] = <~>
 argv[1] = <\~>
 argv[1] = <\ \~>
@@ -108,7 +108,7 @@ argv[3] = <c>
 argv[4] = <d>
 argv[5] = <e>
 argv[6] = <f>
-./more-exp.tests: line 269: abc=def: command not found
+./more-exp.tests: line 272: abc=def: command not found
 argv[1] = <a b c d e>
 argv[1] = <a>
 argv[2] = <b>
@@ -184,13 +184,13 @@ argv[1] = <1>
 argv[1] = <5>
 argv[1] = <5>
 argv[1] = <0>
-./more-exp.tests: line 420: ${#:}: bad substitution
-./more-exp.tests: line 422: ${#/}: bad substitution
-./more-exp.tests: line 424: ${#%}: bad substitution
-./more-exp.tests: line 426: ${#=}: bad substitution
-./more-exp.tests: line 428: ${#+}: bad substitution
-./more-exp.tests: line 430: ${#1xyz}: bad substitution
-./more-exp.tests: line 433: #: %: syntax error: operand expected (error token is "%")
+./more-exp.tests: line 423: ${#:}: bad substitution
+./more-exp.tests: line 425: ${#/}: bad substitution
+./more-exp.tests: line 427: ${#%}: bad substitution
+./more-exp.tests: line 429: ${#=}: bad substitution
+./more-exp.tests: line 431: ${#+}: bad substitution
+./more-exp.tests: line 433: ${#1xyz}: bad substitution
+./more-exp.tests: line 436: #: %: syntax error: operand expected (error token is "%")
 argv[1] = <0>
 argv[1] = <a+b>
 argv[1] = <+>
index 6c821a5..4a3cb7f 100644 (file)
@@ -65,7 +65,10 @@ HOME=/usr/homes/chet
 somevar=
 expect "<$HOME>"
 recho ${somevar:-~}
-expect "<$HOME>"
+# This changed after bash-3.0, when the tilde implementation was redone.  It's
+# not backward compatible, but it's very hard to be backward-compatible here,
+# and I think the old behavior was a bug
+expect '<~>'
 recho "${somevar:-~}"
 expect '<~>'
 recho "${somevar:-"~"}"
index a2ad16f..8866835 100644 (file)
@@ -479,4 +479,27 @@ argv[1] = </full/path/to>
 argv[1] = </>
 argv[1] = <full/path/to/x16>
 argv[1] = <x16>
-./new-exp.tests: line 545: ABXD: parameter unset
+two
+one
+ne
+one
+
+one
+one
+one
+1 2 3 4 5 6 7 8 9
+9
+9
+0
+9
+8 9
+123456789
+9
+9
+h
+h
+--blah
+--blah
+lah
+lah
+./new-exp.tests: line 558: ABXD: parameter unset
index 5d806d6..e0c2702 100644 (file)
@@ -540,6 +540,19 @@ recho ${1%%[!/]*}
 recho ${1#*/}
 recho ${1##*/}
 
+${THIS_SH} ./new-exp5.sub
+
+unset var
+var=blah
+
+# these had better agree
+echo ${var[@]:3}
+echo ${var:3}
+echo ${var[@]//#/--}
+echo ${var//#/--}
+echo ${var[@]##?}
+echo ${var##?}
+
 # this must be last!
 expect $0: 'ABXD: parameter unset'
 recho ${ABXD:?"parameter unset"}
diff --git a/tests/new-exp5.sub b/tests/new-exp5.sub
new file mode 100644 (file)
index 0000000..9b3e1b3
--- /dev/null
@@ -0,0 +1,30 @@
+x=(one two)
+echo ${x[@]:1}
+echo ${x[@]:0:1}
+
+x=(one)
+echo ${x[0]:1}
+echo ${x[0]:0}
+echo ${x[@]:1}
+echo ${x[@]:0}
+
+echo ${x[@]: -1}
+echo ${x[@]: ${#x[@]}-1}
+
+x=(0 1 2 3 4 5 6 7 8 9)
+echo ${x[@]:1}
+
+echo ${x[@]: -1}
+echo ${x[@]: ${#x[@]}-1}
+
+set -- ${x[@]}
+
+echo $1
+echo ${@: -1}
+echo ${@: $#-1}
+
+a=0123456789
+
+echo ${a:1}
+echo ${a: -1}
+echo ${a: ${#a}-1}
index 35bf191..904467b 100644 (file)
@@ -20,3 +20,13 @@ ok
 'abcd'
 \'abcd\'
 \'abcd\'
+argv[1] = <A\CB>
+argv[1] = <A\CB>
+argv[1] = <ab$cde>
+A\CB
+A\CB
+A\CB
+argv[1] = <hello, $"world">
+argv[1] = <hello, \$"world">
+argv[1] = <hello, $"world">
+argv[1] = <hello, $world>
index 05709f4..b25fbe3 100644 (file)
@@ -77,4 +77,26 @@ printf "\'abcd\'\n"
 echo -e "\'abcd\'"
 echo -e "\\'abcd\\'"
 
+# and what do we do about unrecognized escape sequences?
 
+shopt -s xpg_echo
+
+recho $'A\CB'
+
+recho "A\CB"
+
+cde=c
+recho $'ab$cde'
+
+printf "%b\n" 'A\CB'
+printf 'A\CB\n'
+
+echo 'A\CB'
+
+world=chet
+
+recho $'hello, $"world"'
+recho $'hello, \$"world"'
+recho $'hello, $\"world"'
+
+recho "hello, $"world""
index 4d1647d..656b198 100644 (file)
Binary files a/tests/printf.right and b/tests/printf.right differ
index d9bc30c..9cd7302 100644 (file)
@@ -9,6 +9,13 @@ printf --
 printf ""
 printf -- ""
 
+# in the future this may mean to put the output into VAR, but for
+# now it is an error
+# 2005-03-15 no longer an error
+unset var
+printf -v var "%10d" $RANDOM
+echo ${#var}
+
 # this should expand escape sequences in the format string, nothing else
 printf "\tone\n"
 
@@ -196,10 +203,6 @@ printf "%d\n" 26
 # happily ignore overflow conditions in strtol(3)
 #printf "%ld\n" 4294967296
 
-# in the future this may mean to put the output into VAR, but for
-# now it is an error
-printf -v var "%10d" $RANDOM
-
 printf "%10"
 printf "ab%Mcd\n"
 
@@ -220,6 +223,11 @@ printf '(%*b)(%*s)\n' -4 foo -4 bar
 format='%'`printf '%0100384d' 0`'d\n' 
 printf $format 0
 
+# failures in all bash versions through bash-3.0 - undercounted characters
+unset vv
+printf "  %s %s %s  \n%n" ab cd ef vv
+echo "$vv"
+
 # this doesn't work with printf(3) on all systems
 #printf "%'s\n" foo
 
index c388294..8f0b2bf 100644 (file)
@@ -1,6 +1,6 @@
 a.
 -a-b-
--a-b-
+-a-b -
 -a  b-
 -a  b-
 -a-b\-
@@ -51,8 +51,7 @@ echo "$var"
 done 3<$0
 argv[1] = <>
 argv[1] = <>
-argv[1] = <:>
-argv[1] = <:>
+argv[1] = <>
 FOO
 argv[1] = <>
 argv[1] = <3>
index 54b05f8..68bea52 100644 (file)
@@ -94,3 +94,9 @@ after read
 0
 0
 0
+before block
+after block
+c1 is 1
+c2 is 2
+c3 is 3
+c4 is 4
index 19cf9a1..2669cd4 100644 (file)
@@ -156,3 +156,19 @@ ${THIS_SH} ./redir5.sub
 
 # test behavior after a write error with a builtin command
 ${THIS_SH} ./redir6.sub
+
+# problem with redirections using fds bash uses internally
+: ${TMPDIR:=/tmp}
+
+trap 'rm -f $TMPDIR/bash-redir-$$' 0 1 2 3 6 15
+
+echo before block
+{
+       echo before redir
+       exec 10>&1
+       echo after redir
+} > $TMPDIR/bash-redir-$$
+
+echo after block
+
+${THIS_SH} ./redir7.sub
diff --git a/tests/redir7.sub b/tests/redir7.sub
new file mode 100644 (file)
index 0000000..3fd371c
--- /dev/null
@@ -0,0 +1,69 @@
+# weird redirections that caused trouble and were fixed in post-3.0 bash
+stuff()
+{
+       c=1
+       ( sleep 5 < /dev/null >/dev/null 2>&1 & ) &
+}
+
+exec 3>&1
+eval `
+exec 4>&1 >&3 3>&-
+{
+       stuff 4>&-
+       echo "c=$c" >&4
+}`
+echo c1 is $c
+
+unset -f stuff
+
+stuff()
+{
+       c=2
+       ( sleep 5 < /dev/null >/dev/null 2>&1 & )
+}
+
+exec 3>&1
+eval `
+exec 4>&1 >&3 3>&-
+{
+       stuff 4>&-
+       echo "c=$c" >&4
+}`
+echo c2 is $c
+
+unset -f stuff
+
+stuff()
+{
+       c=3
+       { sleep 5 < /dev/null >/dev/null 2>&1 & } &
+}
+
+exec 3>&1
+eval `
+exec 4>&1 >&3 3>&-
+{
+       stuff 4>&-
+       echo "c=$c" >&4
+}`
+echo c3 is $c
+
+unset -f stuff
+
+stuff()
+{
+       c=4
+       { sleep 5 < /dev/null >/dev/null 2>&1 & }
+}
+
+exec 3>&1
+eval `
+exec 4>&1 >&3 3>&-
+{
+       stuff 4>&-
+       echo "c=$c" >&4
+}`
+echo c4 is $c
+
+# fixed in bash-3.1
+echo 'exec <&3' | ${THIS_SH} 3<&0
index 87b9e43..c5dca42 100644 (file)
@@ -66,3 +66,9 @@ argv[3] = <-DSELECT_VECS='>
 argv[1] = <TDEFAULTS>
 argv[2] = <=>
 argv[3] = <-DSELECT_VECS=\'>
+a*b
+ab
+a?b
+ab
+a/b
+ab
index 9aecb82..d457198 100644 (file)
@@ -36,3 +36,14 @@ recho TDEFAULTS = ${selvecs:+-DSELECT_VECS="\\"}
 recho TDEFAULTS = ${selvecs:+-DSELECT_VECS=\\}
 recho TDEFAULTS = ${selvecs:+-DSELECT_VECS=\'}
 recho TDEFAULTS = ${selvecs:+-DSELECT_VECS="\'"}
+
+# more tests for bash-3.0 behavior
+
+var="a*b" ; echo "${var//\\*/}"
+var="a*b" ; echo "${var//\*/}"
+
+var="a?b" ; echo "${var//\\?/}"
+var="a?b" ; echo "${var//\?/}"
+
+var="a/b" ; echo "${var//\\//}"
+var="a/b" ; echo "${var//\//}"
diff --git a/tests/run-appendop b/tests/run-appendop
new file mode 100644 (file)
index 0000000..c5bffbc
--- /dev/null
@@ -0,0 +1,2 @@
+${THIS_SH} ./appendop.tests > /tmp/xx 2>&1
+diff /tmp/xx appendop.right && rm -f /tmp/xx
diff --git a/tests/run-extglob3 b/tests/run-extglob3
new file mode 100644 (file)
index 0000000..2675196
--- /dev/null
@@ -0,0 +1,4 @@
+PATH=$PATH:`pwd`
+export PATH
+${THIS_SH} ./extglob3.tests > /tmp/xx
+diff /tmp/xx extglob3.right && rm -f /tmp/xx
diff --git a/tests/run-ifs-posix b/tests/run-ifs-posix
new file mode 100644 (file)
index 0000000..e578e8d
--- /dev/null
@@ -0,0 +1,2 @@
+${THIS_SH} ./ifs-posix.tests > /tmp/xx 2>&1
+diff /tmp/xx ifs-posix.right && rm -f /tmp/xx
diff --git a/tests/run-intl b/tests/run-intl
new file mode 100644 (file)
index 0000000..6a9234a
--- /dev/null
@@ -0,0 +1,8 @@
+# See whether or not we can use `diff -a'
+( diff -a ./intl.right ./intl.right >/dev/null 2>&1 ) && AFLAG=-a
+
+echo "warning: some of these tests will fail if you do not have UTF-8" >&2
+echo "warning: locales installed on your system." >&2
+echo "warning: please ignore any differences consisting only of white space" >&2
+${THIS_SH} ./intl.tests > /tmp/xx
+diff $AFLAG /tmp/xx intl.right && rm -f /tmp/xx
diff --git a/tests/run-iquote b/tests/run-iquote
new file mode 100644 (file)
index 0000000..61a8aa7
--- /dev/null
@@ -0,0 +1,2 @@
+${THIS_SH} ./iquote.tests >/tmp/xx 2>&1
+diff /tmp/xx iquote.right && rm -f /tmp/xx
index 3014181..5c5dcc4 100644 (file)
@@ -27,7 +27,7 @@ do
        *.orig|*~) ;;
        run-dollars|run-execscript|run-func|run-getopts|run-heredoc) echo $x ; sh $x ;;
        run-ifs-tests|run-input-test|run-invert|run-more-exp|run-nquote) echo $x ; sh $x ;;
-       run-posix2|run-posixpat) echo $x ; sh $x ;;
+       run-ifs-0posix|run-posix2|run-posixpat) echo $x ; sh $x ;;
        run-precedence|run-quote|run-read|run-rhs-exp|run-strip|run-tilde) echo $x ; sh $x ;;
        *)      ;;
        esac
index 006872c..f7d05bb 100644 (file)
@@ -1,2 +1,4 @@
-${THIS_SH} ./nquote.tests 2>&1 | grep -v '^expect' > /tmp/xx
-diff /tmp/xx nquote.right && rm -f /tmp/xx
+echo warning: some of these tests will fail if you do not have UTF-8 >&2
+echo warning: locales installed on your system
+${THIS_SH} ./nquote4.tests 2>&1 | grep -v '^expect' > /tmp/xx
+diff /tmp/xx nquote4.right && rm -f /tmp/xx
index b7a4268..47e4188 100644 (file)
@@ -1,4 +1,4 @@
-echo "warning: different versions of wc put differing amounts of whitespace" >&2
-echo "warning: before their output.  Please do not consider this an error." >&2
+echo "warning: please do not consider output differing only in the amount of" >&2
+echo "warning: white space to be an error." >&2
 ${THIS_SH} ./read.tests > /tmp/xx 2>&1
 diff /tmp/xx read.right && rm -f /tmp/xx
index ecb7e9a..b8569c1 100644 (file)
@@ -1,2 +1,2 @@
-${THIS_SH} ./tilde-tests > /tmp/xx
+${THIS_SH} ./tilde.tests > /tmp/xx
 diff /tmp/xx tilde.right && rm -f /tmp/xx
diff --git a/tests/run-tilde2 b/tests/run-tilde2
new file mode 100644 (file)
index 0000000..4446989
--- /dev/null
@@ -0,0 +1,2 @@
+${THIS_SH} ./tilde2.tests > /tmp/xx
+diff /tmp/xx tilde2.right && rm -f /tmp/xx
index 605a8f0..b2fc219 100644 (file)
@@ -15,8 +15,8 @@ shopt -s extquote
 shopt -u failglob
 shopt -s force_fignore
 shopt -u gnu_errfmt
-shopt -u histreedit
 shopt -u histappend
+shopt -u histreedit
 shopt -u histverify
 shopt -s hostcomplete
 shopt -u huponexit
@@ -26,6 +26,7 @@ shopt -u login_shell
 shopt -u mailwarn
 shopt -u no_empty_cmd_completion
 shopt -u nocaseglob
+shopt -u nocasematch
 shopt -u nullglob
 shopt -s progcomp
 shopt -s promptvars
@@ -58,8 +59,8 @@ shopt -u extdebug
 shopt -u extglob
 shopt -u failglob
 shopt -u gnu_errfmt
-shopt -u histreedit
 shopt -u histappend
+shopt -u histreedit
 shopt -u histverify
 shopt -u huponexit
 shopt -u lithist
@@ -67,6 +68,7 @@ shopt -u login_shell
 shopt -u mailwarn
 shopt -u no_empty_cmd_completion
 shopt -u nocaseglob
+shopt -u nocasematch
 shopt -u nullglob
 shopt -u restricted_shell
 shopt -u shift_verbose
@@ -81,8 +83,8 @@ extdebug              off
 extglob                off
 failglob               off
 gnu_errfmt             off
-histreedit             off
 histappend             off
+histreedit             off
 histverify             off
 huponexit              off
 lithist                off
@@ -90,6 +92,7 @@ login_shell           off
 mailwarn               off
 no_empty_cmd_completion        off
 nocaseglob             off
+nocasematch            off
 nullglob               off
 restricted_shell       off
 shift_verbose          off
similarity index 100%
rename from tests/tilde-tests
rename to tests/tilde.tests
diff --git a/tests/tilde2.right b/tests/tilde2.right
new file mode 100644 (file)
index 0000000..fce0468
--- /dev/null
@@ -0,0 +1,24 @@
+PATH=~/bin:/bin:/usr/bin:.
+/usr/xyz/bin:~/bin2:/bin:/usr/bin:.
+PATH=~/bin:~/bin2:/bin:/usr/bin:.
+~/bin
+~
+/usr/xyz
+~
+~
+~
+argv[1] = <\a>
+argv[1] = <\a>
+/usr/xyz/bash
+ok
+~
+~
+make -k FOO=/usr/xyz/mumble
+/usr/xyz/mumble
+HOME=~
+HOME=~
+/usr/$x/abc
+HOME=~
+/usr/$x/abc
+HOME=/usr/$x/abc
+/usr/$x/abc
diff --git a/tests/tilde2.tests b/tests/tilde2.tests
new file mode 100644 (file)
index 0000000..ff6c76f
--- /dev/null
@@ -0,0 +1,70 @@
+HOME=/usr/xyz
+XPATH=/bin:/usr/bin:.
+
+ADDPATH=PATH=~/bin:$XPATH
+
+echo $ADDPATH
+
+unset ADDPATH
+: ${ADDPATH:=~/bin:~/bin2:$XPATH}
+echo $ADDPATH
+
+unset ADDPATH
+: ${ADDPATH:=PATH=~/bin:~/bin2:$XPATH}
+echo $ADDPATH
+
+cat << !
+~/bin
+!
+
+echo "~"
+
+echo ${TPATH:-~}
+echo "${TPATH:-~}"
+echo "${TPATH:-"~"}"
+
+echo "${XPATH+~}"
+
+recho "\a"
+recho "${TPATH:-\a}"
+
+SHELL=~/bash
+echo $SHELL
+
+case $SHELL in
+~/bash)        echo ok;;
+*)     echo bad;;
+esac
+
+somevar=
+echo "${somevar:-~}"
+echo "${somevar:-"~"}"
+
+echo make -k FOO=~/mumble
+
+typeset FOO=~/mumble
+echo "$FOO"
+
+h=HOME=~
+echo $h
+
+export h=HOME=~
+echo $h
+
+x=1234
+HOME='/usr/$x/abc'
+
+echo ~
+
+# behavior differs here in posix mode
+set -o posix
+
+eval echo $h
+eval $h
+echo $HOME
+
+set +o posix
+
+eval echo $h
+eval $h
+echo $HOME
index 853c33b..dbd51ca 100644 (file)
@@ -1,7 +1,6 @@
 ./type.tests: line 9: type: -r: invalid option
 type: usage: type [-afptP] name [name ...]
 ./type.tests: line 12: type: notthere: not found
-./type.tests: line 13: command: notthere: not found
 function
 keyword
 builtin
@@ -25,8 +24,7 @@ func ()
 }
 while
 while is a shell keyword
-./type.tests: line 42: type: m: not found
-./type.tests: line 43: command: m: not found
+./type.tests: line 43: type: m: not found
 alias m='more'
 alias m='more'
 m is aliased to `more'
@@ -39,8 +37,8 @@ builtin
 builtin is a shell builtin
 /bin/sh
 /bin/sh is /bin/sh
-./type.tests: line 64: type: func: not found
-./type.tests: line 66: type: m: not found
+./type.tests: line 65: type: func: not found
+./type.tests: line 67: type: m: not found
 /bin/sh
 /tmp/bash
 bash is hashed (/tmp/bash)
index 7307c86..d47ae64 100644 (file)
@@ -36,7 +36,8 @@ command -V func
 command -v while
 command -V while
 
-# the following three lines should produce the same output
+# the following two lines should produce the same output
+# post-3.0 patch makes command -v silent, as posix specifies
 # first test with alias expansion off (should all fail or produce no output)
 type -t m
 type m
index c458b18..df8086d 100644 (file)
@@ -51,3 +51,6 @@ after fff3: x=4
 |0|12|
 |y|
 |y|
+a=z
+a=b
+a=z
index d6d763d..77776f9 100644 (file)
@@ -201,3 +201,6 @@ $THIS_SH ./varenv1.sub
 
 # more tests; bugs in bash up to version 2.05a
 $THIS_SH ./varenv2.sub
+
+# make sure variable scoping is done right
+tt() { typeset a=b;echo a=$a; };a=z;echo a=$a;tt;echo a=$a
diff --git a/trap.c b/trap.c
index 3641caf..1125534 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -1,7 +1,7 @@
 /* trap.c -- Not the trap command, but useful functions for manipulating
    those objects.  The trap command is in builtins/trap.def. */
 
-/* Copyright (C) 1987-2003 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -384,8 +384,8 @@ set_sigchld_trap (command_string)
 }
 #endif
 
-/* Make COMMAND_STRING be executed when SIGCHLD is caught iff the current
-   SIGCHLD trap handler is DEFAULT_SIG. */
+/* Make COMMAND_STRING be executed when SIGCHLD is caught iff SIGCHLD
+   is not already trapped. */
 void
 maybe_set_sigchld_trap (command_string)
      char *command_string;
@@ -807,6 +807,11 @@ run_return_trap ()
 {
   int old_exit_value;
 
+#if 0
+  if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && (sigmodes[DEBUG_TRAP] & SIG_INPROGRESS))
+    return;
+#endif
+
   if ((sigmodes[RETURN_TRAP] & SIG_TRAPPED) && ((sigmodes[RETURN_TRAP] & SIG_IGNORED) == 0) && (sigmodes[RETURN_TRAP] & SIG_INPROGRESS) == 0)
     {
       old_exit_value = last_command_exit_value;
@@ -870,9 +875,12 @@ reset_or_restore_signal_handlers (reset)
   /* Take care of the exit trap first */
   if (sigmodes[EXIT_TRAP] & SIG_TRAPPED)
     {
-      free_trap_command (EXIT_TRAP);
-      trap_list[EXIT_TRAP] = (char *)NULL;
       sigmodes[EXIT_TRAP] &= ~SIG_TRAPPED;
+      if (reset != reset_signal)
+       {
+         free_trap_command (EXIT_TRAP);
+         trap_list[EXIT_TRAP] = (char *)NULL;
+       }
     }
 
   for (i = 1; i < NSIG; i++)
@@ -903,8 +911,8 @@ reset_or_restore_signal_handlers (reset)
     sigmodes[ERROR_TRAP] &= ~SIG_TRAPPED;
 #if defined (DEBUGGER)
   if (debugging_mode == 0 || function_trace_mode == 0)
-    sigmodes[RETURN_TRAP] &= ~SIG_TRAPPED;
 #endif
+    sigmodes[RETURN_TRAP] &= ~SIG_TRAPPED;
 }
 
 /* Reset trapped signals to their original values, but don't free the
@@ -985,3 +993,10 @@ set_signal_ignored (sig)
   sigmodes[sig] |= SIG_HARD_IGNORE;
   original_signals[sig] = SIG_IGN;
 }
+
+int
+signal_in_progress (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_INPROGRESS);
+}
diff --git a/trap.h b/trap.h
index f47fd8e..d1600e0 100644 (file)
--- a/trap.h
+++ b/trap.h
@@ -93,5 +93,6 @@ extern int signal_is_trapped __P((int));
 extern int signal_is_ignored __P((int));
 extern int signal_is_special __P((int));
 extern void set_signal_ignored __P((int));
+extern int signal_in_progress __P((int));
 
 #endif /* _TRAP_H_ */
index 024c05f..62e2604 100644 (file)
@@ -1,6 +1,6 @@
 /* variables.c -- Functions for hacking shell variables. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #include "posixtime.h"
 
 #if defined (qnx)
-#  include <sys/vc.h>
-#endif
+#  if defined (qnx6)
+#    include <sy/netmgr.h>
+#  else
+#    include <sys/vc.h>
+#  endif /* !qnx6 */
+#endif /* qnx */
 
 #if defined (HAVE_UNISTD_H)
 #  include <unistd.h>
@@ -70,6 +74,8 @@
 
 #define ifsname(s)     ((s)[0] == 'I' && (s)[1] == 'F' && (s)[2] == 'S' && (s)[3] == '\0')
 
+extern char **environ;
+
 /* Variables used here and defined in other files. */
 extern int posixly_correct;
 extern int line_number;
@@ -88,6 +94,7 @@ extern char *command_execution_string;
 extern time_t shell_start_time;
 
 #if defined (READLINE)
+extern int no_line_editing;
 extern int perform_hostname_completion;
 #endif
 
@@ -135,6 +142,11 @@ char **export_env = (char **)NULL;
 static int export_env_index;
 static int export_env_size;
 
+#if defined (READLINE)
+static int winsize_assignment;         /* currently assigning to LINES or COLUMNS */
+static int winsize_assigned;           /* assigned to LINES or COLUMNS */
+#endif
+
 /* Non-zero means that we have to remake EXPORT_ENV. */
 int array_needs_making = 1;
 
@@ -199,7 +211,7 @@ static void initialize_dynamic_variables __P((void));
 static SHELL_VAR *hash_lookup __P((const char *, HASH_TABLE *));
 static SHELL_VAR *new_shell_variable __P((const char *));
 static SHELL_VAR *make_new_variable __P((const char *, HASH_TABLE *));
-static SHELL_VAR *bind_variable_internal __P((const char *, char *, HASH_TABLE *, int));
+static SHELL_VAR *bind_variable_internal __P((const char *, char *, HASH_TABLE *, int, int));
 
 static void free_variable_hash_data __P((PTR_T));
 
@@ -320,7 +332,7 @@ initialize_shell_variables (env, privmode)
 #if defined (ARRAY_VARS)
 #  if 0
       /* Array variables may not yet be exported. */
-      else if (*string == '(' && string[1] == '[' && xstrchr (string, ')'))
+      else if (*string == '(' && string[1] == '[' && string[strlen (string) - 1] == ')')
        {
          string_length = 1;
          temp_string = extract_array_assignment_list (string, &string_length);
@@ -333,7 +345,7 @@ initialize_shell_variables (env, privmode)
 #endif
       else
        {
-         temp_var = bind_variable (name, string);
+         temp_var = bind_variable (name, string, 0);
          VSETATTR (temp_var, (att_exported | att_imported));
          array_needs_making = 1;
        }
@@ -350,7 +362,11 @@ initialize_shell_variables (env, privmode)
   set_pwd ();
 
   /* Set up initial value of $_ */
-  temp_var = bind_variable ("_", dollar_vars[0]);
+#if 0
+  temp_var = bind_variable ("_", dollar_vars[0], 0);
+#else
+  temp_var = set_if_not ("_", dollar_vars[0]);
+#endif
 
   /* Remember this pid. */
   dollar_dollar_pid = getpid ();
@@ -371,8 +387,12 @@ initialize_shell_variables (env, privmode)
   /* set node id -- don't import it from the environment */
   {
     char node_name[22];
+#  if defined (qnx6)
+    netmgr_ndtostr(ND2S_LOCAL_STR, ND_LOCAL_NODE, node_name, sizeof(node_name));
+#  else
     qnx_nidtostr (getnid (), node_name, sizeof (node_name));
-    temp_var = bind_variable ("NODE", node_name);
+#  endif
+    temp_var = bind_variable ("NODE", node_name, 0);
     set_auto_export (temp_var);
   }
 #endif
@@ -392,7 +412,7 @@ initialize_shell_variables (env, privmode)
   set_if_not ("PS4", "+ ");
 
   /* Don't allow IFS to be imported from the environment. */
-  temp_var = bind_variable ("IFS", " \t\n");
+  temp_var = bind_variable ("IFS", " \t\n", 0);
   setifs (temp_var);
 
   /* Magic machine types.  Pretty convenient. */
@@ -403,7 +423,10 @@ initialize_shell_variables (env, privmode)
      names a mail file if MAILPATH is not set, and we should provide a
      default only if neither is set. */
   if (interactive_shell)
-    set_if_not ("MAILCHECK", posixly_correct ? "600" : "60");
+    {
+      temp_var = set_if_not ("MAILCHECK", posixly_correct ? "600" : "60");
+      VSETATTR (temp_var, att_integer);
+    }
 
   /* Do some things with shell level. */
   initialize_shell_level ();
@@ -411,9 +434,10 @@ initialize_shell_variables (env, privmode)
   set_ppid ();
 
   /* Initialize the `getopts' stuff. */
-  bind_variable ("OPTIND", "1");
+  temp_var = bind_variable ("OPTIND", "1", 0);
+  VSETATTR (temp_var, att_integer);
   getopts_reset (0);
-  bind_variable ("OPTERR", "1");
+  bind_variable ("OPTERR", "1", 0);
   sh_opterr = 1;
 
   if (login_shell == 1)
@@ -422,7 +446,7 @@ initialize_shell_variables (env, privmode)
   /* Get the full pathname to THIS shell, and set the BASH variable
      to it. */
   name = get_bash_name ();
-  temp_var = bind_variable ("BASH", name);
+  temp_var = bind_variable ("BASH", name, 0);
   free (name);
 
   /* Make the exported environment variable SHELL be the user's login
@@ -432,13 +456,13 @@ initialize_shell_variables (env, privmode)
   set_shell_var ();
 
   /* Make a variable called BASH_VERSION which contains the version info. */
-  bind_variable ("BASH_VERSION", shell_version_string ());
+  bind_variable ("BASH_VERSION", shell_version_string (), 0);
 #if defined (ARRAY_VARS)
   make_vers_array ();
 #endif
 
   if (command_execution_string)
-    bind_variable ("BASH_EXECUTION_STRING", command_execution_string);
+    bind_variable ("BASH_EXECUTION_STRING", command_execution_string, 0);
 
   /* Find out if we're supposed to be in Posix.2 mode via an
      environment variable. */
@@ -486,6 +510,13 @@ initialize_shell_variables (env, privmode)
     }
 #endif /* HISTORY */
 
+#if defined (READLINE) && defined (STRICT_POSIX)
+  /* POSIXLY_CORRECT will only be 1 here if the shell was compiled
+     -DSTRICT_POSIX */
+  if (interactive_shell && posixly_correct && no_line_editing == 0)
+    rl_prefer_env_winsize = 1;
+#endif /* READLINE && STRICT_POSIX */
+
      /*
       * 24 October 2001
       *
@@ -556,7 +587,7 @@ set_home_var ()
 
   temp_var = find_variable ("HOME");
   if (temp_var == 0)
-    temp_var = bind_variable ("HOME", sh_get_home_dir ());
+    temp_var = bind_variable ("HOME", sh_get_home_dir (), 0);
 #if 0
   VSETATTR (temp_var, att_exported);
 #endif
@@ -574,7 +605,7 @@ set_shell_var ()
     {
       if (current_user.shell == 0)
        get_current_user_info ();
-      temp_var = bind_variable ("SHELL", current_user.shell);
+      temp_var = bind_variable ("SHELL", current_user.shell, 0);
     }
 #if 0
   VSETATTR (temp_var, att_exported);
@@ -696,7 +727,7 @@ adjust_shell_level (change)
       new_level[3] = '\0';
     }
 
-  temp_var = bind_variable ("SHLVL", new_level);
+  temp_var = bind_variable ("SHLVL", new_level, 0);
   set_auto_export (temp_var);
 }
 
@@ -731,7 +762,7 @@ set_pwd ()
           same_file (home_string, ".", (struct stat *)NULL, (struct stat *)NULL))
     {
       set_working_directory (home_string);
-      temp_var = bind_variable ("PWD", home_string);
+      temp_var = bind_variable ("PWD", home_string, 0);
       set_auto_export (temp_var);
     }
   else
@@ -739,7 +770,7 @@ set_pwd ()
       temp_string = get_working_directory ("shell-init");
       if (temp_string)
        {
-         temp_var = bind_variable ("PWD", temp_string);
+         temp_var = bind_variable ("PWD", temp_string, 0);
          set_auto_export (temp_var);
          free (temp_string);
        }
@@ -748,7 +779,7 @@ set_pwd ()
   /* According to the Single Unix Specification, v2, $OLDPWD is an
      `environment variable' and therefore should be auto-exported.
      Make a dummy invisible variable for OLDPWD, and mark it as exported. */
-  temp_var = bind_variable ("OLDPWD", (char *)NULL);
+  temp_var = bind_variable ("OLDPWD", (char *)NULL, 0);
   VSETATTR (temp_var, (att_exported | att_invisible));
 }
 
@@ -763,7 +794,7 @@ set_ppid ()
   temp_var = find_variable ("PPID");
   if (temp_var)
     VUNSETATTR (temp_var, (att_readonly | att_exported));
-  temp_var = bind_variable ("PPID", name);
+  temp_var = bind_variable ("PPID", name, 0);
   VSETATTR (temp_var, (att_readonly | att_integer));
 }
 
@@ -777,7 +808,7 @@ uidset ()
   v = find_variable ("UID");
   if (v == 0)
     {
-      v = bind_variable ("UID", b);
+      v = bind_variable ("UID", b, 0);
       VSETATTR (v, (att_readonly | att_integer));
     }
 
@@ -787,7 +818,7 @@ uidset ()
   v = find_variable ("EUID");
   if (v == 0)
     {
-      v = bind_variable ("EUID", b);
+      v = bind_variable ("EUID", b, 0);
       VSETATTR (v, (att_readonly | att_integer));
     }
 }
@@ -829,11 +860,15 @@ sh_set_lines_and_columns (lines, cols)
 {
   char val[INT_STRLEN_BOUND(int) + 1], *v;
 
+  /* If we are currently assigning to LINES or COLUMNS, don't do anything. */
+  if (winsize_assignment)
+    return;
+
   v = inttostr (lines, val, sizeof (val));
-  bind_variable ("LINES", v);
+  bind_variable ("LINES", v, 0);
 
   v = inttostr (cols, val, sizeof (val));
-  bind_variable ("COLUMNS", v);
+  bind_variable ("COLUMNS", v, 0);
 }
 
 /* **************************************************************** */
@@ -983,7 +1018,7 @@ print_var_function (var)
 #define INIT_DYNAMIC_VAR(var, val, gfunc, afunc) \
   do \
     { \
-      v = bind_variable (var, (val)); \
+      v = bind_variable (var, (val), 0); \
       v->dynamic_value = gfunc; \
       v->assign_func = afunc; \
     } \
@@ -1102,6 +1137,7 @@ init_seconds_var ()
 /* The random number seed.  You can change this by setting RANDOM. */
 static unsigned long rseed = 1;
 static int last_random_value;
+static int seeded_subshell = 0;
 
 /* A linear congruential random number generator based on the example
    one in the ANSI C standard.  This one isn't very good, but a more
@@ -1131,6 +1167,8 @@ assign_random (self, value, unused)
      arrayind_t unused;
 {
   sbrand (strtoul (value, (char **)NULL, 10));
+  if (subshell_environment)
+    seeded_subshell = 1;
   return (self);
 }
 
@@ -1140,8 +1178,11 @@ get_random_number ()
   int rv;
 
   /* Reset for command and process substitution. */
-  if (subshell_environment)
-    sbrand (rseed + getpid() + NOW);
+  if (subshell_environment && seeded_subshell == 0)
+    {
+      sbrand (rseed + getpid() + NOW);
+      seeded_subshell = 1;
+    }
 
   do
     rv = brand ();
@@ -1228,7 +1269,14 @@ get_bash_command (var)
 {
   char *p;
 
-  p = savestring (the_printed_command_except_trap);
+  
+  if (the_printed_command_except_trap)
+    p = savestring (the_printed_command_except_trap);
+  else
+    {
+      p = (char *)xmalloc (1);
+      p[0] = '\0';
+    }
   FREE (value_cell (var));
   var_setvalue (var, p);
   return (var);
@@ -1401,10 +1449,13 @@ initialize_dynamic_variables ()
   INIT_DYNAMIC_VAR ("BASH_SUBSHELL", (char *)NULL, get_subshell, assign_subshell);
 
   INIT_DYNAMIC_VAR ("RANDOM", (char *)NULL, get_random, assign_random);
+  VSETATTR (v, att_integer);
   INIT_DYNAMIC_VAR ("LINENO", (char *)NULL, get_lineno, assign_lineno);
+  VSETATTR (v, att_integer);
 
 #if defined (HISTORY)
   INIT_DYNAMIC_VAR ("HISTCMD", (char *)NULL, get_histcmd, (sh_var_assign_func_t *)NULL);
+  VSETATTR (v, att_integer);
 #endif
 
 #if defined (READLINE)
@@ -1419,11 +1470,11 @@ initialize_dynamic_variables ()
   v = init_dynamic_array_var ("GROUPS", get_groupset, null_array_assign, att_noassign);
 
 #  if defined (DEBUGGER)
-  v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign);
-  v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign);
+  v = init_dynamic_array_var ("BASH_ARGC", get_self, null_array_assign, att_noassign|att_nounset);
+  v = init_dynamic_array_var ("BASH_ARGV", get_self, null_array_assign, att_noassign|att_nounset);
 #  endif /* DEBUGGER */
-  v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign);
-  v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign);
+  v = init_dynamic_array_var ("BASH_SOURCE", get_self, null_array_assign, att_noassign|att_nounset);
+  v = init_dynamic_array_var ("BASH_LINENO", get_self, null_array_assign, att_noassign|att_nounset);
 #endif
 
   v = init_funcname_var ();
@@ -1582,7 +1633,7 @@ set_if_not (name, value)
 
   v = find_variable (name);
   if (v == 0)
-    v = bind_variable_internal (name, value, global_variables->table, HASH_NOSRCH);
+    v = bind_variable_internal (name, value, global_variables->table, HASH_NOSRCH, 0);
   return (v);
 }
 
@@ -1636,7 +1687,7 @@ make_local_variable (name)
     }
 
   if (old_var == 0)
-    new_var = bind_variable_internal (name, "", vc->table, HASH_NOSRCH);
+    new_var = bind_variable_internal (name, "", vc->table, HASH_NOSRCH, 0);
   else
     {
       new_var = make_new_variable (name, vc->table);
@@ -1751,13 +1802,14 @@ make_new_array_variable (name)
 #endif
 
 char *
-make_variable_value (var, value)
+make_variable_value (var, value, flags)
      SHELL_VAR *var;
      char *value;
+     int flags;
 {
-  char *retval;
-  intmax_t lval;
-  int expok;
+  char *retval, *oval;
+  intmax_t lval, rval;
+  int expok, olen;
 
   /* If this variable has had its type set to integer (via `declare -i'),
      then do expression evaluation on it and store the result.  The
@@ -1766,14 +1818,34 @@ make_variable_value (var, value)
      evaluation done. */
   if (integer_p (var))
     {
-      lval = evalexp (value, &expok);
+      if (flags & ASS_APPEND)
+       {
+         oval = value_cell (var);
+         lval = evalexp (oval, &expok);        /* ksh93 seems to do this */
+         if (expok == 0)
+           jump_to_top_level (DISCARD);
+       }
+      rval = evalexp (value, &expok);
       if (expok == 0)
        jump_to_top_level (DISCARD);
-      retval = itos (lval);
+      if (flags & ASS_APPEND)
+       rval += lval;
+      retval = itos (rval);
     }
   else if (value)
     {
-      if (*value)
+      if (flags & ASS_APPEND)
+       {
+         oval = get_variable_value (var);
+         if (oval == 0)        /* paranoia */
+           oval = "";
+         olen = STRLEN (oval);
+         retval = (char *)xmalloc (olen + (value ? STRLEN (value) : 0) + 1);
+         strcpy (retval, oval);
+         if (value)
+           strcpy (retval+olen, value);
+       }
+      else if (*value)
        retval = savestring (value);
       else
        {
@@ -1790,11 +1862,11 @@ make_variable_value (var, value)
 /* Bind a variable NAME to VALUE in the HASH_TABLE TABLE, which may be the
    temporary environment (but usually is not). */
 static SHELL_VAR *
-bind_variable_internal (name, value, table, hflags)
+bind_variable_internal (name, value, table, hflags, aflags)
      const char *name;
      char *value;
      HASH_TABLE *table;
-     int hflags;
+     int hflags, aflags;
 {
   char *newval;
   SHELL_VAR *entry;
@@ -1804,12 +1876,16 @@ bind_variable_internal (name, value, table, hflags)
   if (entry == 0)
     {
       entry = make_new_variable (name, table);
-      var_setvalue (entry, make_variable_value (entry, value));
+      var_setvalue (entry, make_variable_value (entry, value, 0)); /* XXX */
     }
   else if (entry->assign_func) /* array vars have assign functions now */
     {
       INVALIDATE_EXPORTSTR (entry);
-      return ((*(entry->assign_func)) (entry, value, -1));
+      newval = (aflags & ASS_APPEND) ? make_variable_value (entry, value, aflags) : value;
+      entry = (*(entry->assign_func)) (entry, newval, -1);
+      if (newval != value)
+        free (newval);
+      return (entry);
     }
   else
     {
@@ -1823,7 +1899,7 @@ bind_variable_internal (name, value, table, hflags)
       /* Variables which are bound are visible. */
       VUNSETATTR (entry, att_invisible);
 
-      newval = make_variable_value (entry, value);
+      newval = make_variable_value (entry, value, aflags);     /* XXX */
 
       /* Invalidate any cached export string */
       INVALIDATE_EXPORTSTR (entry);
@@ -1860,9 +1936,10 @@ bind_variable_internal (name, value, table, hflags)
    first, then we bind into shell_variables. */
 
 SHELL_VAR *
-bind_variable (name, value)
+bind_variable (name, value, flags)
      const char *name;
      char *value;
+     int flags;
 {
   SHELL_VAR *v;
   VAR_CONTEXT *vc;
@@ -1889,10 +1966,10 @@ bind_variable (name, value)
         {
           v = hash_lookup (name, vc->table);
           if (v)
-           return (bind_variable_internal (name, value, vc->table, 0));
+           return (bind_variable_internal (name, value, vc->table, 0, flags));
         }
     }
-  return (bind_variable_internal (name, value, global_variables->table, 0));
+  return (bind_variable_internal (name, value, global_variables->table, 0, flags));
 }
 
 /* Make VAR, a simple shell variable, have value VALUE.  Once assigned a
@@ -1901,17 +1978,30 @@ bind_variable (name, value)
    all modified variables should be exported, mark the variable for export
    and note that the export environment needs to be recreated. */
 SHELL_VAR *
-bind_variable_value (var, value)
+bind_variable_value (var, value, aflags)
      SHELL_VAR *var;
      char *value;
+     int aflags;
 {
   char *t;
 
   VUNSETATTR (var, att_invisible);
 
-  t = make_variable_value (var, value);
-  FREE (value_cell (var));
-  var_setvalue (var, t);
+  if (var->assign_func)
+    {
+      /* If we're appending, we need the old value, so use
+        make_variable_value */
+      t = (aflags & ASS_APPEND) ? make_variable_value (var, value, aflags) : value;
+      (*(var->assign_func)) (var, t, -1);
+      if (t != value && t)
+       free (t);      
+    }
+  else
+    {
+      t = make_variable_value (var, value, aflags);
+      FREE (value_cell (var));
+      var_setvalue (var, t);
+    }
 
   INVALIDATE_EXPORTSTR (var);
 
@@ -1965,10 +2055,10 @@ bind_int_variable (lhs, rhs)
 
 #if defined (ARRAY_VARS)
   if (isarr)
-    v = assign_array_element (lhs, rhs);
+    v = assign_array_element (lhs, rhs, 0);
   else
 #endif
-    v = bind_variable (lhs, rhs);
+    v = bind_variable (lhs, rhs, 0);
 
   if (isint)
     VSETATTR (v, att_integer);
@@ -2067,12 +2157,15 @@ bind_function_def (name, value)
    responsible for moving the main temporary env to one of the other
    temporary environments.  The expansion code in subst.c calls this. */
 int
-assign_in_env (string)
-     const char *string;
+assign_in_env (word)
+     WORD_DESC *word;
 {
   int offset;
   char *name, *temp, *value;
   SHELL_VAR *var;
+  const char *string;
+
+  string = word->word;
 
   offset = assignment (string, 0);
   name = savestring (string);
@@ -2082,6 +2175,10 @@ assign_in_env (string)
     {
       name[offset] = 0;
 
+      /* ignore the `+' when assigning temporary environment */
+      if (name[offset - 1] == '+')
+       name[offset - 1] = '\0';
+
       var = find_variable (name);
       if (var && (readonly_p (var) || noassign_p (var)))
        {
@@ -2092,10 +2189,13 @@ assign_in_env (string)
        }
 
       temp = name + offset + 1;
+#if 0
       temp = (xstrchr (temp, '~') != 0) ? bash_tilde_expand (temp, 1) : savestring (temp);
-
       value = expand_string_unsplit_to_string (temp, 0);
       free (temp);
+#else
+      value = expand_assignment_string_to_string (temp, 0);
+#endif
     }
 
   if (temporary_env == 0)
@@ -2305,13 +2405,18 @@ makunbound (name, vc)
      We also need to add it back into the correct hash table. */
   if (old_var && local_p (old_var) && variable_context == old_var->context)
     {
+#if defined (ARRAY_VARS)
+      if (array_p (old_var))
+       array_dispose (array_cell (old_var));
+      else
+#endif
+       FREE (value_cell (old_var));
       /* Reset the attributes.  Preserve the export attribute if the variable
          came from a temporary environment.  Make sure it stays local, and
          make it invisible. */ 
       old_var->attributes = (exported_p (old_var) && tempvar_p (old_var)) ? att_exported : 0;
       VSETATTR (old_var, att_local);
       VSETATTR (old_var, att_invisible);
-      FREE (value_cell (old_var));
       var_setvalue (old_var, (char *)NULL);
       INVALIDATE_EXPORTSTR (old_var);
 
@@ -2389,7 +2494,7 @@ delete_all_variables (hashed_vars)
       entry = find_variable (name); \
       if (!entry) \
        { \
-         entry = bind_variable (name, ""); \
+         entry = bind_variable (name, "", 0); \
          if (!no_invisible_vars) entry->attributes |= att_invisible; \
        } \
     } \
@@ -2831,7 +2936,7 @@ push_temp_var (data)
        binding_table = shell_variables->table = hash_create (TEMPENV_HASH_BUCKETS);
     }
 
-  v = bind_variable_internal (var->name, value_cell (var), binding_table, 0);
+  v = bind_variable_internal (var->name, value_cell (var), binding_table, 0, 0);
 
   /* XXX - should we set the context here?  It shouldn't matter because of how
      assign_in_env works, but might want to check. */
@@ -3056,6 +3161,7 @@ do \
       { \
        export_env_size += 16; \
        export_env = strvec_resize (export_env, export_env_size); \
+       environ = export_env; \
       } \
     export_env[export_env_index++] = (do_alloc) ? savestring (envstr) : envstr; \
     export_env[export_env_index] = (char *)NULL; \
@@ -3165,6 +3271,7 @@ maybe_make_export_env ()
        {
          export_env_size = new_size;
          export_env = strvec_resize (export_env, export_env_size);
+         environ = export_env;
        }
       export_env[export_env_index = 0] = (char *)NULL;
 
@@ -3349,7 +3456,7 @@ push_func_var (data)
   if (tempvar_p (var) && (posixly_correct || (var->attributes & att_propagate)))
     {
       /* XXX - should we set v->context here? */
-      v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0);
+      v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0);
       if (shell_variables == global_variables)
        var->attributes &= ~(att_tempvar|att_propagate);
       else
@@ -3428,10 +3535,16 @@ push_exported_var (data)
 
   /* If a temp var had its export attribute set, or it's marked to be
      propagated, bind it in the previous scope before disposing it. */
+  /* XXX - This isn't exactly right, because all tempenv variables have the
+    export attribute set. */
+#if 0
   if (exported_p (var) || (var->attributes & att_propagate))
+#else
+  if (tempvar_p (var) && exported_p (var) && (var->attributes & att_propagate))
+#endif
     {
       var->attributes &= ~att_tempvar;         /* XXX */
-      v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0);
+      v = bind_variable_internal (var->name, value_cell (var), shell_variables->table, 0, 0);
       if (shell_variables == global_variables)
        var->attributes &= ~att_propagate;
       v->attributes |= var->attributes;
@@ -3608,7 +3721,6 @@ pop_args ()
 extern int eof_encountered, eof_encountered_limit, ignoreeof;
 
 #if defined (READLINE)
-extern int no_line_editing;
 extern int hostname_list_initialized;
 #endif
 
@@ -3626,6 +3738,13 @@ struct name_and_function {
 };
 
 static struct name_and_function special_vars[] = {
+#if defined (READLINE)
+#  if defined (STRICT_POSIX)
+  { "COLUMNS", sv_winsize },
+#  endif
+  { "COMP_WORDBREAKS", sv_comp_wordbreaks },
+#endif
+
   { "GLOBIGNORE", sv_globignore },
 
 #if defined (HISTORY)
@@ -3636,6 +3755,10 @@ static struct name_and_function special_vars[] = {
   { "HISTTIMEFORMAT", sv_histtimefmt },
 #endif
 
+#if defined (__CYGWIN__)
+  { "HOME", sv_home },
+#endif
+
 #if defined (READLINE)
   { "HOSTFILE", sv_hostfile },
 #endif
@@ -3649,6 +3772,11 @@ static struct name_and_function special_vars[] = {
   { "LC_CTYPE", sv_locale },
   { "LC_MESSAGES", sv_locale },
   { "LC_NUMERIC", sv_locale },
+  { "LC_TIME", sv_locale },
+
+#if defined (READLINE) && defined (STRICT_POSIX)
+  { "LINES", sv_winsize },
+#endif
 
   { "MAIL", sv_mail },
   { "MAILCHECK", sv_mail },
@@ -3785,6 +3913,17 @@ sv_globignore (name)
 }
 
 #if defined (READLINE)
+void
+sv_comp_wordbreaks (name)
+     char *name;
+{
+  SHELL_VAR *sv;
+
+  sv = find_variable (name);
+  if (sv == 0)
+    rl_completer_word_break_characters = (char *)NULL;
+}
+
 /* What to do just after one of the TERMxxx variables has changed.
    If we are an interactive shell, then try to reset the terminal
    information in readline. */
@@ -3808,8 +3947,52 @@ sv_hostfile (name)
   else
     hostname_list_initialized = 0;
 }
+
+#if defined (STRICT_POSIX)
+/* In strict posix mode, we allow assignments to LINES and COLUMNS (and values
+   found in the initial environment) to override the terminal size reported by
+   the kernel. */
+void
+sv_winsize (name)
+     char *name;
+{
+  SHELL_VAR *v;
+  intmax_t xd;
+  int d;
+
+  if (posixly_correct == 0 || interactive_shell == 0 || no_line_editing)
+    return;
+
+  v = find_variable (name);
+  if (v == 0 || var_isnull (v))
+    rl_reset_screen_size ();
+  else
+    {
+      if (legal_number (value_cell (v), &xd) == 0)
+       return;
+      winsize_assignment = winsize_assigned = 1;
+      d = xd;                  /* truncate */
+      if (name[0] == 'L')      /* LINES */
+       rl_set_screen_size (d, -1);
+      else                     /* COLUMNS */
+       rl_set_screen_size (-1, d);
+      winsize_assignment = 0;
+    }
+}
+#endif /* STRICT_POSIX */
 #endif /* READLINE */
 
+/* Update the value of HOME in the export environment so tilde expansion will
+   work on cygwin. */
+#if defined (__CYGWIN__)
+sv_home (name)
+     char *name;
+{
+  array_needs_making = 1;
+  maybe_make_export_env ();
+}
+#endif
+
 #if defined (HISTORY)
 /* What to do after the HISTSIZE or HISTFILESIZE variables change.
    If there is a value for this HISTSIZE (and it is numeric), then stifle
@@ -3823,6 +4006,7 @@ sv_histsize (name)
 {
   char *temp;
   intmax_t num;
+  int hmax;
 
   temp = get_string_value (name);
 
@@ -3832,7 +4016,8 @@ sv_histsize (name)
        {
          if (name[4] == 'S')
            {
-             stifle_history (num);
+             hmax = num;
+             stifle_history (hmax);
              num = where_history ();
              if (history_lines_this_session > num)
                history_lines_this_session = num;
index cd11fd9..eec26c3 100644 (file)
@@ -1,6 +1,6 @@
 /* variables.h -- data structures for shell variables. */
 
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -224,7 +224,7 @@ extern SHELL_VAR *find_variable_internal __P((const char *, int));
 extern SHELL_VAR *find_tempenv_variable __P((const char *));
 extern SHELL_VAR *copy_variable __P((SHELL_VAR *));
 extern SHELL_VAR *make_local_variable __P((const char *));
-extern SHELL_VAR *bind_variable __P((const char *, char *));
+extern SHELL_VAR *bind_variable __P((const char *, char *, int));
 extern SHELL_VAR *bind_function __P((const char *, COMMAND *));
 
 extern void bind_function_def __P((const char *, FUNCTION_DEF *));
@@ -250,13 +250,14 @@ extern char **add_or_supercede_exported_var __P((char *, int));
 extern char *get_variable_value __P((SHELL_VAR *));
 extern char *get_string_value __P((const char *));
 extern char *sh_get_env_value __P((const char *));
-extern char *make_variable_value __P((SHELL_VAR *, char *));
+extern char *make_variable_value __P((SHELL_VAR *, char *, int));
 
-extern SHELL_VAR *bind_variable_value __P((SHELL_VAR *, char *));
+extern SHELL_VAR *bind_variable_value __P((SHELL_VAR *, char *, int));
 extern SHELL_VAR *bind_int_variable __P((char *, char *));
 extern SHELL_VAR *bind_var_to_int __P((char *, intmax_t));
 
-extern int assign_in_env __P((const char *));
+extern int assign_in_env __P((WORD_DESC *));
+
 extern int unbind_variable __P((const char *));
 extern int unbind_func __P((const char *));
 extern int unbind_function_def __P((const char *));
@@ -329,6 +330,7 @@ extern int get_random_number __P((void));
 extern void sv_ifs __P((char *));
 extern void sv_path __P((char *));
 extern void sv_mail __P((char *));
+extern void sv_comp_wordbreaks __P((char *));
 extern void sv_globignore __P((char *));
 extern void sv_ignoreeof __P((char *));
 extern void sv_strict_posix __P((char *));
@@ -340,10 +342,11 @@ extern void sv_locale __P((char *));
 extern void sv_comp_wordbreaks __P((char *));
 extern void sv_terminal __P((char *));
 extern void sv_hostfile __P((char *));
+extern void sv_winsize __P((char *));
 #endif
 
-#if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
-extern void sv_tz __P((char *));
+#if defined (__CYGWIN__)
+extern void sv_home __P((char *));
 #endif
 
 #if defined (HISTORY)
@@ -356,4 +359,8 @@ extern void sv_histchars __P((char *));
 extern void sv_histtimefmt __P((char *));
 #endif /* HISTORY */
 
+#if defined (HAVE_TZSET) && defined (PROMPT_STRING_DECODE)
+extern void sv_tz __P((char *));
+#endif
+
 #endif /* !_VARIABLES_H_ */
index bad76b0..f373372 100644 (file)
--- a/version.c
+++ b/version.c
@@ -1,6 +1,6 @@
 /* version.c -- distribution and version numbers. */
 
-/* Copyright (C) 1989 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2005 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -79,5 +79,5 @@ show_shell_version (extended)
 {
   printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE);
   if (extended)
-    printf (_("Copyright (C) 2004 Free Software Foundation, Inc.\n"));
+    printf (_("Copyright (C) 2005 Free Software Foundation, Inc.\n"));
 }
diff --git a/y.tab.c b/y.tab.c
index bff19c4..367348a 100644 (file)
--- a/y.tab.c
+++ b/y.tab.c
@@ -1,5 +1,5 @@
 
-/*  A Bison parser, made from /Users/chet/src/bash/src/parse.y
+/*  A Bison parser, made from /usr/src/local/chet/src/bash/src/parse.y
     by GNU Bison version 1.28  */
 
 #define YYBISON 1  /* Identify Bison output.  */
@@ -45,7 +45,7 @@
 #define        GREATER_BAR     295
 #define        yacc_EOF        296
 
-#line 21 "/Users/chet/src/bash/src/parse.y"
+#line 21 "/usr/src/local/chet/src/bash/src/parse.y"
 
 #include "config.h"
 
@@ -78,6 +78,7 @@
 #include "parser.h"
 #include "mailcheck.h"
 #include "test.h"
+#include "builtins.h"
 #include "builtins/common.h"
 #include "builtins/builtext.h"
 
@@ -323,7 +324,7 @@ static WORD_DESC *word_desc_to_read;
 
 static REDIRECTEE redir;
 
-#line 299 "/Users/chet/src/bash/src/parse.y"
+#line 300 "/usr/src/local/chet/src/bash/src/parse.y"
 typedef union {
   WORD_DESC *word;             /* the word that we read. */
   int number;                  /* the number that we read. */
@@ -465,20 +466,20 @@ static const short yyrhs[] = {    85,
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   350,   359,   366,   381,   391,   393,   397,   402,   407,   412,
-   417,   422,   427,   433,   439,   444,   449,   454,   459,   464,
-   469,   474,   479,   484,   489,   496,   503,   508,   513,   518,
-   523,   528,   533,   538,   543,   550,   552,   554,   558,   562,
-   573,   575,   579,   581,   583,   599,   603,   605,   607,   609,
-   611,   613,   615,   617,   619,   621,   623,   627,   632,   637,
-   642,   647,   652,   657,   662,   669,   674,   679,   684,   691,
-   696,   701,   706,   711,   716,   723,   728,   733,   740,   743,
-   746,   751,   753,   784,   791,   793,   795,   800,   804,   808,
-   812,   814,   816,   820,   821,   825,   827,   829,   831,   835,
-   836,   840,   842,   851,   859,   860,   866,   867,   874,   878,
-   880,   882,   889,   891,   893,   897,   898,   901,   903,   905,
-   909,   910,   919,   925,   934,   942,   944,   946,   953,   956,
-   960,   962,   967,   972,   977,   982,  1002,  1005,  1009,  1011
+   351,   360,   367,   382,   392,   394,   398,   403,   408,   413,
+   418,   423,   428,   434,   440,   445,   450,   455,   460,   465,
+   470,   475,   480,   485,   490,   497,   504,   509,   514,   519,
+   524,   529,   534,   539,   544,   551,   553,   555,   559,   563,
+   574,   576,   580,   582,   584,   600,   604,   606,   608,   610,
+   612,   614,   616,   618,   620,   622,   624,   628,   633,   638,
+   643,   648,   653,   658,   663,   670,   675,   680,   685,   692,
+   697,   702,   707,   712,   717,   724,   729,   734,   741,   744,
+   747,   752,   754,   785,   792,   794,   796,   801,   805,   809,
+   813,   815,   817,   821,   822,   826,   828,   830,   832,   836,
+   837,   841,   843,   852,   860,   861,   867,   868,   875,   879,
+   881,   883,   890,   892,   894,   898,   899,   902,   904,   906,
+   910,   911,   920,   926,   935,   943,   945,   947,   954,   957,
+   961,   963,   969,   975,   981,   987,  1007,  1010,  1014,  1016
 };
 #endif
 
@@ -1292,7 +1293,7 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 351 "/Users/chet/src/bash/src/parse.y"
+#line 352 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          /* Case of regular command.  Discard the error
                             safety net,and return the command just parsed. */
@@ -1303,7 +1304,7 @@ case 1:
                        ;
     break;}
 case 2:
-#line 360 "/Users/chet/src/bash/src/parse.y"
+#line 361 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          /* Case of regular command, but not a very
                             interesting one.  Return a NULL command. */
@@ -1312,7 +1313,7 @@ case 2:
                        ;
     break;}
 case 3:
-#line 367 "/Users/chet/src/bash/src/parse.y"
+#line 368 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          /* Error during parsing.  Return NULL command. */
                          global_command = (COMMAND *)NULL;
@@ -1329,7 +1330,7 @@ case 3:
                        ;
     break;}
 case 4:
-#line 382 "/Users/chet/src/bash/src/parse.y"
+#line 383 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          /* Case of EOF seen by itself.  Do ignoreeof or
                             not. */
@@ -1339,57 +1340,57 @@ case 4:
                        ;
     break;}
 case 5:
-#line 392 "/Users/chet/src/bash/src/parse.y"
+#line 393 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ;
     break;}
 case 6:
-#line 394 "/Users/chet/src/bash/src/parse.y"
+#line 395 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-1].word_list); ;
     break;}
 case 7:
-#line 398 "/Users/chet/src/bash/src/parse.y"
+#line 399 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (1, r_output_direction, redir);
                        ;
     break;}
 case 8:
-#line 403 "/Users/chet/src/bash/src/parse.y"
+#line 404 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (0, r_input_direction, redir);
                        ;
     break;}
 case 9:
-#line 408 "/Users/chet/src/bash/src/parse.y"
+#line 409 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_output_direction, redir);
                        ;
     break;}
 case 10:
-#line 413 "/Users/chet/src/bash/src/parse.y"
+#line 414 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_input_direction, redir);
                        ;
     break;}
 case 11:
-#line 418 "/Users/chet/src/bash/src/parse.y"
+#line 419 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (1, r_appending_to, redir);
                        ;
     break;}
 case 12:
-#line 423 "/Users/chet/src/bash/src/parse.y"
+#line 424 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_appending_to, redir);
                        ;
     break;}
 case 13:
-#line 428 "/Users/chet/src/bash/src/parse.y"
+#line 429 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (0, r_reading_until, redir);
@@ -1397,7 +1398,7 @@ case 13:
                        ;
     break;}
 case 14:
-#line 434 "/Users/chet/src/bash/src/parse.y"
+#line 435 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_reading_until, redir);
@@ -1405,77 +1406,77 @@ case 14:
                        ;
     break;}
 case 15:
-#line 440 "/Users/chet/src/bash/src/parse.y"
+#line 441 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (0, r_reading_string, redir);
                        ;
     break;}
 case 16:
-#line 445 "/Users/chet/src/bash/src/parse.y"
+#line 446 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_reading_string, redir);
                        ;
     break;}
 case 17:
-#line 450 "/Users/chet/src/bash/src/parse.y"
+#line 451 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = yyvsp[0].number;
                          yyval.redirect = make_redirection (0, r_duplicating_input, redir);
                        ;
     break;}
 case 18:
-#line 455 "/Users/chet/src/bash/src/parse.y"
+#line 456 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = yyvsp[0].number;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input, redir);
                        ;
     break;}
 case 19:
-#line 460 "/Users/chet/src/bash/src/parse.y"
+#line 461 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = yyvsp[0].number;
                          yyval.redirect = make_redirection (1, r_duplicating_output, redir);
                        ;
     break;}
 case 20:
-#line 465 "/Users/chet/src/bash/src/parse.y"
+#line 466 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = yyvsp[0].number;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output, redir);
                        ;
     break;}
 case 21:
-#line 470 "/Users/chet/src/bash/src/parse.y"
+#line 471 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (0, r_duplicating_input_word, redir);
                        ;
     break;}
 case 22:
-#line 475 "/Users/chet/src/bash/src/parse.y"
+#line 476 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_input_word, redir);
                        ;
     break;}
 case 23:
-#line 480 "/Users/chet/src/bash/src/parse.y"
+#line 481 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (1, r_duplicating_output_word, redir);
                        ;
     break;}
 case 24:
-#line 485 "/Users/chet/src/bash/src/parse.y"
+#line 486 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_duplicating_output_word, redir);
                        ;
     break;}
 case 25:
-#line 490 "/Users/chet/src/bash/src/parse.y"
+#line 491 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection
@@ -1484,7 +1485,7 @@ case 25:
                        ;
     break;}
 case 26:
-#line 497 "/Users/chet/src/bash/src/parse.y"
+#line 498 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection
@@ -1493,88 +1494,88 @@ case 26:
                        ;
     break;}
 case 27:
-#line 504 "/Users/chet/src/bash/src/parse.y"
+#line 505 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = 0;
                          yyval.redirect = make_redirection (1, r_close_this, redir);
                        ;
     break;}
 case 28:
-#line 509 "/Users/chet/src/bash/src/parse.y"
+#line 510 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = 0;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
                        ;
     break;}
 case 29:
-#line 514 "/Users/chet/src/bash/src/parse.y"
+#line 515 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = 0;
                          yyval.redirect = make_redirection (0, r_close_this, redir);
                        ;
     break;}
 case 30:
-#line 519 "/Users/chet/src/bash/src/parse.y"
+#line 520 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.dest = 0;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_close_this, redir);
                        ;
     break;}
 case 31:
-#line 524 "/Users/chet/src/bash/src/parse.y"
+#line 525 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (1, r_err_and_out, redir);
                        ;
     break;}
 case 32:
-#line 529 "/Users/chet/src/bash/src/parse.y"
+#line 530 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_input_output, redir);
                        ;
     break;}
 case 33:
-#line 534 "/Users/chet/src/bash/src/parse.y"
+#line 535 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (0, r_input_output, redir);
                        ;
     break;}
 case 34:
-#line 539 "/Users/chet/src/bash/src/parse.y"
+#line 540 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (1, r_output_force, redir);
                        ;
     break;}
 case 35:
-#line 544 "/Users/chet/src/bash/src/parse.y"
+#line 545 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          redir.filename = yyvsp[0].word;
                          yyval.redirect = make_redirection (yyvsp[-2].number, r_output_force, redir);
                        ;
     break;}
 case 36:
-#line 551 "/Users/chet/src/bash/src/parse.y"
+#line 552 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ;
     break;}
 case 37:
-#line 553 "/Users/chet/src/bash/src/parse.y"
+#line 554 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.element.word = yyvsp[0].word; yyval.element.redirect = 0; ;
     break;}
 case 38:
-#line 555 "/Users/chet/src/bash/src/parse.y"
+#line 556 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.element.redirect = yyvsp[0].redirect; yyval.element.word = 0; ;
     break;}
 case 39:
-#line 559 "/Users/chet/src/bash/src/parse.y"
+#line 560 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.redirect = yyvsp[0].redirect;
                        ;
     break;}
 case 40:
-#line 563 "/Users/chet/src/bash/src/parse.y"
+#line 564 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          register REDIRECT *t;
 
@@ -1585,23 +1586,23 @@ case 40:
                        ;
     break;}
 case 41:
-#line 574 "/Users/chet/src/bash/src/parse.y"
+#line 575 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_simple_command (yyvsp[0].element, (COMMAND *)NULL); ;
     break;}
 case 42:
-#line 576 "/Users/chet/src/bash/src/parse.y"
+#line 577 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_simple_command (yyvsp[0].element, yyvsp[-1].command); ;
     break;}
 case 43:
-#line 580 "/Users/chet/src/bash/src/parse.y"
+#line 581 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = clean_simple_command (yyvsp[0].command); ;
     break;}
 case 44:
-#line 582 "/Users/chet/src/bash/src/parse.y"
+#line 583 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 45:
-#line 584 "/Users/chet/src/bash/src/parse.y"
+#line 585 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          COMMAND *tc;
 
@@ -1619,218 +1620,218 @@ case 45:
                        ;
     break;}
 case 46:
-#line 600 "/Users/chet/src/bash/src/parse.y"
+#line 601 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 47:
-#line 604 "/Users/chet/src/bash/src/parse.y"
+#line 605 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 48:
-#line 606 "/Users/chet/src/bash/src/parse.y"
+#line 607 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 49:
-#line 608 "/Users/chet/src/bash/src/parse.y"
+#line 609 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_while_command (yyvsp[-3].command, yyvsp[-1].command); ;
     break;}
 case 50:
-#line 610 "/Users/chet/src/bash/src/parse.y"
+#line 611 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_until_command (yyvsp[-3].command, yyvsp[-1].command); ;
     break;}
 case 51:
-#line 612 "/Users/chet/src/bash/src/parse.y"
+#line 613 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 52:
-#line 614 "/Users/chet/src/bash/src/parse.y"
+#line 615 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 53:
-#line 616 "/Users/chet/src/bash/src/parse.y"
+#line 617 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 54:
-#line 618 "/Users/chet/src/bash/src/parse.y"
+#line 619 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 55:
-#line 620 "/Users/chet/src/bash/src/parse.y"
+#line 621 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 56:
-#line 622 "/Users/chet/src/bash/src/parse.y"
+#line 623 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 57:
-#line 624 "/Users/chet/src/bash/src/parse.y"
+#line 625 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 58:
-#line 628 "/Users/chet/src/bash/src/parse.y"
+#line 629 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 59:
-#line 633 "/Users/chet/src/bash/src/parse.y"
+#line 634 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 60:
-#line 638 "/Users/chet/src/bash/src/parse.y"
+#line 639 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 61:
-#line 643 "/Users/chet/src/bash/src/parse.y"
+#line 644 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 62:
-#line 648 "/Users/chet/src/bash/src/parse.y"
+#line 649 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 63:
-#line 653 "/Users/chet/src/bash/src/parse.y"
+#line 654 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 64:
-#line 658 "/Users/chet/src/bash/src/parse.y"
+#line 659 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-7].word, (WORD_LIST *)NULL, yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 65:
-#line 663 "/Users/chet/src/bash/src/parse.y"
+#line 664 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_for_command (yyvsp[-7].word, (WORD_LIST *)NULL, yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 66:
-#line 670 "/Users/chet/src/bash/src/parse.y"
+#line 671 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                                  yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno);
                                  if (word_top > 0) word_top--;
                                ;
     break;}
 case 67:
-#line 675 "/Users/chet/src/bash/src/parse.y"
+#line 676 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                                  yyval.command = make_arith_for_command (yyvsp[-5].word_list, yyvsp[-1].command, arith_for_lineno);
                                  if (word_top > 0) word_top--;
                                ;
     break;}
 case 68:
-#line 680 "/Users/chet/src/bash/src/parse.y"
+#line 681 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                                  yyval.command = make_arith_for_command (yyvsp[-3].word_list, yyvsp[-1].command, arith_for_lineno);
                                  if (word_top > 0) word_top--;
                                ;
     break;}
 case 69:
-#line 685 "/Users/chet/src/bash/src/parse.y"
+#line 686 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                                  yyval.command = make_arith_for_command (yyvsp[-3].word_list, yyvsp[-1].command, arith_for_lineno);
                                  if (word_top > 0) word_top--;
                                ;
     break;}
 case 70:
-#line 692 "/Users/chet/src/bash/src/parse.y"
+#line 693 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 71:
-#line 697 "/Users/chet/src/bash/src/parse.y"
+#line 698 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-4].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 72:
-#line 702 "/Users/chet/src/bash/src/parse.y"
+#line 703 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 73:
-#line 707 "/Users/chet/src/bash/src/parse.y"
+#line 708 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-5].word, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 74:
-#line 712 "/Users/chet/src/bash/src/parse.y"
+#line 713 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 75:
-#line 717 "/Users/chet/src/bash/src/parse.y"
+#line 718 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_select_command (yyvsp[-8].word, REVERSE_LIST (yyvsp[-5].word_list, WORD_LIST *), yyvsp[-1].command, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 76:
-#line 724 "/Users/chet/src/bash/src/parse.y"
+#line 725 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_case_command (yyvsp[-4].word, (PATTERN_LIST *)NULL, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 77:
-#line 729 "/Users/chet/src/bash/src/parse.y"
+#line 730 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_case_command (yyvsp[-5].word, yyvsp[-2].pattern, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 78:
-#line 734 "/Users/chet/src/bash/src/parse.y"
+#line 735 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_case_command (yyvsp[-4].word, yyvsp[-1].pattern, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        ;
     break;}
 case 79:
-#line 741 "/Users/chet/src/bash/src/parse.y"
+#line 742 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ;
     break;}
 case 80:
-#line 744 "/Users/chet/src/bash/src/parse.y"
+#line 745 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_function_def (yyvsp[-4].word, yyvsp[0].command, function_dstart, function_bstart); ;
     break;}
 case 81:
-#line 747 "/Users/chet/src/bash/src/parse.y"
+#line 748 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_function_def (yyvsp[-2].word, yyvsp[0].command, function_dstart, function_bstart); ;
     break;}
 case 82:
-#line 752 "/Users/chet/src/bash/src/parse.y"
+#line 753 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 83:
-#line 754 "/Users/chet/src/bash/src/parse.y"
+#line 755 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          COMMAND *tc;
 
@@ -1861,82 +1862,82 @@ case 83:
                        ;
     break;}
 case 84:
-#line 785 "/Users/chet/src/bash/src/parse.y"
+#line 786 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = make_subshell_command (yyvsp[-1].command);
                          yyval.command->flags |= CMD_WANT_SUBSHELL;
                        ;
     break;}
 case 85:
-#line 792 "/Users/chet/src/bash/src/parse.y"
+#line 793 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, (COMMAND *)NULL); ;
     break;}
 case 86:
-#line 794 "/Users/chet/src/bash/src/parse.y"
+#line 795 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-5].command, yyvsp[-3].command, yyvsp[-1].command); ;
     break;}
 case 87:
-#line 796 "/Users/chet/src/bash/src/parse.y"
+#line 797 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[-1].command); ;
     break;}
 case 88:
-#line 801 "/Users/chet/src/bash/src/parse.y"
+#line 802 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_group_command (yyvsp[-1].command); ;
     break;}
 case 89:
-#line 805 "/Users/chet/src/bash/src/parse.y"
+#line 806 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_arith_command (yyvsp[0].word_list); ;
     break;}
 case 90:
-#line 809 "/Users/chet/src/bash/src/parse.y"
+#line 810 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[-1].command; ;
     break;}
 case 91:
-#line 813 "/Users/chet/src/bash/src/parse.y"
+#line 814 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-2].command, yyvsp[0].command, (COMMAND *)NULL); ;
     break;}
 case 92:
-#line 815 "/Users/chet/src/bash/src/parse.y"
+#line 816 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-4].command, yyvsp[-2].command, yyvsp[0].command); ;
     break;}
 case 93:
-#line 817 "/Users/chet/src/bash/src/parse.y"
+#line 818 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = make_if_command (yyvsp[-3].command, yyvsp[-1].command, yyvsp[0].command); ;
     break;}
 case 95:
-#line 822 "/Users/chet/src/bash/src/parse.y"
+#line 823 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyvsp[0].pattern->next = yyvsp[-1].pattern; yyval.pattern = yyvsp[0].pattern; ;
     break;}
 case 96:
-#line 826 "/Users/chet/src/bash/src/parse.y"
+#line 827 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ;
     break;}
 case 97:
-#line 828 "/Users/chet/src/bash/src/parse.y"
+#line 829 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ;
     break;}
 case 98:
-#line 830 "/Users/chet/src/bash/src/parse.y"
+#line 831 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, yyvsp[0].command); ;
     break;}
 case 99:
-#line 832 "/Users/chet/src/bash/src/parse.y"
+#line 833 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.pattern = make_pattern_list (yyvsp[-2].word_list, (COMMAND *)NULL); ;
     break;}
 case 101:
-#line 837 "/Users/chet/src/bash/src/parse.y"
+#line 838 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyvsp[-1].pattern->next = yyvsp[-2].pattern; yyval.pattern = yyvsp[-1].pattern; ;
     break;}
 case 102:
-#line 841 "/Users/chet/src/bash/src/parse.y"
+#line 842 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.word_list = make_word_list (yyvsp[0].word, (WORD_LIST *)NULL); ;
     break;}
 case 103:
-#line 843 "/Users/chet/src/bash/src/parse.y"
+#line 844 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.word_list = make_word_list (yyvsp[0].word, yyvsp[-2].word_list); ;
     break;}
 case 104:
-#line 852 "/Users/chet/src/bash/src/parse.y"
+#line 853 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = yyvsp[0].command;
                          if (need_here_doc)
@@ -1944,13 +1945,13 @@ case 104:
                         ;
     break;}
 case 106:
-#line 861 "/Users/chet/src/bash/src/parse.y"
+#line 862 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = yyvsp[0].command;
                        ;
     break;}
 case 108:
-#line 868 "/Users/chet/src/bash/src/parse.y"
+#line 869 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          if (yyvsp[-2].command->type == cm_connection)
                            yyval.command = connect_async_list (yyvsp[-2].command, (COMMAND *)NULL, '&');
@@ -1959,15 +1960,15 @@ case 108:
                        ;
     break;}
 case 110:
-#line 879 "/Users/chet/src/bash/src/parse.y"
+#line 880 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ;
     break;}
 case 111:
-#line 881 "/Users/chet/src/bash/src/parse.y"
+#line 882 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ;
     break;}
 case 112:
-#line 883 "/Users/chet/src/bash/src/parse.y"
+#line 884 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          if (yyvsp[-3].command->type == cm_connection)
                            yyval.command = connect_async_list (yyvsp[-3].command, yyvsp[0].command, '&');
@@ -1976,31 +1977,31 @@ case 112:
                        ;
     break;}
 case 113:
-#line 890 "/Users/chet/src/bash/src/parse.y"
+#line 891 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ;
     break;}
 case 114:
-#line 892 "/Users/chet/src/bash/src/parse.y"
+#line 893 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, ';'); ;
     break;}
 case 115:
-#line 894 "/Users/chet/src/bash/src/parse.y"
+#line 895 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 118:
-#line 902 "/Users/chet/src/bash/src/parse.y"
+#line 903 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.number = '\n'; ;
     break;}
 case 119:
-#line 904 "/Users/chet/src/bash/src/parse.y"
+#line 905 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.number = ';'; ;
     break;}
 case 120:
-#line 906 "/Users/chet/src/bash/src/parse.y"
+#line 907 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.number = yacc_EOF; ;
     break;}
 case 123:
-#line 920 "/Users/chet/src/bash/src/parse.y"
+#line 921 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = yyvsp[0].command;
                          if (need_here_doc)
@@ -2008,7 +2009,7 @@ case 123:
                        ;
     break;}
 case 124:
-#line 926 "/Users/chet/src/bash/src/parse.y"
+#line 927 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          if (yyvsp[-1].command->type == cm_connection)
                            yyval.command = connect_async_list (yyvsp[-1].command, (COMMAND *)NULL, '&');
@@ -2019,7 +2020,7 @@ case 124:
                        ;
     break;}
 case 125:
-#line 935 "/Users/chet/src/bash/src/parse.y"
+#line 936 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          yyval.command = yyvsp[-1].command;
                          if (need_here_doc)
@@ -2027,15 +2028,15 @@ case 125:
                        ;
     break;}
 case 126:
-#line 943 "/Users/chet/src/bash/src/parse.y"
+#line 944 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, AND_AND); ;
     break;}
 case 127:
-#line 945 "/Users/chet/src/bash/src/parse.y"
+#line 946 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, OR_OR); ;
     break;}
 case 128:
-#line 947 "/Users/chet/src/bash/src/parse.y"
+#line 948 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          if (yyvsp[-2].command->type == cm_connection)
                            yyval.command = connect_async_list (yyvsp[-2].command, yyvsp[0].command, '&');
@@ -2044,47 +2045,51 @@ case 128:
                        ;
     break;}
 case 129:
-#line 954 "/Users/chet/src/bash/src/parse.y"
+#line 955 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-2].command, yyvsp[0].command, ';'); ;
     break;}
 case 130:
-#line 957 "/Users/chet/src/bash/src/parse.y"
+#line 958 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 131:
-#line 961 "/Users/chet/src/bash/src/parse.y"
+#line 962 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 132:
-#line 963 "/Users/chet/src/bash/src/parse.y"
+#line 964 "/usr/src/local/chet/src/bash/src/parse.y"
 {
-                         yyvsp[0].command->flags |= CMD_INVERT_RETURN;
+                         if (yyvsp[0].command)
+                           yyvsp[0].command->flags |= CMD_INVERT_RETURN;
                          yyval.command = yyvsp[0].command;
                        ;
     break;}
 case 133:
-#line 968 "/Users/chet/src/bash/src/parse.y"
+#line 970 "/usr/src/local/chet/src/bash/src/parse.y"
 {
-                         yyvsp[0].command->flags |= yyvsp[-1].number;
+                         if (yyvsp[0].command)
+                           yyvsp[0].command->flags |= yyvsp[-1].number;
                          yyval.command = yyvsp[0].command;
                        ;
     break;}
 case 134:
-#line 973 "/Users/chet/src/bash/src/parse.y"
+#line 976 "/usr/src/local/chet/src/bash/src/parse.y"
 {
-                         yyvsp[0].command->flags |= yyvsp[-2].number|CMD_INVERT_RETURN;
+                         if (yyvsp[0].command)
+                           yyvsp[0].command->flags |= yyvsp[-2].number|CMD_INVERT_RETURN;
                          yyval.command = yyvsp[0].command;
                        ;
     break;}
 case 135:
-#line 978 "/Users/chet/src/bash/src/parse.y"
+#line 982 "/usr/src/local/chet/src/bash/src/parse.y"
 {
-                         yyvsp[0].command->flags |= yyvsp[-1].number|CMD_INVERT_RETURN;
+                         if (yyvsp[0].command)
+                           yyvsp[0].command->flags |= yyvsp[-1].number|CMD_INVERT_RETURN;
                          yyval.command = yyvsp[0].command;
                        ;
     break;}
 case 136:
-#line 983 "/Users/chet/src/bash/src/parse.y"
+#line 988 "/usr/src/local/chet/src/bash/src/parse.y"
 {
                          ELEMENT x;
 
@@ -2103,19 +2108,19 @@ case 136:
                        ;
     break;}
 case 137:
-#line 1004 "/Users/chet/src/bash/src/parse.y"
+#line 1009 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = command_connect (yyvsp[-3].command, yyvsp[0].command, '|'); ;
     break;}
 case 138:
-#line 1006 "/Users/chet/src/bash/src/parse.y"
+#line 1011 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.command = yyvsp[0].command; ;
     break;}
 case 139:
-#line 1010 "/Users/chet/src/bash/src/parse.y"
+#line 1015 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.number = CMD_TIME_PIPELINE; ;
     break;}
 case 140:
-#line 1012 "/Users/chet/src/bash/src/parse.y"
+#line 1017 "/usr/src/local/chet/src/bash/src/parse.y"
 { yyval.number = CMD_TIME_PIPELINE|CMD_TIME_POSIX; ;
     break;}
 }
@@ -2340,7 +2345,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 1014 "/Users/chet/src/bash/src/parse.y"
+#line 1019 "/usr/src/local/chet/src/bash/src/parse.y"
 
 
 /* Possible states for the parser that require it to do special things. */
@@ -2358,6 +2363,7 @@ yyerrhandle:
 #define PST_ALEXPAND   0x0800          /* OK to expand aliases - unused */
 #define PST_CMDTOKEN   0x1000          /* command token OK - unused */
 #define PST_COMPASSIGN 0x2000          /* parsing x=(...) compound assignment */
+#define PST_ASSIGNOK   0x4000          /* assignment statement ok in this context */
 
 /* Initial size to allocate for tokens, and the
    amount to grow them by. */
@@ -2669,8 +2675,13 @@ yy_stream_get ()
 
   result = EOF;
   if (bash_input.location.file)
-    result = getc_with_restart (bash_input.location.file);
-
+    {
+      if (interactive)
+       interrupt_immediately++;
+      result = getc_with_restart (bash_input.location.file);
+      if (interactive)
+       interrupt_immediately--;
+    }
   return (result);
 }
 
@@ -2983,11 +2994,11 @@ read_a_line (remove_quoted_newline)
   pass_next = 0;
   while (1)
     {
-      c = yy_getc ();
-
       /* Allow immediate exit if interrupted during input. */
       QUIT;
 
+      c = yy_getc ();
+
       /* Ignore null bytes in input. */
       if (c == 0)
        {
@@ -3192,6 +3203,12 @@ shell_getc (remove_quoted_newline)
 
   QUIT;
 
+  if (sigwinch_received)
+    {
+      sigwinch_received = 0;
+      get_new_window_size (0, (int *)0, (int *)0);
+    }
+      
   if (eol_ungetc_lookahead)
     {
       c = eol_ungetc_lookahead;
@@ -3385,14 +3402,6 @@ shell_getc (remove_quoted_newline)
   if (uc)
     shell_input_line_index++;
 
-  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
-    {
-       if (SHOULD_PROMPT ())
-         prompt_again ();
-       line_number++;
-       goto restart_read;
-    }
-
 #if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
   /* If UC is NULL, we have reached the end of the current input string.  If
      pushed_string_list is non-empty, it's time to pop to the previous string
@@ -3408,6 +3417,14 @@ shell_getc (remove_quoted_newline)
     }
 #endif /* ALIAS || DPAREN_ARITHMETIC */
 
+  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
+    {
+       if (SHOULD_PROMPT ())
+         prompt_again ();
+       line_number++;
+       goto restart_read;
+    }
+
   if (!uc && shell_input_line_terminator == EOF)
     return ((shell_input_line_index != 0) ? '\n' : EOF);
 
@@ -3469,7 +3486,7 @@ execute_prompt_command (command)
   parse_and_execute (savestring (command), "PROMPT_COMMAND", SEVAL_NONINT|SEVAL_NOHIST);
 
   restore_parser_state (&ps);
-  bind_variable ("_", last_lastarg);
+  bind_variable ("_", last_lastarg, 0);
   FREE (last_lastarg);
 
   if (token_to_read == '\n')   /* reset_parser was called */
@@ -3897,6 +3914,8 @@ read_token (command)
       parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
 
+      parser_state &= ~PST_ASSIGNOK;
+
       return (character);
     }
 
@@ -3910,6 +3929,8 @@ read_token (command)
        parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
 
+      parser_state &= ~PST_ASSIGNOK;
+
       peek_char = shell_getc (1);
       if (character == peek_char)
        {
@@ -3937,6 +3958,7 @@ read_token (command)
 #if defined (ALIAS)
              parser_state &= ~PST_ALEXPNEXT;
 #endif /* ALIAS */
+
              return (SEMI_SEMI);
 
            case '&':
@@ -4017,13 +4039,13 @@ read_token (command)
 /*
  * Match a $(...) or other grouping construct.  This has to handle embedded
  * quoted strings ('', ``, "") and nested constructs.  It also must handle
- * reprompting the user, if necessary, after reading a newline (unless the
- * P_NONL flag is passed), and returning correct error values if it reads
- * EOF.
+ * reprompting the user, if necessary, after reading a newline, and returning
+ * correct error values if it reads EOF.
  */
 #define P_FIRSTCLOSE   0x01
 #define P_ALLOWESC     0x02
 #define P_DQUOTE       0x04
+#define P_COMMAND      0x08    /* parsing a command, so look for comments */
 
 static char matched_pair_error;
 static char *
@@ -4032,13 +4054,14 @@ parse_matched_pair (qc, open, close, lenp, flags)
      int open, close;
      int *lenp, flags;
 {
-  int count, ch, was_dollar;
+  int count, ch, was_dollar, in_comment, check_comment;
   int pass_next_character, nestlen, ttranslen, start_lineno;
   char *ret, *nestret, *ttrans;
   int retind, retsize, rflags;
 
   count = 1;
-  pass_next_character = was_dollar = 0;
+  pass_next_character = was_dollar = in_comment = 0;
+  check_comment = (flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0;
 
   /* RFLAGS is the set of flags we want to pass to recursive calls. */
   rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
@@ -4049,7 +4072,11 @@ parse_matched_pair (qc, open, close, lenp, flags)
   start_lineno = line_number;
   while (count)
     {
+#if 0
       ch = shell_getc ((qc != '\'' || (flags & P_ALLOWESC)) && pass_next_character == 0);
+#else
+      ch = shell_getc (qc != '\'' && pass_next_character == 0);
+#endif
       if (ch == EOF)
        {
          free (ret);
@@ -4062,6 +4089,21 @@ parse_matched_pair (qc, open, close, lenp, flags)
       if (ch == '\n' && SHOULD_PROMPT ())
        prompt_again ();
 
+      if (in_comment)
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+
+         if (ch == '\n')
+           in_comment = 0;
+
+         continue;
+       }
+      /* Not exactly right yet */
+      else if (check_comment && in_comment == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || whitespace (ret[retind -1])))
+       in_comment = 1;
+
       if (pass_next_character)         /* last char was backslash */
        {
          pass_next_character = 0;
@@ -4129,9 +4171,18 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  /* Translate $'...' here. */
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  xfree (nestret);
-                 nestret = sh_single_quote (ttrans);
-                 free (ttrans);
-                 nestlen = strlen (nestret);
+
+                 if ((rflags & P_DQUOTE) == 0)
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else
+                   {
+                     nestret = ttrans;
+                     nestlen = ttranslen;
+                   }
                  retind -= 2;          /* back up before the $' */
                }
              else if MBTEST(was_dollar && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
@@ -4139,13 +4190,10 @@ parse_matched_pair (qc, open, close, lenp, flags)
                  /* Locale expand $"..." here. */
                  ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
                  xfree (nestret);
-                 nestret = (char *)xmalloc (ttranslen + 3);
-                 nestret[0] = '"';
-                 strcpy (nestret + 1, ttrans);
-                 nestret[ttranslen + 1] = '"';
-                 nestret[ttranslen += 2] = '\0';
+
+                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
-                 nestlen = ttranslen;
+                 nestlen = ttranslen + 2;
                  retind -= 2;          /* back up before the $" */
                }
 
@@ -4164,6 +4212,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
       else if MBTEST(open == '"' && ch == '`')
        {
          nestret = parse_matched_pair (0, '`', '`', &nestlen, rflags);
+add_nestret:
          if (nestret == &matched_pair_error)
            {
              free (ret);
@@ -4177,6 +4226,11 @@ parse_matched_pair (qc, open, close, lenp, flags)
            }
          FREE (nestret);
        }
+      else if MBTEST(qc == '`' && (ch == '"' || ch == '\'') && in_comment == 0)
+       {
+         nestret = parse_matched_pair (0, ch, ch, &nestlen, rflags);
+         goto add_nestret;
+       }
       else if MBTEST(was_dollar && (ch == '(' || ch == '{' || ch == '['))      /* ) } ] */
        /* check for $(), $[], or ${} inside quoted string. */
        {
@@ -4188,18 +4242,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
            nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|rflags);
          else if (ch == '[')           /* ] */
            nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
-         if (nestret == &matched_pair_error)
-           {
-             free (ret);
-             return &matched_pair_error;
-           }
-         if (nestlen)
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, nestlen, retsize, 64);
-             strcpy (ret + retind, nestret);
-             retind += nestlen;
-           }
-         FREE (nestret);
+
+         goto add_nestret;
        }
       was_dollar = MBTEST(ch == '$');
     }
@@ -4230,9 +4274,10 @@ parse_dparen (c)
       cmdtyp = parse_arith_cmd (&wval, 0);
       if (cmdtyp == 1)
        {
+         wd = alloc_word_desc ();
+         wd->word = wval;
          wd = make_word (wval);
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         free (wval);
          return (ARITH_FOR_EXPRS);
        }
       else
@@ -4244,21 +4289,14 @@ parse_dparen (c)
   if (reserved_word_acceptable (last_read_token))
     {
       sline = line_number;
-#if 0
-      cmdtyp = parse_arith_cmd (&wval, 1);
-#else
+
       cmdtyp = parse_arith_cmd (&wval, 0);
-#endif
       if (cmdtyp == 1) /* arithmetic command */
        {
-         wd = make_word (wval);
-#if 0
-         wd->flags = W_QUOTED;
-#else
-         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB;
-#endif
+         wd = alloc_word_desc ();
+         wd->word = wval;
+         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
-         free (wval);  /* make_word copies it */
          return (ARITH_CMD);
        }
       else if (cmdtyp == 0)    /* nested subshell */
@@ -4576,6 +4614,7 @@ token_is_assignment (t, i)
   return r;
 }
 
+/* XXX - possible changes here for `+=' */
 static int
 token_is_ident (t, i)
      char *t;
@@ -4608,6 +4647,10 @@ read_token_word (character)
   /* DOLLAR_PRESENT becomes non-zero if we see a `$'. */
   int dollar_present;
 
+  /* COMPOUND_ASSIGNMENT becomes non-zero if we are parsing a compound
+     assignment. */
+  int compound_assignment;
+
   /* QUOTED becomes non-zero if we see one of ("), ('), (`), or (\). */
   int quoted;
 
@@ -4627,7 +4670,7 @@ read_token_word (character)
 
   token_index = 0;
   all_digit_token = DIGIT (character);
-  dollar_present = quoted = pass_next_character = 0;
+  dollar_present = quoted = pass_next_character = compound_assignment = 0;
 
   for (;;)
     {
@@ -4673,7 +4716,7 @@ read_token_word (character)
       if MBTEST(shellquote (character))
        {
          push_delimiter (dstack, character);
-         ttok = parse_matched_pair (character, character, character, &ttoklen, 0);
+         ttok = parse_matched_pair (character, character, character, &ttoklen, (character == '`') ? P_COMMAND : 0);
          pop_delimiter (dstack);
          if (ttok == &matched_pair_error)
            return -1;          /* Bail immediately. */
@@ -4736,7 +4779,7 @@ read_token_word (character)
                     history literally rather than causing a possibly-
                     incorrect `;' to be added. ) */
                  push_delimiter (dstack, peek_char);
-                 ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
+                 ttok = parse_matched_pair (cd, '(', ')', &ttoklen, P_COMMAND);
                  pop_delimiter (dstack);
                }
              else
@@ -4772,27 +4815,25 @@ read_token_word (character)
                {
                  ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
                  free (ttok);
+
                  /* Insert the single quotes and correctly quote any
                     embedded single quotes (allowed because P_ALLOWESC was
                     passed to parse_matched_pair). */
                  ttok = sh_single_quote (ttrans);
                  free (ttrans);
+                 ttranslen = strlen (ttok);
                  ttrans = ttok;
-                 ttranslen = strlen (ttrans);
                }
              else
                {
-                 /* Try to locale-expand the converted string. */
+                 /* Try to locale)-expand the converted string. */
                  ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
                  free (ttok);
 
                  /* Add the double quotes back */
-                 ttok = (char *)xmalloc (ttranslen + 3);
-                 ttok[0] = '"';
-                 strcpy (ttok + 1, ttrans);
-                 ttok[ttranslen + 1] = '"';
-                 ttok[ttranslen += 2] = '\0';
+                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
+                 ttranslen += 2;
                  ttrans = ttok;
                }
 
@@ -4845,7 +4886,7 @@ read_token_word (character)
          goto next_character;
         }
       /* Identify possible compound array variable assignment. */
-      else if MBTEST(character == '=' && token_index > 0 && token_is_assignment (token, token_index))
+      else if MBTEST(character == '=' && token_index > 0 && (assignment_acceptable (last_read_token) || (parser_state & PST_ASSIGNOK)) && token_is_assignment (token, token_index))
        {
          peek_char = shell_getc (1);
          if MBTEST(peek_char == '(')           /* ) */
@@ -4866,7 +4907,12 @@ read_token_word (character)
              token[token_index++] = ')';
              FREE (ttok);
              all_digit_token = 0;
+             compound_assignment = 1;
+#if 0
              goto next_character;
+#else
+             goto got_token;           /* ksh93 seems to do this */
+#endif
            }
          else
            shell_ungetc (peek_char);
@@ -4961,6 +5007,8 @@ got_token:
     the_word->flags |= W_HASDOLLAR;
   if (quoted)
     the_word->flags |= W_QUOTED;
+  if (compound_assignment)
+    the_word->flags |= W_COMPASSIGN;
   /* A word is an assignment if it appears at the beginning of a
      simple command, or after another assignment word.  This is
      context-dependent, so it cannot be handled in the grammar. */
@@ -4972,6 +5020,14 @@ got_token:
        the_word->flags |= W_NOSPLIT;
     }
 
+  if (command_token_position (last_read_token))
+    {
+      struct builtin *b;
+      b = builtin_address_internal (token, 0);
+      if (b && (b->flags & ASSIGNMENT_BUILTIN))
+        parser_state |= PST_ASSIGNOK;
+    }
+
   yylval.word = the_word;
 
   result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT))
@@ -5129,6 +5185,8 @@ history_delimiting_chars ()
        return " ";
       return ";";
     }
+  else if (two_tokens_ago == CASE && token_before_that == WORD && (parser_state & PST_CASESTMT))
+    return " ";
 
   for (i = 0; no_semi_successors[i]; i++)
     {
@@ -5433,7 +5491,7 @@ decode_prompt_string (string)
 #define ROOT_PATH(x)   ((x)[0] == '/' && (x)[1] == 0)
 #define DOUBLE_SLASH_ROOT(x)   ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
                /* Abbreviate \W as ~ if $PWD == $HOME */
-               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, temp) == 0))
+               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
                  {
                    if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
                      {
@@ -5912,7 +5970,7 @@ parse_string_to_word_list (s, flags, whom)
          line_number = orig_line_number + line_number - 1;
          orig_current_token = current_token;
          current_token = tok;
-         yyerror ((char *)NULL);       /* does the right thing */
+         yyerror (NULL);       /* does the right thing */
          current_token = orig_current_token;
          if (wl)
            dispose_words (wl);
@@ -5987,7 +6045,7 @@ parse_compound_assignment (retlenp)
          if (tok == yacc_EOF)  /* ( */
            parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'"));
          else
-           yyerror ((char *)NULL);     /* does the right thing */
+           yyerror(NULL);      /* does the right thing */
          if (wl)
            dispose_words (wl);
          wl = &parse_string_error;
@@ -6042,7 +6100,7 @@ save_parser_state (ps)
 #endif
 
   if (ps == 0)
-    ps = xmalloc (sizeof (sh_parser_state_t));
+    ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t));
   if (ps == 0)
     return ((sh_parser_state_t *)NULL);