This document details the changes between this version, bash-4.0-release,
and the previous version, bash-4.0-rc1.
-This document details the changes between this version, bash-4.0-rc1,
-and the previous version, bash-4.0-beta2.
-
1. Changes to Bash
a. Changed the message printed when setlocale(3) fails to only include the
l. Changed behavior of shell when -e option is in effect to reflect consensus
of Posix shell standardization working group.
+m. Fixed a bug introduced in bash-4.0-alpha that caused redirections to not
+ be displayed by `type' or `declare' when appearing in functions under
+ certain circumstances.
+
2. Changes to Readline
a. Fixed a bug that caused !(...) extended glob patterns to inhibit later
a. `readarray' is now a synonym for `mapfile'.
------------------------------------------------------------------------------
+This document details the changes between this version, bash-4.0-rc1,
+and the previous version, bash-4.0-beta2.
+
1. Changes to Bash
a. Fixed a bug that caused parsing errors when a $()-style command
+++ /dev/null
-CWRU.chlog
\ No newline at end of file
--- /dev/null
+ 7/27/2004
+ ---------
+
+[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]
+
+ 12/8
+ ----
+[bash-3.1 released]
+
+ 12/9
+ ----
+doc/{bash.1,version.texi},lib/readline/doc/version.texi
+ - remove `beta1' from man page footer and texinfo documents
+
+variables.c
+ - make sure winsize_assignment is protected by #ifdef READLINE, so
+ minimal shell will compile
+
+builtins/read.def
+ - make sure error cases free memory and run any unwind-protects to
+ avoid memory leaks
+
+ 12/10
+ -----
+execute_cmd.c
+ - change execute_command_internal to set $PIPESTATUS for ((...)) and
+ [[ ... ]] commands
+
+doc/{bash.1,bashref.texi,version.texi}
+ - add documentation for ulimit -[iqx] and bump revision date
+
+ 12/12
+ -----
+parse.y
+ - make sure parse_compound_assignment saves and restores the
+ PST_ASSIGNOK parser state flag around its calls to read_token.
+ Fixes bug reported by Mike Frysinger
+
+ 12/13
+ -----
+parse.y
+ - change parse_compound_assignment to save and restore the value of
+ last_read_token. Not sure why it was set unconditionally in the
+ first place after parsing the complete compound assignment
+
+ 12/14
+ -----
+lib/readline/text.c
+ - don't use return value of rl_kill_text (which always succeeds and
+ returns the number of characters killed) in rl_delete as an indication
+ of success or failure
+ - ditto for return value of rl_delete_text
+
+lib/readline/readline.c
+ - don't return the value of the called readline function as the return
+ value from _rl_dispatch_subseq; -1 means something different to the
+ callers (return 0 all the time to indicate that a readline function
+ was found and dispatched). Fix from Andreas Schwab for <DEL><DEL>
+ bug in callback interface first reported by Mike Frysinger
+
+execute_cmd.c
+ - fixed a typo in execute_case_command
+
+ 12/15
+ -----
+aclocal.m4
+ - add check for wctype() to BASH_CHECK_MULTIBYTE, define HAVE_WCTYPE
+
+config.h.in
+ - add HAVE_WCTYPE #define
+
+config-bot.h
+ - add HAVE_WCTYPE to the set of checks for HANDLE_MULTIBYTE. This
+ should catch the deficient NetBSD multibyte support
+
+ 12/16
+ -----
+parse.y
+ - use CTLESC instead of literal '\001' when decode_prompt_string
+ prefixes RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE
+
+ 12/20
+ -----
+lib/readline/display.c
+ - don't treat RL_PROMPT_START_IGNORE specially inside a sequence of
+ ignored characters
+ - keep track of the start of the current sequence of ignored
+ characters; make sure that an empty sequence of such characters
+ really is an empty sequence, not one that happens to end with '\001'
+ (RL_PROMPT_START_IGNORE)
+
+ 12/21
+ -----
+subst.c
+ - change expand_word_internal to process rest of `tilde-word' as a
+ regular part of the word if tilde expansion leaves the tilde-word
+ unchanged. This means that ~$USER expands to ~chet, which seems
+ more intuitive, and is effectively what bash-3.0 did
+
+ 12/23
+ -----
+subst.c
+ - when making a local array variable in do_compound_assignment, make
+ sure that we don't use a variable of the same name from a previous
+ context
+
+doc/bash.1
+ - documented expansions for word and patterns in case statement
+
+builtins/ulimit.def,doc/{bashref.texi,bash.1}
+ - added new -e and -r (nice and rtprio) options to ulimit; documented
+ them
+
+ 12/26
+ -----
+variables.c
+ - use `hmax' instead of `num' in sv_histsize to avoid integer overflow
+ problems with intmax_t
+
+builtins/read.def
+ - add unwind-protect to restore rl_attempted_completion_function in
+ case of a timeout
+
+{bashline,variables}.c
+ - move initialization of HISTSIZE from initialization path to
+ load_history, so it can be overridden by a value assigned in a
+ startup file
+
+lib/readline/misc.c
+ - add a missing `return r' so that rl_digit_loop returns a meaningful
+ value
+
+lib/readline/{bind,callback,display,isearch,rltty,search,text,vi_mode}.c
+ - minor cleanups to satisfy compiler warnings, mostly removing unused
+ variables
+
+ 12/27
+ -----
+support/Makefile.in
+ - add LIBS_FOR_BUILD support; defaults to ${LIBS}
+
+Makefile.in
+ - add LIBS_FOR_BUILD with no default value; use when linking programs
+ using CC_FOR_BUILD (e.g., bashversion)
+
+ 12/28
+ -----
+lib/readline/bind.c
+ - fix rl_translate_keyseq bad translation of \M-\C-x sequences
+
+execute_cmd.c
+ - in execute_arith_command, if the expression expands to more than one
+ word, make sure we join the words into a single string and pass the
+ entire thing to evalexp()
+
+expr.c
+ - new functions: _is_arithop(c), returns true if C is a valid single-
+ character arithmetic operator; _is_multiop(c), returns true if C is
+ a token corresponding to a valid multi-character arithmetic operator
+ - if we encounter a character that isn't a valid arithmetic
+ operator, throw an error. Try to be intelligent about what type of
+ error message to print
+
+subst.c
+ - new function, expand_arith_string, calls expand_string_if_necessary;
+ used where an arithmetic expression needs to be expanded
+
+subst.h
+ - new extern declaration for expand_arith_string
+
+arrayfunc.c
+ - in array_expand_index, call expand_arith_string to expand the
+ subscript in a fashion consistent with other arithmetic expressions
+
+subst.c
+ - fix parameter_brace_patsub so that we don't try to anchor the pattern
+ at the beginning or end of the string if we're doing global
+ replacement -- that combination doesn't doesn't make sense, and
+ the changed behavior is compatible with ksh93
+
+doc/{bash.1,bashref.texi}
+ - changed description of pattern substitution to match the new
+ semantics
+
+tests/new-exp.tests
+ - change tests to remove all ${pat//#rep} and ${pat//%rep}
+ expansions, since they don't mean the same thing anymore
+
+ 12/29
+ -----
+support/signames.c
+ - new file, initialize_signames() function from old mksignames.c. This
+ file builds the signal_names array
+
+support/mksignames.c
+ - strip out initialize_signames(), move to signames.c. This file only
+ writes signames.h
+ - set up to only write a stub signames.h if CROSS_COMPILING is defined,
+ with extern declaration for initialize_signames
+ - if not cross compiling, #define initialize_signames to nothing
+
+Makefile.in
+ - mksignames is now linked from mksignames.o and buildsignames.o
+ - add rules to build signames.o, assuming we're building it as part
+ of the shell (cross-compiling)
+
+trap.c
+ - call initialize_signames from initialize_traps
+
+configure.in
+ - set SIGNAMES_O to nothing (normal) or signames.o (cross-compiling),
+ substitute into Makefile
+ - don't set SIGNAMES_H if cross-compiling any more
+
+ 12/30
+ -----
+command.h
+ - new word flag: W_NOPROCSUB, inhibits process substitution on a word
+
+subst.c
+ - change expand_word_internal to suppress process substitution if the
+ word has the W_NOPROCSUB flag
+
+shell.c
+ - --wordexp turns on W_NOPROCSUB in addition to W_NOCOMSUB
+
+subst.c
+ - change string_list_dollar_at and string_list_dollar_star so that
+ MB_CUR_MAX is used to size an array only when using gcc, since gcc
+ can handle non-constant array sizes using a mechanism like alloca.
+ Other compilers, e.g. Sun's compiler, do not implement that
+ extension
+
+ 12/31
+ -----
+builtins/mkbuiltins.c
+ - when cross-compiling, don't include <config.h>, since it's for the
+ target rather than the host system. Instead, choose a reasonable
+ set of default #defines based on a minimal POSIX system
+
+jobs.c
+ - change find_process to handle a NULL return value from find_pipeline
+ - return immediately from delete_job if jobs[index] is already NULL or
+ if it has a null pipeline associated with it
+ - in delete_job, if find_last_proc returns NULL, don't try to call
+ bgp_delete
+
+ 1/7/2006
+ --------
+doc/bash.1
+ - patch from Tim Waugh to replace some literal single quotes with
+ \(aq, the groff special character for it
+
+jobs.c
+ - in realloc_jobs_list, make sure to zero out slots after j_lastj
+ in the new list
+
+ 1/9
+ ---
+support/mksignames.c
+ - make sure to include <signal.h> to get right value of NSIG from
+ (usually) <sys/signal.h>
+
+ 1/10
+ ----
+parse.y
+ - when calling parse_matched_pair on a $(...) command substitution,
+ don't pass the P_DQUOTE flag so that single quotes don't get
+ stripped from $'...' inside the command substitution. Bug report
+ and fix from Mike Stroyan <mike.stroyan@hp.com>
+
+jobs.c
+ - start maintaining true count of living children in js.c_living
+ - call reset_current in realloc_jobs_list, since old values for current
+ and previous job are most likely incorrect
+ - don't allocate a new list in realloc_jobs_list if the old size and
+ new size are the same; just compact the existing list
+ - make sure realloc_jobs_list updates value of js.j_njobs
+ - add some more itrace messages about non-null jobs after j_lastj in
+ jobs array
+
+ 1/11
+ ----
+bashjmp.h
+ - new value for second argument to longjmp: SIGEXIT. Reserved for
+ future use
+
+ 1/12
+ ----
+jobs.c
+ - add logic to make_child to figure out when pids wrap around
+ - turn second argument to delete_job into flags word, added flag to
+ prevent adding proc to bgpids list
+
+ 1/13
+ ----
+lib/readline/vi_mode.c
+ - move code that moves forward a character out of rl_vi_append_mode
+ into a separate function, _rl_vi_append_forward
+ - change _rl_vi_append_mode to save `a' as the last command, so it
+ can be redone properly
+ - new function _rl_vi_backup, moves point back a character taking
+ multibyte locales into account
+ - change rl_vi_redo to handle redoing an `a' command specially --
+ it should be redone like `i' but after moving forward a character
+ - change rl_vi_redo to use _rl_vi_backup to move point backward
+ after redoing `i' or `a'
+
+jobs.c
+ - new function, delete_old_job (pid), checks whether or not PID is in
+ a job in the jobs list. If so, and the job is dead, it just removes
+ the job from the list. If so, and the job is not dead, it zeros
+ the pid in the appropriate PROCESS so pid aliasing doesn't occur
+ - make_child calls delete_old_job to potentially remove an already-used
+ instance of the pid just forked from the jobs list if pids have
+ wrapped around. Finally fixes the bug reported by Tim Waugh
+ <twaugh@redhat.com>
+
+trap.c
+ - new define, GETORIGSIG(sig), gets the original handling for SIG and
+ sets SIG_HARD_IGNORE if that handler is SIG_IGN
+ - call GETORIGSIG from initialize_traps, get_original_signal, and
+ set_signal
+
+jobs.c
+ - in wait_for, if the original SIGINT handler is SIG_IGN, don't set
+ the handler to wait_sigint_handler. This keeps scripts started in
+ the background (and ignoring SIGINT) from dying due to SIGINT while
+ they're waiting for a child to exit. Bug reported by Ingemar
+ Nilsson <init@kth.se>
+
+lib/readline/vi_mode.c
+ - don't save text to buffer unless undo pointer points to a record of
+ type UNDO_INSERT; zero it out instead. This fixes bug reported by
+ Craig Turner <craig@synect.com> with redoing `ctd[ESC]' (empty
+ insert after change to)
+
+shell.c
+ - change set_shell_name so invocations like "-/bin/bash" are marked as
+ login shells
+
+doc/bash.1
+ - add note about destroying functions with `unset -f' to the section
+ on shell functions
+
+lib/readline/terminal.c
+ - if readline hasn't been initialized (_rl_term_autowrap == -1, the
+ value it's now initialized with), call _rl_init_terminal_io from
+ _rl_set_screen_size before deciding whether or not to decrement
+ _rl_screenwidth. Fixes bug from Mike Frysinger <vapier@gentoo.org>
+
+ 1/14
+ ----
+lib/readline/input.c
+ - allow rl_set_keyboard_input_timeout to set the timeout to 0, for
+ applications that want to use select() like a poll without any
+ waiting
+
+lib/readline/doc/rltech.texi
+ - documented valid values for timeout in rl_set_keyboard_input_timeout
+
+jobs.c
+ - in stop_pipeline, don't have the parent shell call give_terminal_to
+ if subshell_environment contains SUBSHELL_ASYNC (no background
+ process should ever give the terminal to anything other than
+ shell_pgrp)
+ - in make_child, don't give the terminal away if subshell_environment
+ contains SUBSHELL_ASYNC
+
+ 1/15
+ ----
+subst.c
+ - in parameter_brace_expand, if extracting ${#varname}, only allow
+ `}' to end the expansion, since none of the other expansions are
+ valid. Fixes Debian bug reported by Jan Nordhorlz <jckn@gmx.net>
+
+ 1/17
+ ----
+parse.y
+ - in parse_matched_pair, protect all character tests with the MBTEST
+ macro
+ - in parse_dparen, take out extra make_word after call to alloc_word_desc
+ (mem leak)
+
+ 1/18
+ ----
+parse.y
+ - in parse_matched_pair, add P_ALLOWESC to flags passed to recursive
+ parse_matched_pair call when encountering a single or double quote
+ inside a ``-style command substitution
+
+execute_cmd.c
+ - add call to QUIT at beginning of execute_command_internal; better
+ responsiveness to SIGINT
+
+ 1/21
+ ----
+lib/readline/bind.c
+ - change rl_invoking_keyseqs_in_map to honor the setting of
+ convert-meta when listing key bindings, since if convert-meta is off,
+ using '\M-' as the prefix for bindings in, for instance,
+ emacs-escape-keymap, is wrong. This affects `bind -p' output
+ - change rl_untranslate_keyseq to add '\e' instead of '\C-[' for
+ ESC
+
+execute_cmd.c
+ - add call to QUIT at end of execute_command
+
+ 1/23
+ ----
+lib/readline/display.c
+ - changed two places in update_line where a check of whether the cursor
+ is before the last invisible character in the prompt string to
+ differentiate between the multibyte character case (where
+ _rl_last_c_pos is a physical cursor position) and the single-byte
+ case (where it is a buffer index). This prevents many unnecessary
+ \r-redraw the line sequences. Reported by Dan Jacobson.
+
+ 1/24
+ ----
+quit.h
+ - wrap QUIT macro in do...while(0) like other compound statement
+ macros
+ - CHECK_TERMSIG define (placeholder for now); future use will be to
+ handle any received signals that should cause the shell to
+ terminate (e.g., SIGHUP)
+
+{input,jobs,nojobs}.c
+ - add calls to CHECK_TERMSIG where appropriate (reading input and
+ waiting for children)
+ - include quit.h if necessary
+
+ 1/25
+ ----
+parse.y
+ - undo change that makes `)' in a compound assignment delimit a token.
+ It messes up arithmetic expressions in assignments to `let', among
+ other things
+
+sig.h,{jobs,nojobs,sig,trap}.c,builtins/trap.def
+ - rename termination_unwind_protect to termsig_sighandler
+
+sig.c
+ - split termsig_sighandler into two functions: termsig_sighandler, which
+ runs as a signal handler and sets a flag noting that a terminating
+ signal was received, and termsig_handler, which runs when it is `safe'
+ to handle the signal and exit
+ - new terminate_immediately variable, similar to interrupt_immediately
+ - termsig_sighandler calls termsig_handler immediately if
+ terminate_immediately is non-zero
+
+quit.h
+ - change CHECK_TERMSIG macro to check terminating_signal and call
+ termsig_handler if it's non-zero
+ - add same check of terminating_signal and call to termsig_handler to
+ QUIT macro
+
+{jobs,nojobs}.c
+ - change call to termsig_sighandler to call termsig_handler directly,
+ as was intended
+
+parse.y,builtins/read.def
+ - set terminate_immediately to non-zero value when reading interactive
+ input, as is done with interrupt_immediately
+
+ 1/26
+ ----
+doc/{bash.1,bashref.texi}
+ - reworded the POSIX standard references to remove mention of POSIX.2
+ or 1003.2 -- it's all the 1003.1 standard now. Recommended by
+ Arnold Robbins
+
+ 1/27
+ ----
+lib/readline/complete.c
+ - move call to filename dequoting function into
+ rl_filename_completion_function; call only if directory completion
+ hook isn't set. This means that directory-completion-hook now needs
+ to dequote the directory name. We don't want to dequote the directory
+ name before calling the directory-completion-hook. Bug reported by
+ Andrew Parker <andrewparker@bigfoot.com>
+
+bashline.c
+ - add necessary directory name dequoting to bash_directory_expansion
+ and bash_directory_completion_hook
+
+lib/readline/doc/rltech.texi
+ - add note to description of rl_directory_completion_hook that it
+ needs to dequote the directory name even if no other expansions are
+ performed
+
+ 1/28
+ ----
+braces.c
+ - make sure that we skip over braces that don't start a valid matched
+ brace expansion construct in brace_expand -- there might be a valid
+ brace expansion after the unmatched `{' later in the string
+ - brace_gobbler now checks that when looking for a `}' to end a brace
+ expansion word, there is an unquoted `,' or `..' that's not inside
+ another pair of braces. Fixes the a{b{c,d}e}f problem reported by
+ Tim Waugh
+
+builtins/declare.def
+ - when not in posix mode, and operating on shell functions, typeset
+ and declare do not require their variable operands to be valid
+ shell identifiers. The other `attribute' builtins work this way.
+ Fixes inconsistency reported by Mike Frysinger <vapier@gentoo.org>
+
+{configure,config.h}.in
+ - add test for setregid, define HAVE_SETREGID and HAVE_DECL_SETREGID
+ as appropriate
+ - add test for eaccess, define HAVE_EACCESS if found
+
+lib/sh/eaccess.c
+ - new file, with sh_stat and sh_eaccess functions, moved from test.c
+ - renamed old sh_eaccess as sh_stataccess, since it uses the stat(2)
+ information to determine file accessibility
+ - new function, sh_euidaccess, to call when uid != euid or gid != egid;
+ temporarily swaps uid/euid and gid/egid around call to access
+ - rewrote sh_eaccess to call eaccess, access, sh_euidaccess or
+ sh_stataccess as appropriate. access(2) will take into account
+ things like ACLs, read-only file systems, file flags, and so on.
+
+lib/sh/Makefile.in,Makefile.in
+ - add necessary entries for eaccess.[co]
+
+test.c
+ - change calls to test_stat to call sh_stat
+
+{test,general}.c
+ - change calls to test_eaccess to call sh_eaccess
+
+externs.h
+ - new extern declaration for sh_eaccess
+
+test.[ch]
+ - remove test_stat and test_eaccess
+
+ 1/29
+ ----
+braces.c
+ - make change from 1/28 dependant on CSH_BRACE_COMPAT not being
+ defined (since old bash behavior is what csh does, defining
+ CSH_BRACE_COMPAT will produce old bash behavior)
+
+ 1/30
+ ----
+bashline.c
+ - last argument of bash_default_completion is now a flags word:
+ DEFCOMP_CMDPOS (in command position) is only current value
+ - attempt_shell_completion now computes flags before calling
+ bash_default_completion
+ - if no_empty_command_completion is set, bash does not attempt command
+ word completion even if not at the beginning of the line, as long
+ as the word to be completed is empty and start == end (catches
+ beginning of line and all whitespace preceding point)
+
+ 2/4
+ ---
+lib/readline/display.c
+ - change _rl_make_prompt_for_search to use rl_prompt and append the
+ search character to it, so the call to expand_prompt in rl_message
+ will process the non-printing characters correctly. Bug reported
+ by Mike Stroyan <mike.stroyan@hp.com>
+
+ 2/5
+ ---
+lib/readline/display.c
+ - fix off-by-one error when comparing against PROMPT_ENDING_INDEX,
+ which caused a prompt with invisible characters to be redrawn one
+ extra time in a multibyte locale. Change from <= to < fixes
+ multibyte locale, but I added 1 to single-byte definition of
+ PROMPT_ENDING_INDEX (worth checking) to compensate. Bug reported
+ by Egmont Koblinger <egmont@uhulinux.hu>
+
+ 2/8
+ ---
+lib/readline/terminal.c
+ - call _emx_get_screensize with wr, wc like ioctl code for consistency
+ - new function, _win_get_screensize, gets screen dimensions using
+ standard Windows API for mingw32 (code from Denis Pilat)
+ - call _win_get_screensize from _rl_get_screen_size on mingw32
+
+lib/readline/rlconf.h
+ - define SYS_INPUTRC (/etc/inputrc) as system-wide default inputrc
+ filename
+
+support/shobj-conf
+ - changes to make loadable builtins work on MacOS X 10.[34]
+
+builtins/pushd.def
+ - changes to make it work as a loadable builtin compiled with gcc4
+
+ 2/9
+ ---
+lib/readline/bind.c
+ - add SYS_INPUTRC as last-ditch default (if DEFAULT_INPUTRC does not
+ exist or can't be read) in rl_read_init_file
+
+lib/readline/doc/rluser.texi
+ - add description of /etc/inputrc as ultimate default startup file
+
+ 2/10
+ ----
+lib/readline/bind.c
+ - fix problem with rl_function_of_keyseq that returns a non-keymap
+ bound to a portion of the passed key sequence without processing
+ the entire thing. We can bind maps with existing non-map
+ functions using the ANYOTHERKEY binding code.
+
+variables.c
+ - shells running in posix mode do not set $HOME, as POSIX apparently
+ requires
+
+ 2/15
+ ----
+braces.c
+ - mkseq() now takes the increment as an argument; changed callers
+
+ 2/16
+ ----
+builtins/hash.def
+ - print `hash table empty' message to stdout instead of stderr
+
+ 2/17
+ ----
+lib/readline/readline.c
+ - when resetting rl_prompt in rl_set_prompt, make sure rl_display_prompt
+ is set when the function returns
+
+ 2/18
+ ----
+lib/readline/display.c
+ - further fixes to _rl_make_prompt_for_search from Eric Blake to deal
+ with multiple calls to expand_prompt
+
+ 2/21
+ ----
+builtins/hash.def
+ - don't print `hash table empty' message in posix mode
+
+ 2/27
+ ----
+lib/glob/sm_loop.c
+ - change extmatch() to turn off FNM_PERIOD in flags passed to recursive
+ calls to gmatch() when calling it with a substring after the start
+ of the string it receives. Changed `+', `*', `?, `@', and `!' cases
+ to do the right thing. Fixes bug reported by Benoit Vila
+ <bvila@free.fr>
+
+braces.c
+ - add QUIT; statements to mkseq to make large sequence generation
+ interruptible
+
+ 2/28
+ ----
+lib/glob/glob.c
+ - initialize nalloca in glob_vector
+
+ 3/1
+ ---
+lib/glob/glob.c
+ - in glob_vector, when freeing up the linked list after some error,
+ make sure to set `tmplink' to 0 if `firstlink' is set to 0, else we
+ get multiple-free errors
+
+ 3/5
+ ---
+trap.c
+ - inheritance of the DEBUG, RETURN, and ERR traps is now dependent
+ only on the `functrace' and `errtrace' shell options, as the
+ documentation says, rather than on whether or not the shell is in
+ debugging mode. Reported by Philip Susi <psusi@cfl.rr.com>
+
+parse.y
+ - in parse_matched_pair, don't recursively parse ${...} or other
+ ${...} constructs inside ``
+ - in parse_matched_pair, remove special code that recursively parses
+ quoted strings inside `` constructs. For Bourne shell compatibility
+
+ 3/6
+ ---
+builtins/pushd.def
+ - let get_directory_stack take take an `int flags' argument and convert
+ $HOME to ~ if flags&1 is non-zero
+
+builtins/common.h
+ - change extern declaration for get_directory_stack
+
+variables.c
+ - call get_directory_stack with an arg of 0 to inhibit converting
+ $HOME to ~ in the result. Fixes cd ${DIRSTACK[1]} problem
+ reported by Len Lattanzi <llattanzi@apple.com> (cd fails because
+ the tildes won't be expanded after variable expansion)
+
+jobs.c
+ - changed hangup_all_jobs slightly so stopped jobs marked J_NOHUP
+ won't get a SIGCONT
+
+general.c
+ - changed check_binary_file() to check for a NUL byte instead of a
+ non-printable character. Might at some point want to check
+ entire (possibly multibyte) characters instead of just bytes. Hint
+ from ksh via David Korn
+
+ 3/7
+ ---
+builtins/reserved.def
+ - changed runs of spaces to tabs in variables help text to make
+ indentation better when displayed
+
+builtins/mkbuiltins.c
+ - changes to avoid the annoying extra space that keeps gettext from
+ being passed an empty string
+
+ 3/9
+ ---
+lib/glob/glob.c
+ - make sure globbing is interrupted if the shell receives a terminating
+ signal
+
+ 3/14
+ ----
+lib/readline/search.c
+ - call rl_message with format argument of "%" in _rl_nsearch_init
+ to avoid `%' characters in the prompt string from being interpreted
+ as format specifiers to vsnprintf/vsprintf
+
+ 3/19
+ ----
+parse.y, eval.c, input.h
+ - change execute_prompt_command to execute_variable_command; takes the
+ variable name as a new second argument
+
+ 3/25
+ ----
+bashline.c
+ - command_word_completion_function keeps track of when it's searching
+ $PATH and doesn't return directory names as matches in that case.
+ Problem reported by Pascal Terjan <pterjan@mandriva.com>
+ - command_word_completion_function returns what it's passed as a
+ possible match if it's the name of a directory in the current
+ directory (only non-absolute pathnames are so tested).
+
+ 3/27
+ ----
+subst.c
+ - expand_arith_string takes a new argument: quoted. Either 0 (outside
+ subst.c) or Q_DOUBLE_QUOTES (substitution functions); changed callers
+
+subst.h
+ - changed extern declaration for expand_arith_string
+
+arrayfunc.c
+ - changed call to expand_arith_string in array_expand_index
+
+ 3/31
+ ----
+lib/readline/histfile.c
+ - change read_history_range to allow windows-like \r\n line endings
+
+execute_cmd.c
+ - add new variable, line_number_for_err_trap, currently set but not
+ used
+
+ 4/2
+ ---
+lib/sh/strtrans.c
+ - add code to echo -e and echo with xpg_echo enabled to require
+ a leading 0 to specify octal constants
+
+ 4/3
+ ---
+subst.c
+ - slight change to wcsdup() replacement: use memcpy instead of wcscpy
+
+parse.y
+ - before turning on W_COMPASSIGN, make sure the final character in the
+ token is a `(' (avoids problems with things like a=(4*3)/2)
+
+ 4/4
+ ---
+lib/sh/snprintf.c
+ - in number() and lnumber(), turn off PF_ZEROPAD if explicit precision
+ supplied in format
+ - change number() and lnumber() to correctly implement zero-padding
+ specified by a non-zero `.precision' part of the format
+
+subst.c
+ - new flag for extract_delimited_string: EX_COMMAND. For $(...), so
+ we can do things like skip over delimiters in comments. Added to
+ appropriate callers
+ - changes to extract_delimited_string to skip over shell comments when
+ extracting a command for $(...) (EX_COMMAND is contained in the
+ flags argument)
+
+ 4/5
+ ---
+subst.c
+ - first argument to skip_single_quoted is now a const char *
+ - new function, chk_arithsub, checks for valid arithmetic expressions
+ by balancing parentheses. Fix based on a patch from Len Lattanzi
+
+ 4/6
+ ---
+{configure,config.h}.in
+ - add separate test for isnan in libc, instead of piggybacking on
+ isinf-in-libc test
+
+lib/sh/snprintf.c
+ - separate the isnan replacement function so it's guarded by its own
+ HAVE_ISNAN_IN_LIBC define
+
+lib/sh/wcsdup.c
+ - new file, contains replacement wcsdup library function from subst.c
+ with change back to using wcscpy
+
+Makefile.in,lib/sh/Makefile.in
+ - make sure wcsdup.c is compiled and linked in
+
+subst.c
+ - wcsdup now found in libsh; removed static definition
+
+ 4/10
+ ----
+lib/readline/callback.c
+ - loop over body of rl_callback_read_char as long as there is additional
+ input rather than just calling readline_internal_char, which does
+ not handle multi-character key sequences or escape-prefixed chars
+
+lib/readline/macro.c
+ - make sure we turn off RL_STATE_MACROINPUT when the macro stack is
+ empty if we are reading additional input with RL_STATE_MOREINPUT
+
+support/shobj-conf
+ - Mac OS X no longer likes the `-bundle' option to gcc when creating a
+ dynamic shared library
+
+ 4/11
+ ----
+lib/tilde/tilde.c
+ - don't try to dereference user_entry if HAVE_GETPWENT isn't defined
+
+lib/readline/input.c
+ - make sure chars_avail is not used without being assigned a value in
+ rl_gather_tyi
+ - use _kbhit() to check for available input on Windows consoles, in
+ rl_gather_tyi and _rl_input_available
+
+ 4/21
+ ----
+lib/readline/display.c
+ - calculate (in expand_prompt) and keep track of length of local_prompt
+ in local_prompt_len; use where appropriate
+ - when using o_pos to check whether or not we need to adjust
+ _rl_last_c_pos after calling update_line, assume that it's correct
+ (a buffer index in non-multibyte locales and a cursor position in
+ multibyte locales) and adjust with wrap_offset as appropriate
+ - in update_line, set cpos_adjusted to 1 after calling
+ _rl_move_cursor_relative to move to the end of the displayed prompt
+ string
+ - in _rl_move_cursor_relative, check that the multibyte display
+ position is after the last invisible character in the prompt string
+ before offsetting it by the number of invisible characters in the
+ prompt (woff)
+
+ 4/26
+ ----
+lib/readline/doc/{rluser.texi,readline.3}
+ - make sure to note that key bindings don't allow any whitespace
+ between the key name or sequence to be bound and the colon
+
+ 4/28
+ ----
+lib/readline/display.c
+ - in update_line, make sure we compare _rl_last_c_pos as strictly less
+ than PROMPT_ENDING_INDEX, since it's 0-based, to avoid multiple
+ prompt redraws
+
+ 5/4
+ ---
+parse.y
+ - in decode_prompt_string, only prefix the expansion of \[ or \]
+ with CTLESC if the corresponding readline escape character is
+ CTLESC (coincidentally the same as \[) or CTLNUL. Bug report sent
+ by Mike Frysinger <vapier@gentoo.org> prompted the discovery
+
+aclocal.m4
+ - slight change to test for /dev/fd to compensate for a linux
+ failing; suggested by Mike Frysinger <vapier@gentoo.org>
+
+ 5/9
+ ---
+arrayfunc.c
+ - broke assign_array_var_from_string into two functions:
+ expand_compound_array_assignment and assign_compound_array_list;
+ assign_array_var_from_string just calls those functions now
+
+arrayfunc.h
+ - new extern declarations for expand_compound_array_assignment and
+ assign_compound_array_list
+
+subst.c
+ - in do_compound_assignment, call expand_compound_array_assignment
+ before creating the local variable so a previous inherited
+ value can be used when expanding the rhs of the compound assignment
+ statement
+
+ 5/11
+ ----
+doc/{bash.1,bashref.texi}
+ - clarifed `trap' description to make it clear that trapped signals
+ that are not set to SIG_IGN are reset when a subshell is created
+
+ 5/18
+ ----
+locale.c
+ - change reset_locale_vars to call setlocale (LC_ALL, "") if LANG
+ is unset or NULL
+ - if LANG is unset or NULL, reset the export environment before
+ calling setlocale in reset_locale_vars, and trust that it will
+ change the environment setlocale() inspects
+
+ 5/21
+ ----
+lib/readline/history.c
+ - new function, HIST_ENTRY *alloc_history_entry (char *string, char *ts);
+ creates a new history entry with text STRING and timestamp TS (both
+ of which may be NULL)
+ - new function, HIST_ENTRY *copy_history_entry (HIST_ENTRY *hist),
+ which copies the line and timestamp entries to new memory but just
+ copies the data member, since that's an opaque pointer
+ - new function, void replace_history_data (int which, histdata_t *old, histdata_t *new)
+ which replaces the `data' member of specified history entries with
+ NEW, as long as it is OLD. WHICH says which history entries to
+ modify
+ - add calls to replace_history_data in rl_free_undo_list and
+ rl_do_undo
+
+lib/readline/undo.c
+ - new function, alloc_undo_entry (enum undo_code what, int start, int end, char *text)
+ takes care of allocating and populating a struct for an individual
+ undo list entry
+ - new function: _rl_copy_undo_entry(UNDO_LIST *entry)
+ - new function: _rl_copy_undo_list(UNDO_LIST *head)
+
+lib/readline/rlprivate.h
+ - new extern declarations for _rl_copy_undo_{entry,list}
+
+execute_cmd.c
+ - change execute_cond_node so that quoting the rhs of the =~
+ operator forces string matching, like the == and != operators
+
+ 5/23
+ ----
+redir.c
+ - add_undo_redirect now takes as an additional argument the type of
+ redirection we're trying to undo
+ - don't add a "preservation" redirection for fds > SHELL_FD_BASE if
+ the redirection is closing the fd
+
+ 5/24
+ ----
+subst.c
+ - make sure that parameter_brace_substring leaves this_command_name
+ set to either NULL or its previous value after setting it so that
+ arithmetic evaluation errors while expanding substring values
+ contain meaningful information
+
+ 6/9
+ ---
+execute_cmd.c
+ - make sure that SUBSHELL_ASYNC and SUBSHELL_PIPE are set as flag bits
+ in subshell_environment, rather than setting only a single value
+ - change execute_subshell_builtin_or_function to give the `return'
+ builtin a place to longjmp to when executed in a subshell or pipeline
+ (mostly as the last command in a pipeline). Bug reported by
+ Oleg Verych <olecom@gmail.com>
+ - in execute_simple_command, make sure to call execute_disk_command
+ with the_printed_command_except_trap to keep DEBUG trap command
+ strings from overwriting the command strings associated with jobs
+ and printed in job control messages. Bug reported by Daniel Kahn
+ Gillmor <dkg-debian.org@fifthhorseman.net>
+
+[bash-3.2-alpha frozen]
+
+ 6/22
+ ----
+syntax.h
+ - add new CBLANK (for [:blank:] class) flag value for syntax table and
+ shellblank(c) character test macro
+
+mksyntax.c
+ - add support for setting CBLANK flag in the syntax table depending on
+ whether or not isblank(x) returns true for character x
+
+locale.c
+ - change locale_setblanks to set or unset CBLANK flag for each
+ character when locale changes
+
+parse.y
+ - change call to whitespace(c) in lexical analyzer (read_token()) to
+ call shellblank(c) instead, so locale-specific blank characters are
+ treated as white space. Fixes bug reported by Serge van deb Boom
+ <svdb+bug-bash@stack.nl>
+
+print_cmd.c
+ - when printing redirections, add a space between <, >, and <> and the
+ following word, to avoid conflicts with process substitution. Bug
+ reported by Ittay Dror <ittyad@qlusters.com>
+
+ 6/26
+ ----
+configure.in
+ - set CROSS_COMPILE to the empty string by default, so we don't inherit
+ a random value from the environment. Bug reported by
+ Lee Revell <rlrevell@joe-job.com>
+
+ 6/29
+ ----
+lib/glob/xmbsrtowcs.c
+ - make sure destp is non-null before assigning a 0 to *destp in
+ xdupmbstowcs. Fix from Louiwa Salem <loulwas@us.ibm.com>
+
+execute_cmd.c
+ - fix execute_in_subshell to make sure asynchronous isn't set to 0
+ before subshell_environment is set appropriately and
+ setup_async_signals is run. Based on report by Louiwa Salem
+ <loulwas@us.ibm.com>
+
+lib/readline/bind.c
+ - in rl_generic_bind(), make sure that the keys array is freed before
+ an error return. Fix from Louiwa Salem <loulwas@us.ibm.com>
+
+ 7/1
+ ---
+builtins/read.def
+ - make sure all editing code is protected with #ifdef READLINE, esp.
+ unwind-protect that restores the default completion function
+
+lib/readline/display.c
+ - make sure to set local_prompt_len in rl_message() [in bash-3.2-alpha]
+
+ 7/5
+ ---
+builtins/printf.def
+ - add more of echo's write error handling to printf. Suggested by
+ martin.wilck@fujitsu-siemens.com
+
+ 7/7
+ ---
+lib/readline/display.c
+ - save and restore local_prompt_len in rl_{save,restore}_prompt
+ [in bash-3.2-alpha]
+
+ 7/8
+ ---
+[bash-3.2-alpha released]
+
+ 7/9
+ ---
+lib/readline/display.c
+ - make sure that _rl_move_cursor_relative sets cpos_adjusted when it
+ offsets `dpos' by wrap_offset in a multi-byte locale. Bug reported
+ by Andreas Schwab and Egmont Koblinger
+
+subst.c
+ - make sure that the call to mbstowcs in string_extract_verbatim is
+ passed a string with enough space for the closing NUL. Reported
+ by Andreas Schwab
+
+ 7/18
+ ----
+lib/readline/{display,terminal}.c
+ - remove #ifdefs for HACK_TERMCAP_MOTION so we can use
+ _rl_term_forward_char in the redisplay code unconditionally
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_term_forward_char
+
+lib/readline/display.c
+ - in _rl_move_cursor_relative, use `dpos' instead of `new' when
+ deciding whether or not a CR is faster than moving the cursor from
+ its current position
+ - in _rl_move_cursor_relative, we can use _rl_term_forward_char to
+ move the cursor forward in a multibyte locale, if it's available.
+ Since that function doesn't have a handle on where the cursor is in
+ the display buffer, it has to output a cr and print all the data.
+ Fixes rest of problem reported by Egmont Koblinger
+ - change variable denoting the position of the cursor in the line buffer
+ from c_pos (variable local to rl_redisplay) to cpos_buffer_position
+ (variable local to file) for future use by other functions
+
+ 7/25
+ ----
+lib/malloc/{stats,table}.h
+ - include <string.h> for prototypes for memset, strlen
+
+lib/termcap/{termcap,tparam}.c
+ - include <string.h> and provide macro replacement for bcopy if
+ necessary
+
+ 7/27
+ ----
+lib/readline/histexpand.c
+ - add support for `<<<' here-string redirection operator to
+ history_tokenize_word. Bug reported by agriffis@gentoo.org
+
+externs.h
+ - don't add prototype for strerror() if HAVE_STRERROR defined
+
+ 7/29
+ ----
+subst.c
+ - in list_string, use `string' instead of `s' -- s is not initialized
+
+ 8/9
+ ---
+subst.c
+ - fix parameter_brace_expand to set W_HASQUOTEDNULL in the WORD_DESC it
+ returns if the result of parameter_brace_substring is a quoted null
+ ("\177"). Fixes bug reported by Igor Peshansky <pechtcha@cs.nyu.edu>
+
+ 8/16
+ ----
+lib/readline/readline.h
+ - new #define, READERR, intended to be used to denote read/input errors
+
+lib/readline/input.c
+ - in rl_getc, if read() returns an error other than EINTR (after the
+ EWOULDBLOCK/EAGAIN cases are handled), return READERR rather than
+ converting return value to EOF if readline is reading a top-level
+ command (RL_STATE_READCMD)
+
+lib/readline/readline.c
+ - if rl_read_key returns READERR to readline_internal_char[loop],
+ abort as if it had read EOF on an empty line, without any conversion
+ to newline, which would cause a partial line to be executed. This
+ fixes the bug reported by Mathieu Bonnet <mathieu.bonnet@nalkym.org>
+
+aclocal.m4
+ - when testing for validity of /dev/fd/3, use /dev/null instead of
+ standard input, since the standard input fails with linux and `su'.
+ Bug reported by Greg Shafer <gschafer@zip.com.au>
+
+ 8/17
+ ----
+Makefile.in
+ - switch the TAGS and tags targets so TAGS is the output of `etags' and
+ tags is the output of `ctags'. Suggested by Masatake YAMATO
+
+ 8/25
+ ----
+execute_cmd.c
+ - change code to match documentation: set BASH_COMMAND (which takes its
+ value from the_printed_command_except_trap) only when not running a
+ trap. Rocky says the debugger is ok with this, and this is what his
+ original diffs did
+
+ 8/29
+ ----
+variables.c
+ - change set_if_not to create shell_variables if it is NULL, since
+ -o invocation options can cause variables to be set before the
+ environment is scanned
+
+[bash-3.2-beta frozen]
+
+ 9/5
+ ---
+[bash-3.2-beta released]
+
+ 9/8
+ ---
+variables.c
+ - change dispose_used_env_vars to call maybe_make_export_env
+ immediately if we're disposing a temporary environment, since
+ `environ' points to the export environment and getenv() will use
+ that on systems that don't allow getenv() to be replaced. This
+ could cause the temporary environment to affect the shell. Bug
+ reported by Vasco Pedro <vp@di.uevora.pt>
+
+builtins/echo.def,doc/{bash.1,bashref.texi}
+ - clarify that `echo -e' and echo when the `xpg_echo' shell option is
+ enabled require the \0 to precede any octal constant to be expanded.
+ Reported by Vasco Pedro <vp@di.uevora.pt>
+
+ 9/12
+ ----
+builtins/printf.def
+ - make sure `%q' format specifier outputs '' for empty string arguments
+ Bug reported by Egmont Koblinger <egmont@uhulinux.hu>
+
+make_cmd.c
+ - change make_here_document to echo lines in here-doc if set -v has
+ been executed. Reported by Eduardo Ochs <eduardoochs@gmail.com>
+
+aclocal.m4
+ - change BASH_CHECK_MULTIBYTE:
+ o replace check for wctomb with check for wcrtomb
+ o add checks for wcscoll, iswctype, iswupper, iswlower,
+ towupper, towlower
+ o add call to AC_FUNC_MBRTOWC to check for mbrtowc and mbstate_t
+ define HAVE_MBSTATE_T manually
+ o add checks for wchar_t, wctype_t, wint_t
+
+config.h.in
+ - add defines for wcscoll, iswctype, iswupper, iswlower, towupper,
+ towlower functions
+ - replace define for wctomb with one for wcrtomb
+ - add defines for wchar_t, wint_t, wctype_t types
+
+config-bot.h, lib/readline/rlmbutil.h
+ - add check for HAVE_LOCALE_H before defining HANDLE_MULTIBYTE
+ - add checks for: ISWCTYPE, ISWLOWER, ISWUPPER, TOWLOWER, TOWUPPER
+ - add checks for: WCTYPE_T, WCHAR_T, WCTYPE_T
+
+ 9/13
+ ----
+lib/readline/display.c
+ - when displaying prompts longer than the screenwidth in rl_redisplay,
+ and looking for the index of the last character whose buffer index
+ is <= the screen width to set up the inv_lbreaks array, make sure to
+ catch the case where the index == the screen width (an off-by-one
+ error occurs otherwise with prompts one character longer than the
+ screen width). Bug reported by Alexey Toptygin <alexeyt@freeshell.org>
+
+configure.in
+ - change DEBUGGER_START_FILE to start with ${ac_default_prefix}/share,
+ like bashdb installs itself. Reported by Nick Brown
+ <nickbroon@blueyonder.co.uk>
+
+ 9/14
+ ----
+lib/readline/display.c
+ - make multibyte code that computes the buffer indices of line breaks
+ for a multi-line prompt dependent on MB_CUR_MAX, so we don't take
+ the function call hit unless we're in a locale that can have
+ multibyte characters
+
+ 9/19
+ ----
+subst.c
+ - make dequote_list extern so other parts of the shell can use it
+
+subst.h
+ - extern declaration for dequote_list
+
+builtins/read.def
+ - call dequote_list before assigning words read to array variable if
+ we saw an escape character. Old code left spurious CTLESCs in the
+ string after processing backslashes. Bug reported by Daniel Dawson
+ <ddawson@icehouse.net>
+
+ 9/21
+ ----
+[bash-3.2 frozen]
+
+ 10/9
+ ----
+support/shobj-coonf
+ - change -fpic to -fPIC for FreeBSD systems (needed for SPARC at least)
+
+ 10/11
+ -----
+[bash-3.2 released]
+
+ 10/12
+ -----
+parse.y
+ - change parse_matched_pair to make sure `` command substitution does
+ not check for shell comments while parsing. Bug reported against
+ bash-3.2 by Greg Schaefer <gschafer@zip.com.au>
+
+ 10/14
+ -----
+parse.y
+ - add new parser_state flag: PST_REGEXP; means we are parsing a
+ regular expression following the =~ conditional operator
+ - cond_node sets PST_REGEXP after reading the `=~' operator
+ - change read_token to call read_token_word immediately if the
+ PST_REGEXP bit is set in parser_state
+ - change read_token_word to skip over `(' and `|' if PST_REGEXP is
+ set, since those characters are legitimate regexp chars (but still
+ parse matched pairs of parens)
+
+ 10/16
+ -----
+builtins/ulimit.def
+ - add -e and -r to $SHORT_DOC usage string
+
+po/ru.po
+ - fix encoding; Russian text in the file is actually encoded in KOI8-R
+
+ 10/23
+ -----
+shell.c
+ - make sure that the call to move_to_high_fd in open_shell_script
+ passes 1 for the `check_new' parameter so open high file descriptors
+ don't get closed and reused. Bug reported by Mike Stroyan
+ <mike.stroyan@hp.com>
+
+doc/bashref.texi
+ - fixes for typos and misspellings sent in by Brian Gough
+
+ 10/24
+ -----
+support/shobj-conf
+ - make netbsd shared library creation like openbsd's until I hear
+ differently (called using `gcc -shared')
+
+ 10/26
+ -----
+subst.c
+ - fix bug in parameter_brace_patsub so if the first character of the
+ expanded pattern is a `/', it is not taken as a global replacement
+ specifier. Bug reported on forums.nekochan.net
+
+ 10/27
+ -----
+builtins/printf.def
+ - if we need an extern declaration for asprintf, make sure we include
+ stdarg.h or varargs.h, whichever is appropriate
+ - if we do not have asprintf, add an extern declaration using
+ stdarg format. This fixes the bugs with %G on IRIX reported by
+ Matthew Woehlke <mwoehlke@tibco.com> and Stuart Shelton
+ <srcshelton@gmail.com>
+
+
+lib/sh/snprintf.c
+ - add note to not call log_10 with 0 argument -- we don't want to do
+ what real log10 does (-infinity/raise divide-by-zero exception)
+ - make sure numtoa (used by dtoa) takes the precision into account
+ when computing the fractional part with an argument of `0.0'
+ - make sure `g' and `G' formats don't print radix char if there are
+ no characters to be printed after it (change to floating())
+ - change callers of log_10 (exponent, 'g' and 'G' cases in
+ vsnprintf_internal) to not call it with 0 for argument. This fixes
+ the hang reported on IRIX by Matthew Woehlke <mwoehlke@tibco.com>
+ and Stuart Shelton <mwoehlke@tibco.com>
+
+ 10/28
+ -----
+builtins/{caller,pushd}.def
+ - changed longdoc strings in loadable builtin section to be single
+ strings, as put in the build directory builtins.c file, to aid
+ translators
+
+ 11/1
+ ----
+execute_cmd.c
+ - reset subshell_environment to 0 after make_child() call in
+ execute_null_command. Fix provided by Roy Marples
+ <uberlord@gentoo.org>
+
+ 11/7
+ ----
+lib/tilde/tilde.c
+lib/readline/{util,undo,callback,input,isearch,kill}.c
+ - make sure that memory allocated with xmalloc is freed with xfree
+
+ 11/9
+ ----
+lib/readline/display.c
+ - make sure that _rl_redisplay_after_sigwinch clears the last displayed
+ line instead of the current line (instead of assuming that the
+ cursor is on the last line). Fixes bug reported by Egmont
+ Koblinger <egmont@uhulinux.hu>
+
+ 11/10
+ -----
+lib/readline/display.c
+ - make sure that _rl_col_width is never called with MB_CUR_MAX == 1,
+ since it doesn't count invisible characters and they are not
+ compensated for. Added a warning in _rl_col_width if called when
+ MB_CUR_MAX == 1. Bug reported and solution suggested by Eric
+ Blake <ebb9@byu.net>
+
+ 11/11
+ -----
+lib/readline/display.c
+ - make sure _rl_wrapped_line is initialized to inv_lbsize int chars.
+ inv_lbsize and vis_lbsize are the same at that point, but it makes
+ the intent clearer. Fix from jan.kratochvil@redhat.com.
+ - in rl_redisplay, make sure we call memset on _rl_wrapped_line with
+ its full initialized size: inv_lbsize*sizeof(int). Fix from
+ jan.kratochvil@redhat.com.
+ - wrap the invisible and visible line variables and _rl_wrapped_line
+ into line_state structures, which can be swapped more efficiently.
+ Have to watch the wrapped_line field, since there's now one for
+ each struct. Changes from jan.kratochvil@redhat.com.
+
+lib/readline/complete.c
+ - in stat_char, check for `//server' on cygwin and return `/', since
+ it will always behave as a directory. Fix from Eric Blake
+
+lib/readline/histfile.c
+ - Cygwin's mmap() works in recent versions, so don't #undef HAVE_MMAP.
+ Recommendation from Eric Blake
+
+lib/readline/rlwinsize.h
+ - make sure tcflow() is defined on SCO Unix. Fix from William Bader
+
+aclocal.m4
+ - add check for localeconv to AM_INTL_SUBDIR macro
+
+config.h.in
+ - add HAVE_LOCALECONV
+
+lib/sh/snprintf.c
+ - add check for HAVE_LOCALECONV for GETLOCALEDATA macro
+
+general.[ch]
+ - first argument to legal_number is now `const char *'
+
+ 11/14
+ -----
+lib/readline/{readline,rlprivate}.h
+ - move rl_display_prompt declaration from rlprivate.h to readline.h
+
+lib/readline/util.h
+ - new function: rl_free(void *mem), for use by users of readline dlls
+ on Windows
+
+lib/readline/readline.h
+ - new extern declaration for rl_free
+
+lib/readline/doc/rltech.texi
+ - document rl_free and rl_display_prompt for use by application writers
+
+ 11/15
+ -----
+aclocal.m4
+ - change tests for /dev/fd and /dev/stdin to use constructs of the form
+ (exec test ... ) instead of test ... to avoid bash's /dev/fd and
+ /dev/stdin emulation
+
+ 11/16
+ -----
+jobs.c
+ - in delete_job, reset_current was being called before the job slot
+ was cleared -- moved after job_slots[job] was set to NULL. Fixes
+ bug reported by Dan Jacobson <jidanni@jidanni.org>
+
+ 11/19
+ -----
+findcmd.c
+ - when the checkhash option is set, fix the check for the hashed
+ pathname being an existing executable file. Old code required a
+ hash table deletion and re-addition. Bug reported by Linda
+ Walsh <bash@tlinx.org>
+
+ 11/21
+ -----
+subst.c
+ - in pos_params, handle case of `start' == 0 by making the list of
+ positional parameters begin with $0
+ - in parameter_brace_substring, increment `len' if start == 0, sicne
+ we will be adding $0 to the beginning of the list when we process it
+
+doc/{bash.1,bashref.texi}
+ - document new behavior of `0' offset when using substring expansion
+ with the positional parameters
+
+support/shobj-conf
+ - changes to shared object creation for loadable builtins on Mac OS X
+ 10.4 to use libtool instead of ld by specifying -dynamiclib
+ argument and changing options to be appropriate for libtool. This
+ winds up creating a dynamic shared library instead of an executable
+
+ 11/24
+ -----
+{jobs,nojobs}.c
+ - don't set last_asynchronous_pid to the child's pid in the child
+ for asynchronous jobs (for compatibility -- all other posix shells
+ seem to do it this way). This means that (echo $! )& echo $! should
+ display two different pids. Fix from discussion on the
+ austin-group-l list
+
+builtins/mkbuiltins.c
+ - change builtins.c file generation so short doc strings are marked for
+ gettext and available for subsequent translation. Suggestion by
+ Benno Schulenberg <bensberg@justemail.net>
+
+builtins/{bind,cd,hash,inlib,printf,pushd,test,times,ulimit}.def
+lib/malloc/malloc.c
+{shell,subst}.c
+ - fix a few strings that were not marked as translatable. Fix from
+ Benno Schulenberg <bensberg@justemail.net>
+
+lib/readline/misc.c
+ - new function, _rl_revert_all_lines(void). Goes through history,
+ reverting all entries to their initial state by undoing any undo
+ lists.
+
+lib/readline/rlprivate.h
+ - extern declaration for _rl_revert_all_lines
+
+rldefs.h
+ - add #undef HAVE_STRCOLL if STRCOLL_BROKEN is defined, prep to move
+ from config.h.in. Problem reported by Valerly Ushakov
+ <uwe@ptc.spbu.ru>
+
+ 11/25
+ -----
+lib/readline/readline.c
+ - call _rl_revert_all_lines from readline_internal_teardown if the
+ variable _rl_revert_all_at_newline is non-zero
+ - declare _rl_revert_all_lines initially 0
+
+ 11/27
+ -----
+doc/{bash.1,bashref.texi}
+ - make sure to be explicit that `typeset +r' cannot remove the readonly
+ attribute from a variable
+
+ 11/28
+ -----
+lib/sh/zmapfd.c
+ - new file, implements zmapfd(), which takes a file and returns its
+ contents in a string
+
+externs.h
+ - extern declaration for zmapfd
+
+ 11/29
+ -----
+builtins/evalfile.c
+ - in _evalfile, use zmapfd to read the contents of the file into a
+ string, rather than using the size reported by stat and reading that
+ many characters, if the file is not a regular file (for things like
+ named pipes, stat reports the size as 0)
+
+ 12/3
+ ----
+lib/sh/snprintf.c
+ - make sure number() sets the FL_UNSIGNED flag for %x and %X, so
+ fmtulong treats them as unsigned numbers. Fixes bug reported by
+ James Botte <James.M.Botte@lowes.com>
+
+ 12/13
+ -----
+lib/readline/util.c
+ - new function, _rl_ttymsg, for internal warning messages -- does
+ redisplay after printing message
+ - new function, _rl_errmsg, for internal warning/error messages --
+ does not do redisplay after printing message
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_ttymsg, _rl_errmsg
+
+lib/readline/{bind,callback,complete,display,rltty}.c
+ - use _rl_ttymsg/_rl_errmsg instead of direct writes to stderr
+
+lib/sh/tmpfile.c
+ - in get_tmpdir(), make sure that $TMPDIR names a writable directory;
+ otherwise skip it. This catches names longer than PATH_MAX, but in
+ case it doesn't test that the length does not exceed PATH_MAX. Fixes
+ heap overrun bug reported by Eric Blake <ebb9@byu.net>
+
+ 12/16
+ -----
+builtin/{set,declare,shopt,trap,wait,bind,complete,enable,fc,history,read,setattr}.def
+doc/{bash.1,bashref.texi}
+ - improvements and clarifications to the help text associated with
+ several builtins, in some cases bringing them into line with the
+ man page text. From Benno Schulenberg <bensberg@justemail.net>
+
+doc/{bash.1,bashref.texi}
+ - add `E' and `T' to the synopsis of the set builtin.
+ From Benno Schulenberg <bensberg@justemail.net>
+
+builtins/{break,exit,fg_bg,hash,jobs,type,ulimit}.def
+builtins/{common,evalfile}.c
+{error,expr,jobs,mksyntax,nojobs,shell,subst,version,siglist}.c
+ - add gettextizing marks to untranslated strings
+ From Benno Schulenberg <bensberg@justemail.net>
+
+ 12/19
+ -----
+builtins/common.c
+ - change display_signal_list (used by `trap -l' and `kill -l') to use
+ five columns instead of 4 to display signal names
+
+builtins/help.def
+ - use the true terminal width instead of assuming 80 when displaying
+ help topics, leaving two characters of whitespace between horizontal
+ descriptions instead of 1
+ - change to print in columns with entries sorted down rather than across
+ (that is, like `ls' rather than `ls -x'). Change inspired by Benno
+ Schulenberg <bensberg@justemail.net>
+
+jobs.h
+ - give values to the JOB_STATE enumerations so they can be used as
+ bitmasks, too
+
+ 12/22
+ -----
+doc/{bash.1,bashref.texi}
+ - change description of `set' to make it clearer that you can use
+ `+' to turn off options
+ - clarify in the description of word splitting that sequences of
+ IFS whitespace at the beginning or end of the string are ignored
+
+ 12/26
+ -----
+doc/bashref.texi
+ - move `shopt' builtin to its own section; change internal references
+ from `Bash Builtins' to the new shopt builtin
+ - new section for builtins that modify shell behavior in `Shell
+ Builtin Commands'; move set and shopt to new section. Changes
+ inspired by Benno Schulenberg <bensberg@justemail.net>
+
+{redir,subst}.c
+ - add MT_USETMPDIR flag to calls to sh_mktmpfd and sh_mktmpname. Bug
+ reported by Eric Blake <ebb9@byu.net>
+
+{configure,Makefile}.in
+ - changes so that the pathname for DEBUGGER_START_FILE is substituted
+ into pathnames.h at make time (allowing more flexibility in setting
+ `prefix' or `datadir') instead of at configure time. Suggested by
+ Nick Brown <nickbroon@blueyonder.co.uk>
+
+shell.c
+ - declaration for have_devfd; initialized from HAVE_DEV_FD
+ - declaration for check_jobs_at_exit; initialized to 0
+ - declaration for autocd; initialized to 0
+
+variables.c
+ - new dynamic variable, BASHPID, always set from return value from
+ getpid() (changes even when $$ doesn't change). Idea from Bruce
+ Korb <bruce.corb@3pardata.com>
+
+builtins/exit.def
+ - if check_jobs_at_exit is non-zero, list jobs if there are any stopped
+ or running background jobs; don't exit shell if any running jobs
+
+execute_cmd.c
+ - in execute_simple_command, if the first word of a simple command is
+ a directory name (after looking for builtins, so `.' isn't caught)
+ that isn't found in $PATH, and `autocd' is non-zero, prefix a "cd"
+ to the command words
+
+builtins/shopt.def
+ - new `checkjobs' option, changes value of check_jobs_at_exit
+ - new `autocd' option, changes value of autocd
+
+pcomplete.c
+ - add COMP_TYPE, set to rl_completion_type, to list of variables set
+ by bind_compfunc_variables and unset by unbind_compfunc_variables
+
+doc/{bash.1,bashref.texi}
+ - document BASHPID
+ - document new shopt `checkjobs' option
+ - document new shopt `autocd' option
+ - document COMP_TYPE completion variable
+
+ 12/29
+ -----
+aclocal.m4
+ - in BASH_SYS_SIGLIST, check HAVE_DECL_SYS_SIGLIST instead of the
+ obsolete and no-longer-supported SYS_SIGLIST_DECLARED
+
+ 12/30
+ -----
+lib/readline/vi_mode.c
+ - add ` (backquote) to the list of vi motion characters
+ - in rl_vi_delete_to, rl_vi_change_to, and rl_vi_yank_to, don't delete
+ character under the cursor if the motion command moves the cursor
+ backward, so add F and T to the commands that don't cause the
+ mark to be adjusted
+ - add ` to the characters that don't cause the mark to be adjusted
+ when used as a motion command, since it's defined to behave that way
+ - when a motion character that may adjust the mark moves point
+ backward, don't adjust the mark so the character under the cursor
+ isn't deleted
+
+lib/readline/complete.c
+ - add variable rl_sort_completion_matches; allows application to
+ inhibit match list sorting
+ - add variable rl_completion_invoking_key; allows applications to
+ discover the key that invoked rl_complete or rl_menu_complete
+
+lib/readline/readline.h
+ - extern declarations for rl_completion_invoking_key and
+ rl_sort_completion_matches
+
+lib/readline/doc/rltech.texi
+ - documented rl_completion_invoking_key and rl_sort_completion_matches
+
+pcomplete.c
+ - export variable COMP_KEY to completion functions; initialized from
+ rl_completion_invoking_key; unset along with rest of completion
+ variables
+
+doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi
+ - document COMP_KEY
+
+[many files]
+ - changes to make variables and function parameters `const' for better
+ text sharing. Changes originally from Andreas Mohr
+ <andi@rhlx01.fht-esslingen.de>
+
+ 1/4/2007
+ --------
+lib/intl/Makefile.in
+ - use cmp before copying libgnuintl.h to libintl.h -- maybe save a few
+ rebuilds
+
+lib/builtins/Makefile
+ - fixes to build LIBINTL_H if necessary, dependency on this for
+ mkbuiltins.o prevented `make -j 6' from working correctly
+
+ 1/8
+ ---
+subst.c
+ - new function, fifos_pending(), returns the count of FIFOs in
+ fifo_list (process substitution)
+
+subst.h
+ - extern declaration for fifos_pending()
+
+execute_cmd.c
+ - in execute_simple_command, if CMD_NO_FORK is set before we call
+ execute_disk_command, make sure there are no FIFOs in the expanded
+ words (from process substitution) and turn off CMD_NO_FORK if there
+ are, so they can get unlinked when the command finishes
+
+ 1/10
+ ----
+subst.c
+ - read_comsub now takes a flags parameter and returns appropriate W_*
+ flags in it
+ - command_substitute now returns a WORD_DESC *, with the string it used
+ to return as the `word' and `flags' filled in appropriately
+
+subst.h
+ - changed extern declaration for command_substitute
+
+{pcomplete,subst}.c
+ - changed callers of command_substitute appropriately
+
+subst.c
+ - string_extract_verbatim now takes an additional int flags argument;
+ changed callers
+
+ 1/11
+ ----
+support/texi2html
+ - fix problem that caused index links to not be generated if the first
+ index node had a name different than the node name
+
+doc/bashref.texi
+ - encapsulated all indexes into a single `Indexes' appendix; works
+ around bug fixed in texi2html
+
+ 1/12
+ ----
+subst.c
+ - add call to sv_histtimefmt in initialize_variables so HISTTIMEFORMAT
+ from the environment is honored. Fix from Ark Submedes (heh)
+ <archimerged@gmail.com>
+
+lib/readline/histfile.c
+ - make sure that the first character following the history comment
+ character at the beginning of a line is a digit before interpreting
+ it as a timestamp for the previous line
+
+doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi
+ - added detail to make it clear exactly how history timestamps are
+ saved to and read from the history file
+
+subst.c
+ - change quote_escapes to add CTLESC before spaces if IFS is null,
+ just in case we have to split on literal spaces later on (e.g., in
+ case of unquoted $@). Corresponding changes to dequote_escapes.
+ Fixes a couple of problems reported by Brett Stahlman
+ <brettstahlman@comcast.net>
+
+ 1/14
+ ----
+subst.c
+ - make same change to read_comsub to add CTLESC before ' ' if $IFS is
+ null, since we will split on literal spaces later
+
+ 1/15
+ ----
+array.c
+ - new function, array_quote_escapes (ARRAY *a), calls quote_escapes
+ on each element of the array in the same way array_quote calls
+ quote_string
+ - call array_quote_escapes if match is not quoted in array_patsub
+ - array_slice is now used, so remove the #ifdef INCLUDE_UNUSED define
+ - change structure of array_subrange to call array_slice to create a
+ new array with the desired subset of elements, then call array_quote
+ or array_quote_escapes as necessary, like array_patsub. Convert to
+ a string by calling array_to_string on the sliced-out array
+
+array.h
+ - new extern declaration for array_quote_escapes
+
+subst.c
+ - since array_patsub now calls quote_escapes as necessary, callers
+ don't need to call it after array_patsub returns. Fixes first bug
+ reported by Brett Stahlman <brettstahlman@comcast.net>
+ - since array_subrange now calls quote_escapes as necessary, callers
+ don't need to call it after array_patsub returns. Same fix as
+ for array_patsub
+
+ 1/31
+ ----
+configure.in
+ - add -DSOLARIS to LOCAL_CFLAGS for solaris x
+
+config-bot.h
+ - don't #undef HAVE_GETCWD if GETCWD_BROKEN and SOLARIS are both
+ defined. Solaris's loopback mount implementation breaks some of the
+ file system assumptions the replacement getcwd uses.
+
+builtins/common.c
+ - if GETCWD_BROKEN is defined, call getcwd with PATH_MAX for the size
+ argument, so it will allocate a buffer for the current working dir
+ with that size, instead of one that's `big enough'
+
+config.h.in
+ - add #undef PRI_MACROS_BROKEN for AIX 4.3.3
+
+pathexp.h
+ - new flag value for quote_string_for_globbing: QGLOB_REGEXP (quoting
+ an ERE for matching as a string)
+
+pathexp.c
+ - change quote_string_for_globbing to understand QGLOB_REGEXP
+
+execute_cmd.c
+ - change execute_cond_node to pass 2 (regexp match), 1 (shell pattern
+ match), or 0 (no matching) to cond_expand_word
+
+subst.c
+ - change cond_expand_word to translate SPECIAL==2 into passing
+ QGLOB_REGEXP to quote_string_for_globbing
+
+locale.c
+ - by default, if all else fails, set shell's idea of locale to ""
+ instead of its idea of `default_locale' -- the library functions
+ behave better with that value
+
+ 2/2
+ ---
+builtins/printf.def
+ - if PRI_MACROS_BROKEN is defined, #undef PRIdMAX (AIX 4.3.3 broken)
+
+ 2/3
+ ---
+Makefile.in,{builtins,doc}/Makefile.in,lib/*/Makefile.in
+ - add assignment for datarootdir as per GNU coding standards
+
+Makefile.in,builtins/Makefile.in,lib/intl/Makefile.in,po/Makefile.in.in
+ - use @localedir@ instead of $(datadir)/locale in assignment
+
+ 2/13
+ ----
+jobs.c
+ - fix compact_jobs_list to not return js.j_lastj, since that is in use
+ and should not be overwritten. Fix from Len Lattanzi
+ <llattanzi@apple.com>
+
+ 2/16
+ ----
+lib/readline/text.c
+ - change rl_forward_char to allow moving to the end of the line when
+ using the arrow keys in vi insertion mode, rather than having the
+ behavior identical between vi command and insertion modes. Change
+ suggested by Hugh Sasse <hgs@dmu.ac.uk>
+
+ 2/19
+ ----
+CWRU/audit-patch
+ - patch from Steve Grubb of RedHat <sgrubb@redhat.com> to make bash
+ audit root's behavior by logging commands using his audit
+ framework. Enabled if the shell's name is `aubash'.
+
+ 3/8
+ ---
+jobs.c
+ - use WSTATUS (p->status) instead of bare p->status. Fix from
+ Jim Brown <jim.brown@rsmas.miami.edu>
+
+ 3/9
+ ---
+lib/readline/{complete,input,isearch,misc,readline,text,vi_mode}.c
+ - make sure cases where rl_read_key returns -1 (usually due to EIO
+ because the controlling tty has gone away) are handled correctly.
+ Prompted by report from Thomas Loeber <ifp@loeber1.de>
+
+ 3/10
+ ----
+sig.c
+ - new function, top_level_cleanup, callable from contexts where some
+ cleanup needs to be performed before a non-fatal call to
+ jump_to_top_level
+
+sig.h
+ - new extern declaration for top_level_cleanup
+
+builtins/common.c
+ - add calls to top_level_cleanup before calls to jump_to_top_level
+ in a builtin command context (no_args(), get_numeric_arg()). Fixes
+ bug reported by Ian Watson
+
+lib/readline/display.c
+ - in _rl_move_cursor_relative, use `new' when comparing against
+ the last invisible character in the prompt, since they both denote
+ buffer indices when in a multibyte locale, whereas `dpos' is a
+ display position
+
+ 3/13
+ ----
+lib/readline/complete.c
+ - set rl_completion_append_character to the default (' ') in
+ set_completion_defaults(). Fixes bug reported by David Emerson
+ <demerson3x@angelbase.com>
+
+ 3/23
+ ----
+builtins/evalfile.c
+ - make sure read() returns a value >= 0 before using it as an index
+ into string[]
+ - use a variable of type `ssize_t' for return value from read()
+ - only try to read the entire contents of a regular file in one shot
+ if the file size is less than SSIZE_MAX. These fix problems
+ reported by hooanon05@yahoo.co.jp.
+
+include/typemax.h
+ - define SSIZE_MAX as 32767 if it's not defined
+
+lib/readline/display.c
+ - in rl_redisplay() and update_line(), if redrawing the prompt because
+ it contains invisible characters, make sure we redraw the character
+ indicating a modified history line and take it into account when
+ computing _rl_last_c_pos
+ - in update_line, if deleting characters and redrawing the new text,
+ make sure we adjust _rl_last_c_pos by wrap_offset in a multibyte
+ locale if the text we're drawing starts before or at the last
+ invisible character in the prompt string. Fixes bug reported on
+ bug-readline by J Pelkey <pelkeyj@gmail.com>
+
+parse.y
+ - when adding at CTLESC character to the current token, do not
+ escape it with CTLESC if pass_next_character indicates that the
+ CTLESC was escaped by a backslash. Fixes bug reported by
+ Paul Bagshaw <paul.bagshaw@orange-ftgroup.com>.
+
+ 3/25
+ ----
+lib/readline/text.c
+ - in rl_forward_char, short-circuit the loop if in emacs mode and
+ rl_point == rl_end. Fixes problem with multibyte locales
+ reported by Len Lattanzi <llattanzi@apple.com>
+
+ 3/29
+ ----
+command.h
+ - new flag for subshell_environment: SUBSHELL_PROCSUB, for process
+ substitution
+
+subst.c
+ - add SUBSHELL_PROCSUB to subshell_environment in process_substitute
+
+ 3/30
+ ----
+doc/Makefile.in
+ - fix installation of bash.info to understand that it is in the build
+ directory, not the source directory
+
+mailcheck.c
+ - new function, init_mail_dates, calls remember_mail_dates only if
+ there are no mailboxes in `mailfiles'
+ - new function, init_mail_file, initializes a FILEINFO, using the
+ last time mail was checked as the mtime and atime (or the time the
+ shell was started if last_time_mail_checked is uninitialized)
+ - call init_mail_file instead of update_mail_file in add_mail_file,
+ called from remember_mail_dates (which is supposed to initialize
+ the list of mail files)
+ - new convenience functions, alloc_mail_file and dispose_mail_file to
+ allocate and free FILEINFO structs
+
+mailcheck.h
+ - extern declaration for init_mail_dates
+
+shell.c
+ - call init_mail_dates instead of remember_mail_dates
+
+ 4/4
+ ---
+builtins/read.def
+ - changes to print $PS2 when a line is continued with a backslash in
+ an interactive shell. This is as POSIX requires
+
+ 4/5
+ ---
+subst.c
+ - make sure quote_escapes is only ever called when the word to be
+ escaped is not marked as double-quoted -- cleaner, and allows us
+ to make certain assumptions
+
+ 4/6
+ ---
+subst.c
+ - change all EX_* defines to begin with SX_
+ - new flag, SX_NOCTLESC, obeyed by string_extract_verbatim, tells it
+ to not obey CTLESC quoting
+ - change quote_escapes to not quote CTLESC with CTLESC if one of the
+ chars in $IFS is CTLESC, since the return value from quote_string
+ will be passed to word splitting and filename generation
+ - change read_comsub to do the same thing for unquoted command
+ substitutions
+ - change list_string to pass SX_NOCTLESC if CTLESC is one of the
+ chars in $IFS, so it will split on CTLESC instead of using it as a
+ quote character
+
+ 4/7
+ ---
+subst.c
+ - slight change to string_extract_verbatim to allow CTLESC to quote
+ CTLNUL even if SX_NOCTLESC is set in the flags passed, to protect
+ the CTLNULs from future calls to remove_quoted_nulls. Only
+ matters when $IFS contains CTLESC
+ - changes to cope with $IFS containing CTLNUL in the same way as the
+ CTLESC changes
+
+builtins/read.def
+ - changes to cope with $IFS containing CTLNUL in the same way as the
+ CTLESC changes
+
+ 4/16
+ ----
+lib/sh/strftime.c
+ - a couple of fixes to the `%z' code
+
+eval.c
+ - add an fflush after printing the auto-logout message
+
+ 4/24
+ ----
+subst.c
+ - add call to top_level_cleanup in exp_jump_to_top_level to get things
+ like unwind-protects and the loop levels cleaned up
+
+{arrayfunc,expr,variables}.c
+ - add calls to top_level_cleanup before jump_to_top_level()
+
+ 4/27
+ ----
+builtins/complete.def
+ - make sure the `command' argument to the -C option is printed with
+ single quotes, since multi-word commands will require them. Bug
+ reported by martin@snowplow.org
+
+execute_cmd.c
+ - change execute_builtin_or_function and execute_subshell_builtin_or_function
+ to call fflush(stdout) after the builtin or function returns, to
+ make sure that all output is flushed before the call returns. It
+ matters on cygwin. Fix suggested by Eric Blake <ebb9@byu.net>
+
+redir.c
+ - in do_redirection_internal, if the file descriptor being acted upon
+ is the same one used by the stdout stream, call fflush(stdout) to
+ make sure all output is flushed before changing the underlying fd
+ out from underneath stdio. Fix suggested by Eric Blake <ebb9@byu.net>
+
+
+ 4/30
+ ----
+
+builtins/common.c
+ - new function, sh_chkwrite(int), fflushes stdout and checks for error;
+ printing an error message and returning a new exit status if there's
+ an error on stdout. Takes exit status as argument; returns new exit
+ status (EXECUTION_FAILURE if write error)
+
+builtins/common.h
+ - new extern declaration for sh_chkwrite
+
+builtins/{alias,cd,complete,echo,fc,history,pushd,shopt,times,trap,type,ulimit,umask}.def
+ - change to use sh_chkwrite to report write errors
+
+builtins/fc.def
+ - if an error occurs while writing commands from the history to a file
+ to be executed, report a write error and return failure without
+ attempting to execute any commands
+
+ 5/1
+ ---
+builtins/{bind,declare,set,setattr}.def
+ - change to use sh_chkwrite to report write errors
+
+ 5/2
+ ---
+lib/readline/input.c
+ - fix off-by-one errors in _rl_get_char (pop_index) and rl_stuff_char
+ (push_index) that caused the 511th character in the buffer to be
+ discarded. Fixes bug reported by Tom Bjorkholm <tom.bjorkholm@ericsson.com>
+
+ 5/8
+ ---
+subst.c
+ - fix parameter_brace_remove_pattern to pass getpattern() newly-allocated
+ memory. If word expansions (particularly brace expansions) are
+ required, the expansion code will free the string passed to
+ expand_word_internal, and we don't want to free unallocated memory
+ (patstr++) or have duplicate frees (patstr). Fixes bug reported on
+ Red Hat bugzilla
+
+ 5/9
+ ---
+lib/readline/signals.c
+ - fix bug in rl_set_signals that caught SIGINT twice and didn't catch
+ SIGTERM. Bug reported by Ed Kwan <ed.kwan@onstor.com>
+
+ 5/18
+ ----
+jobs.c
+ - change compact_jobs_list to return 1 if js.j_lastj == 0 and there is
+ a job in jobs[0]; compact_jobs_list should never return an index
+ already occupied
+ - change reset_job_indices to avoid infinite looping when js.j_firstj
+ == 0 or js.j_firstj == js.j_jobslots upon function entry. Fixes
+ bug reported by osicka@post.cz
+
+ 5/20
+ ----
+
+execute_cmd.c
+ - new variable, executing_builtin, keeps track of number of "levels"
+ of builtins being executed; incremented by execute_builtin; saved
+ and restored by execute_simple_command
+
+subst.c
+ - new variable, assigning_in_environment, set and unset around calls
+ to assign_in_env by the expansion code
+
+variables.c
+ - use executing_builtin and assigning_in_environment to decide whether
+ or not to look into temporary_env when calling find_variable_internal.
+ Fixes problem reported by Kevin Quinn <kevquinn@gentoo.org>
+
+ 5/22
+ ----
+redir.c
+ - change add_undo_redirect to differentiate between file descriptors
+ greater than SHELL_FD_BASE (currently 10) used internally to save
+ others and then being the targets of user redirection and fds that
+ are just the target of user redirections. The former need to have
+ an `exec undo' redirect added to undo it in case exec throws away
+ redirections; the latter does not. We use the close-on-exec flag
+ for this: if it's set, we assume that the file descriptor is being
+ used internally to save another. Fixes problem reported by Ian
+ Jackson <ian@davenant.greenend.org.uk>
+
+shell.c
+ - new function, init_interactive_script(), does interactive initialization
+ for a script run with `bash -i script' -- does everything the same
+ as init_interactive except set `interactive == 1', which causes the
+ shell to read from the standard input, after calling
+ init_noninteractive
+ - call init_interactive_script if a script is run as `bash -i script'.
+ Fixes problem reported by Joseph Michaud <jmichaud@sgi.com>
+
+ 5/24
+ ----
+builtins/printf.def
+ - change vbadd to only call FASTCOPY if the passed buffer length is
+ > 1
+ - if the `-v' option is supplied and `vbuf' is already non-null from a
+ previous `printf -v var' call, set vbuf[0]=0 explicitly instead of
+ relying on vbadd to do it -- vbadd may not be called.
+ - fix PRETURN macro to set vbuf[0] == 0 if vbuf is not freed. These
+ should fix problem reported by Elmar Stellnberger <estellnb@yahoo.de>
+
+lib/readline/display.c
+ - fix update_line to deal with the case where col_lendiff > 0 (meaning
+ the new string takes up more screen real estate than the old) but
+ lendiff < 0 (meaning that it takes fewer bytes to do so). This can
+ happen when a multibyte prompt string is replaced with a longer one
+ containing only single-byte characters (e.g., when doing a reverse
+ i-search). Fixes gentoo bug reported by Peter Volkov
+ <torre_cremata@mail.ru>
+
+builtins/read.def
+ - make sure we only print $PS2 if the standard input is a terminal
+ - new function, read_mbchar, to read a multibyte character so we
+ can make sure we read entire multibyte chars when `read -n' is
+ used, rather than bytes. Only called when -n is supplied.
+ Fixes problem reported by Stanislav Brabec <sbrabec@suse.cz>
+
+ 5/25
+ ----
+externs.h
+ - new #defines for third argument to named_function_string:
+ FUNC_MULTILINE (don't suppress newlines) and FUNC_EXTERNAL (convert
+ to external display form)
+
+subst.h
+ - new extern declaration for remove_quoted_escapes
+
+subst.c
+ - remove_quoted_escapes is now global
+
+print_cmd.c
+ - in named_function_string, if FUNC_EXTERNAL is in the flags argument,
+ call remove_quoted_escapes to convert from internal to external form.
+ Fixes bug reported by Bo Andresen <bo.andresen@zlin.dk>
+
+variables.c,builtins/{declare,setattr,type}.def
+ - use FUNC_MULTILINE in calls to named_function_string as appropriate
+ - add FUNC_EXTERNAL to calls to named_function_string as appropriate
+
+ 5/27
+ ----
+{make_cmd,variables}.c
+ - changes to enable the shell to compile when debugger support is
+ configured out (function_def hash table and access functions). Fixes
+ bug reported by Horst Wente <horst.wente@acm.org>
+
+builtins/help.def
+ - fix bug in `help' two-column printing to avoid referencing
+ shell_builtins[num_shell_builtins]
+
+error.c
+ - in get_name_for_error, use dollar_vars[0] if the name returned from
+ looking in $BASH_SOURCE[0] is the empty string as well as if it's
+ null
+
+ 5/31
+ ----
+arrayfunc.c
+ - change array_value_internal to set *RTYPE to 1 if the reference is
+ array[*] and 2 if the reference is array[@]
+
+subst.c
+ - in parameter_brace_expand_word, set the flags returned by the word
+ desc to include W_HASQUOTEDNULL if array_value returns QUOTED_NULL
+ for an array reference like x[*] and the word is quoted. Fixes bug
+ reported by Christophe Martin <schplurtz@free.fr>
+
+ 6/1
+ ---
+jobs.c
+ - several changes to preserve errno if tcgetpgrp/tcgetattr/tcsetattr
+ fail, for subsequent error messages
+ - change initialize_job_control to turn off job control if the terminal
+ pgrp == -1 or is not equal to shell_pgrp (with an error message)
+ - in initialize_job_control, if the shell has been forced interactive
+ with -i, make sure stderr is hooked to a tty before using it as
+ the controlling terminal. If it's not, try to open /dev/tty and
+ assign it to shell_tty. Fixes problems reported by Derek Fawcus
+ <dfawcus@cisco.com>
+
+ 6/13
+ ----
+support/shobj-conf
+ - changes to support shared object and shared library creation on AIX
+ 5.x and later versions. From Niklas Edmundsson <nikke@acc.umu.se>
+
+ 6/17
+ ----
+builtins/mkbuiltins.c
+ - new array of builtins, posix_builtins, containing builtins listed
+ as special to the command search order by POSIX
+ - add POSIX_BUILTIN to the builtin flags if the builtin name is one
+ that's special to the posix command search order
+
+builtins.h
+ - new define, POSIX_BUILTIN, means that a builtin is special to the
+ posix command search order
+
+ 6/22
+ ----
+lib/readline/display.c
+ - new macro, WRAP_OFFSET, intended to replace W_OFFSET. Takes prompt
+ strings longer than one physical line with invisible characters on
+ the second line into account when calculating the number of
+ invisible characters on the current screen line
+ - use WRAP_OFFSET where appropriate (update_line, _rl_move_cursor_relative)
+ - change update_line to deal with adjusting _rl_last_c_pos in a
+ multibyte environment when the prompt has invisible chars on the
+ second line and redisplay has output the invisible characters
+ - change _rl_move_cursor_relative to adjust _rl_last_c_pos in a
+ multibyte environment when the prompt has invisible chars on the
+ second line and the redisplay draws the invisible character. Fixes
+ redisplay bug reported by Andreas Schwab <schwab@suse.de>
+
+
+ 7/11
+ ----
+
+lib/readline/rltty.c
+ - enable flush-output code for systems other than AIX 4.1. Problem
+ reported by Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ 7/12
+ ----
+lib/readline/display.c
+ - set prompt_invis_chars_first_line from the portion of the prompt
+ following the final newline, instead of from the prefix. Fixes
+ bug reported on the Ubuntu bug list by dAniel hAhler
+ <ubuntu@thequod.de>
+
+ 7/13
+ ----
+variables.c
+ - use native __QNX__ and __QNXNTO__ cpp defines instead of qnx and
+ qnx6, respectively. Patch from Sean Boudreau <seanb@qnx.com>
+
+lib/sh/getcwd.c
+ - #undef HAVE_LSTAT on qnx, so it uses stat instead. Patch from
+ Sean Boudreau <seanb@qnx.com>
+
+ 7/21
+ ----
+builtins/common.c
+ - change sh_invalidnum to be a little smarter about octal and hex
+ numbers and change the message appropriately. Bug originally
+ reported on coreutils list by Jürgen Niinre <Jyrgen.Niinre@emt.ee>
+
+ 7/26
+ ----
+test.c
+ - make sure the string passed to test_unop has only a single character
+ following the `-'. Fixes bug reported by Michael A. Smith
+ <michael@smith-li.com>
+
+parse.y
+ - better input validation: make sure a word looks like a conditional
+ unary operator (-X) before calling test_unop
+
+ 7/28
+ ----
+trap.c
+ - in trap_handler, if it's called directly from the signal handler
+ (e.g., SIGINT sighandler, set by set_sigint_handler), but the
+ trap disposition has been reset to the default between the
+ assignment and receipt of the signal, check that the signal is
+ trapped and issue a warning if the shell was compiled with
+ debugging enabled. Fixes bug reported by Fergus Henderson
+ <fergus@google.com>
+
+ 8/1
+ ---
+lib/readline/{util,histexpand}.c
+ - fixes for small memory leaks from Michael Snyder <msnyder@sonic.net>
+
+ 8/18
+ ----
+Makefile.in
+ - add dependency on builtins/builtext.h to nojobs.o list. Fixes
+ `make -j 5' issue reported by Chris MacGregor <chris@bouncingdog.com>
+
+examples/loadables/Makefile.in
+ - add @LDFLAGS@ to SHOBJ_LDFLAGS assignment -- experimental. Suggested
+ by Mike Frysinger <vapier@gentoo.org>
+
+examples/loadables/{basename,cut,dirname,finfo,head,ln,logname,mkdir,pathchk,print,printenv,push,realpath,rmdir,sleep,tee,truefalse,tty,uname,unlink,whoami}.c
+ - fix up some includes. Fix from Mike Frysinger <vapier@gentoo.org>
+
+ 8/21
+ ----
+histexpand.c
+ - fix another memory leak in history_find_word. Bug report originally
+ from Michael Snyder <msnyder@sonic.net>; test case suggested by Jim
+ Blandy <jimb@codesourcery.com>
+
+ 8/26
+ ----
+subst.c
+ - change to do_assignment_internal to make an assignment to a variable
+ with the `noassign' internal attribute not a variable assignment
+ error.
+ - fix do_assignment_internal so assignment to a `noassign' variable
+ does not cause it to suddenly become visible if it's currently
+ invisible
+
+ 9/3
+ ---
+stringlib.c
+ - change strsub to check whether or not temp is non-null before
+ trying to null-terminate it. Also make sure temp is allocated
+ even if the pattern and replacement strings are empty, and set
+ to a copy of string (like ${foo//})
+ Bug report from Timo Lindfors <timo.lindfors@iki.fi>
+
+ 9/10
+ ----
+{config.h,Makefile,configure}.in,aclocal.m4
+ - new tests for fpurge and __fpurge
+
+lib/sh/fpurge.c, externs.h
+ - new file, fpurge(3) implementation with external decl in externs.h
+
+builtins/common.c
+ - add call to fpurge(stdout) to sh_chkwrite
+
+{redir,execute_cmd}.c
+ - add call to fpurge(stdout) after fflush(stdout) before changing
+ stdout file descriptor and after a builtin or function executes
+
+ 9/12
+ ----
+expr.c
+ - make sure noeval is set to 0 when a longjmp occurs, since it will
+ not be reset otherwise, and it can be set to 1 while processing
+ a {pre,post}-increment or {pre,post}-decrement token
+ - set noeval to 0 at the beginning of evalexp, since it's never
+ called recursively
+
+ 9/14
+ ----
+config-top.h
+ - new builder-modifiable define: DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS
+ Turning it on will cause errors from EPIPE to not be reported by
+ the normal shell write error message mechanism
+
+builtins/common.c
+ - if DONT_REPORT_BROKEN_PIPE_WRITE_ERRORS is defined, don't print an
+ error message from sh_wrerror if errno == EPIPE. Suggestion from
+ Petr Sumbera <petr.sumbera@sun.com>
+
+ 9/19
+ ----
+{jobs,nojobs}.c,jobs.h
+ - add code to retry fork() after EAGAIN, with a progressively longer
+ sleep between attempts, up to FORKSLEEP_MAX (16) seconds. Suggested
+ by Martin Koeppe <mkoeppe@gmx.de>
+
+ 9/21
+ ----
+version.c
+ - change copyright year to 2007
+
+ 9/25
+ ----
+pathexp.c
+ - change quote_string_for_globbing to add a backslash in front of a
+ backslash appearing in the pathname string, since the globbing
+ code will interpret backslashes as quoting characters internally.
+ Bug reported by <herbert@gondor.apana.org.au> on the debian list
+ (443685)
+
+ 10/8
+ ----
+lib/readline/display.c
+ - in update_line, make sure _rl_last_c_pos is > 0 before setting
+ cpos_adjusted (or we actually moved the cursor to column 0 in
+ _rl_move_cursor_relative). Fixes redisplay bug with prompt with
+ only invisible characters reported by dAniel hAhler
+ <ubuntu@thequod.de>
+
+ 10/10
+ -----
+lib/readline/display.c
+ - in rl_redisplay, when calculating the new physical cursor position
+ in a multibyte locale (`tx'), do not call rl_backspace if tx ends
+ up < 0. Rest of fix for bug reported by dAniel hAhler
+ <ubuntu@thequod.de>
+
+ 10/12
+ -----
+lib/sh/getcwd.c
+ - fix memory overwrite problem that's possible if buf is NULL and
+ passed size is greater than the pathname length. Reported by
+ Ian Campbell <ian.campbell@xensource.com>
+
+builtins/ulimit.def
+ - change the multiplier for the -c and -f options (`blocks') to 512,
+ the traditional value (and the one POSIX specifies). Bug reported
+ by Pete Graner <pgraner@redhat.com>
+
+braces.c
+ - pass process substitution through unchanged the same as command
+ substitution. Prompted by suggestion from Stephane Chazelas
+ <stephane_chazelas@yahoo.fr>
+
+lib/readline/input.c
+ - in rl_unget_char, fix off-by-one error when resetting pop_index if
+ it's < 0. Bug reported by Uwe Doering <gemini@geminix.org>
+
+builtins/type.def
+ - change exit status of `type' to not successful if any of the
+ requested commands are not found. Reported by Stephane Chazleas
+ <stephane_chazelas@yahoo.fr>
+
+pcomplete.c
+ - change command_line_to_word_list to use rl_completer_word_break_characters
+ instead of the shell metacharacters to split words, so programmable
+ completion does the same thing readline does internally. Reported
+ by Vasily Tarasov <vtaras@sw.ru>
+
+ 10/16
+ -----
+bashline.c
+ - When completing a command name beginning with a tilde and containing
+ escaped specical characters, dequote the filename before prefixing
+ it to the matches, so the escapes are not quoted again. Reported
+ by neil@s-z.org
+
+ 10/17
+ -----
+expr.c
+ - in readtok(), don't reset lasttp if we've consumed the whitespace
+ at the end of the expression string. Fixes error message problem
+ reported by <anmaster@tele2.se>
+
+ 11/1
+ ----
+builtins/printf.def
+ - change asciicode() to return intmax_t; add multibyte character
+ support instead of assuming ASCII (depending on behavior of system
+ multibyte support functions). Fixes bug reported by Rich
+ Felker <dalias@aerifal.cx>
+
+ 11/5
+ ----
+execute_cmd.c
+ - if redirections attached to a compound command fail, make sure to
+ set last_command_exit_value when returning EXECUTION_FAILURE.
+ Fixes bug reported separately by Andreas Schwab <schwab@suse.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ 11/9
+ ----
+builtins/read.def
+ - make sure the return value from get_word_from_string is freed if
+ non-null. Fixes memory leak bug reported by Lars Ellenberg
+ <lars.ellenberg@linbit.com>
+
+ 11/10
+ -----
+variables.c
+ - use getpid() as value of seeded_subshell to avoid problems with
+ random number generator not getting re-seeded correctly when
+ subshells are created. Fix from Tomas Janousek <tjanouse@redhat.com>
+
+lib/readline/display.c
+ - in update_line(), when outputting characters at the end of the line,
+ e.g., when displaying the prompt string, adjust _rl_last_c_pos by
+ wrap_offset if the text we're drawing begins before the last
+ invisible character in the line. Similar to fix from 5/24. Fixes
+ bug reported by Miroslav Lichvar <mlichvar@redhat.com>
+
+ 11/14
+ -----
+subst.c
+ - fix $[ expansion case to deal with extract_arithmetic_subst
+ returning NULL (if the `]' is missing) and return the construct
+ unchanged in that case. Fixes tab completion bug reported by
+ Heikki Hokkanen <hoxu@users.sf.net> (debian bug 451263)
+
+lib/readline/mbutil.c
+ - fix _rl_find_next_mbchar_internal to deal with invalid multibyte
+ character sequences when finding non-zero-length chars. Fixes
+ bug reported by Morita Sho <morita-pub-en-debian@inz.sakura.ne.jp>
+
+ 11/15
+ -----
+variables.c
+ - add new function `seedrand' to seed the bash random number
+ generator from more random data. Suggestion from Steve Grubb
+ <sgrubb@redhat.com>
+ - replace the rng in brand() with a slightly better one from FreeBSD
+ (filtered through Mac OS X 10.5). Replacement suggested by
+ Steve Grubb <sgrubb@redhat.com>
+
+ 11/21
+ -----
+configure.in
+ - darwin 9 also requires linking against libreadline.a and
+ libhistory.a because of Apple's questionable decision to ship a
+ libreadline "replacement" that doesn't provide all functions
+
+doc/{bash.1,bashref.texi}
+ - slight change to the text describing the effect of set -e when
+ in a || or && list
+
+ 12/5
+ ----
+jobs.c
+ - fix raw_job_exit_status to correct mixing of int/WAIT values (need
+ to return a WAIT)
+ - arrange so that children run as part of command substitutions also
+ set the SIGINT handler to wait_sigint_handler, since they effectively
+ don't do job control
+ - in wait_for, if a child run as part of a command substitution exits
+ due to SIGINT, resend the SIGINT to the waiting shell with kill(2).
+ This makes sure the exit status propagates
+
+doc/{bash.1,bashref.texi}
+ - tighten up the language describing when bash tries to see if its
+ stdin is a socket, so it can run the startup files. Suggested by
+ Vincent Lefevre <vincent@vinc17.org>
+
+eval.c
+ - in the DISCARD case of a longjmp to top_level, make sure
+ last_command_exit_value is set to EXECUTION_FAILURE if it's 0,
+ but leave existing non-zero values alone
+
+subst.c
+ - in command_substitute, don't reset pipeline_pgrp in the child
+ process -- this means that second and subsequent children spawned by
+ this comsub shell get put into the wrong process group, not the
+ shell's. Fix for bug reported by Ingo Molnar <mingo@elte.hu>
+
+ 12/6
+ ----
+support/shobj-conf
+ - make sure the cases for darwin8.x (Mac OS X 10.4.x) are extended to
+ darwin9.x (Mac OS X 10.5.x). Fixes problem originally reported
+ against readline-5.2 by schneecrash@gmail.com
+
+ 12/8
+ ----
+subst.c
+ - make sure to add the results of (successful) tilde expansion as a
+ quoted string, to inhibit pathname expansion and word splitting.
+ From recent Austin Group interpretation.
+
+include/shtty.h, lib/sh/shtty.c
+ - add ttfd_onechar, ttfd_noecho, ttfd_eightbit, ttfd_nocanon, and
+ ttfd_cbreak to set tty attributes associated with a particular
+ file descriptor (which is presumed to point to a terminal). Support
+ for fix for bug reported by b_bashbug@thebellsplace.com
+
+lib/readline/display.c
+ - make sure we only use rl_invis_chars_first_line when the number of
+ physical characters exceeds the screen width, since that's the
+ only time expand_prompt sets it to a valid value
+
+ 12/12
+ -----
+builtins/set.def
+ - change set_minus_o_option to return EX_USAGE if an invalid option
+ name is supplied. All callers can handle it.
+ - change set_builtin to return what set_minus_o_option returns if it's
+ not EXECUTION_SUCCESS. This allows EX_USAGE errors to abort a
+ shell running in posix mode
+
+ 12/14
+ -----
+builtins/read.def
+ - generalize the calls to the tty attribute functions to maintain a
+ local copy of the terminal attributes and use the fd supplied as
+ the argument to the -u option (default 0). Fix for bug reported
+ by b_bashbug@thebellsplace.com
+
+doc/bashref.texi, lib/readline/doc/{history,rlman,rluser,rluserman}.texi
+ - Slight changes to conform to the latest FSF documentation standards.
+ Patch from Karl Berry <karl@freefriends.org>
+
+ 12/20
+ -----
+execute_cmd.c
+ - after calling clear_unwind_protect_list, make sure we reset
+ parse_and_execute_level to 0, since there's nothing left to
+ restore it if top_level_cleanup tests it. Fixes bug reported
+ by Len Lattanzi <llattanzi@apple.com>
+
+ 12/31
+ -----
+lib/sh/getcwd.c
+ - new function, _path_checkino, checks whether the inode corresponding
+ to the path constructed from the first two arguments is the same as
+ the inode number passed as the third argument
+ - if BROKEN_DIRENT_D_INO is defined, meaning the d_ino/d_fileno
+ member of struct dirent doesn't contain valid values, use
+ _path_checkino instead of directly comparing against d_fileno.
+ Fixes Interix problem reported by Michael Haubenwallner
+ <haubi@gentoo.org>
+
+ 1/7/2008
+ --------
+array.c
+ - fix array_subrange to separate elements in returned string with
+ first char of $IFS if QUOTED is non-zero, since this indicates
+ the caller used ${array[@]:foo}. Fixes bug reported by Lea
+ Wiemann <lewiemann@gmail.com>
+
+ 1/8
+ ---
+subst.c
+ - new function returning a string containing the first character of
+ $IFS: char *ifs_firstchar(int *)
+
+subst.h
+ - extern declaration for ifs_firstchar()
+
+array.c
+ - call ifs_firstchar() to get first character of $IFS when needed
+ (array_subrange() and array_patsub())
+
+ 1/11
+ ----
+lib/readline/display.c
+ - use sentinel variable set at end of init_line_structures to decide
+ whether to call it from rl_redisplay, since early SIGWINCH on
+ Mac OS X that hits during this function can cause _rl_wrapped_line
+ to be referenced before initialization. Fix for bug reported by
+ Len Lattanzi <llattanzi@apple.com>
+
+subst.[ch]
+ - skip_to_delim is now compiled into the shell all the time, not just
+ when readline is linked in
+
+subst.c
+ - use skip_to_delim to find the `/' denoting the end of a pattern
+ in pattern substitution, since it knows more shell syntax than
+ quoted_strchr and understands multibyte characters. Fixes bug
+ reported by Dmitry V Golovashkin <Dmitry.Golovashkin@sas.com>
+
+ 1/15
+ ----
+subst.c
+ - add `flags' argument to skip_to_delim telling it whether or not to
+ set no_longjmp_on_fatal_error; set this flag when calling from the
+ readline completion code
+
+subst.h
+ - update extern declaration for skip_to_delim
+
+ 1/17
+ ----
+subst.c
+ - expand_prompt_string takes a third argument: the initial flags for
+ the WORD
+
+subst.h
+ - change extern declaration for expand_prompt_string to add third arg
+
+bashline.c
+ - pass W_NOCOMSUB as third argment to expand_prompt_string when
+ calling from bash_directory_completion_hook, since we don't want
+ to do command substitution from the completion code
+
+parse.y
+ - change call to expand_prompt_string
+
+ 1/18
+ ----
+doc/Makefile.in
+ - added an `install_builtins' rule to install the builtins.1 man page,
+ preprocessing it with sed to force `.so man1/bash.1', which some
+ versions of man require. Suggestion from Peter Breitenlohner
+ <peb@mppmu.mpg.de>
+ - new target `install_everything' that will install normal documentation
+ and builtins man page
+ - changed uninstall target to remove bash_builtins page from man
+ directory
+
+lib/readline/vi_mode.c
+ - new function, rl_vi_insert_mode, which calls rl_vi_start_inserting
+ to make sure the value of `last command to repeat' is set correctly.
+ Fix from Thomas Janousek <tjanouse@redhat.com>
+ - add support for redoing inserts made with the `I' command. Fix
+ from Thomas Janousek <tjanouse@redhat.com>
+ - add support for redoing inserts made with the `A' command
+
+lib/readline/readline.h
+ - new extern declaration for rl_vi_insert_mode
+
+lib/readline/{misc,readline,vi_mode,vi_keymap}.c
+ - change calls to rl_vi_insertion_mode to rl_vi_insert_mode
+
+ 1/19
+ ----
+builtins/read.def
+ - change timeout behavior when not reading from a tty device to save
+ any partial input in the variable list, but still return failure.
+ This also causes variables specified as arguments to read to be
+ set to null when there is no input available. Fix inspired by
+ Brian Craft <bcboy@thecraftstudio.com>
+
+ 1/21
+ ----
+builtins/fc.def
+ - change computation of last_hist to use remember_on_history instead
+ of a hard-coded `1'. This keeps fc -l -1 in PROMPT_COMMAND from
+ looking too far back
+
+ 1/25
+ ----
+lib/readline/complete.c
+ - fix fnwidth to use string[pos] instead of *string when testing the
+ current character for a control character or rubout
+
+ 2/2
+ ---
+general.c
+ - change posix_initialize to turn off source/. searching $PWD when
+ the file sourced is not found in $PATH. Fixes bug reported by
+ Paolo Bonzini <bonzini@gnu.org> and Eric Blake <ebb9@byu.net>
+
+ 2/9
+ ---
+builtins/*.def
+ - changes to text and formatting suggested by Jan Schampera
+ <jan.schampera@web.de>
+
+ 2/16
+ ----
+bashline.c
+ - change command_word_completion_function to use the word completion
+ found by readline, which matters only when ignoring case is on
+ and the completion found in the file system differs in case from
+ the text the user typed (this is what readline does for normal
+ filename completion). Fixes issue reported by Jian Wang
+ <jwang@a10networks.com.cn>.
+
+ 2/18
+ ----
+builtins/source.def
+ - if the filename passed as an argument contains a `/', don't search
+ $PATH. Not sure why it wasn't like this before
+
+ 2/21
+ ----
+lib/readline/terminal.c
+ - change rl_crlf so that the MINT system on ATARI systems adds a
+ carriage return before the \n
+
+ 2/22
+ ----
+doc/{bash.1,bashref.texi}
+ - added text to the EXIT STATUS section noting that exit statuses
+ fall between 0 and 255, inclusive
+
+support/mkversion.sh
+ - output a #define for DEFAULT_COMPAT_LEVEL (${major}${minor}; e.g. 32)
+ to version.h
+
+version.c
+ - int variable, shell_compatibility_level, set to DEFAULT_COMPAT_LEVEL
+ by default
+
+builtins/shopt.def
+ - new shopt variable, compat31, sets shell_compatibility_level to 31
+ (or back to default if unset)
+
+execute_cmd.c
+ - in execute_cond_node, restore bash-3.1 behavior of quoted rhs of
+ regexp matches if shell_compatibility_level == 31
+
+ 2/28
+ ----
+lib/readline/rltty.c
+ - set readline_echoing_p = 1 if tcgetattr fails and sets errno to
+ EINVAL, as Linux does when the fd is a pipe. Reported by Mike
+ Frysinger <vapier@gentoo.org>
+
+ 3/6
+ ---
+{MANIFEST,Makefile.in},lib/sh/{casemod,uconvert,ufuncs}.c
+ - new library sources from bash-4.0-devel tree
+
+lib/sh/spell.c
+ - moved cdspell() here from builtins/cd.def, renamed dirspell()
+
+externs.h
+ - new declarations for extern functions from new library files
+ - new extern declaration for lib/sh/spell.c:dirspell()
+
+builtins/cd.def
+ - call extern library function dirspell(); remove static cdspell()
+
+builtins/read.def
+ - when read times out, make sure input_string is null-terminated before
+ assigning any partial input read to the named variables
+
+ 3/10
+ ----
+lib/glob/xmbsrtowcs.c
+ - cut the number of memory allocations in xdupmbstowcs by not keeping
+ track of the indices if the caller hasn't asked for it
+
+ 3/17
+ ----
+builtins/fc.def
+ - make sure the adjustment to i in fc_gethnum uses the same formula
+ fc_builtin uses to calculate last_hist
+ - make sure that every time fc_gethnum is called, the fc command last
+ in the history list has not yet been deleted, since fc_gethnum
+ assumes that it has not. Fix from John Haxby <john.haxby@oracle.com>
+
+lib/readline/complete.c
+ - new private library function, _rl_reset_completion_state(), used to
+ reset any completion state internal to the library when a signal
+ is received
+ - call _rl_reset_completion_state() before returning from
+ rl_complete_internal
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_reset_completion_state
+
+lib/readline/signals.c
+ - call _rl_reset_completion_state from rl_signal_handler on SIGINT.
+ This fixes one of the problems identified by Mika Fischer
+ <mf+ubuntu@zoopnet.de>
+
+pcomplete.c
+ - programmable_completions now saves pointer to the compspec it's
+ working with in new global variable CURCS
+ - new function, pcomp_set_readline_variables, that sets or unsets
+ readline variables based on a passed flags value (COPT_FILENAMES,
+ etc.)
+ - new function, pcomp_set_compspec_options, to set or unset bits in
+ the options word of a passed compspec (default CURCS)
+ - only call bash_dequote_filename (via rl_filename_dequoting_function)
+ from pcomp_filename_completion_function if the readline state
+ word indicates word completion is in progress
+
+pcomplete.h
+ - new extern declaration for curcs
+ - new extern declaration for pcomp_set_readline_variables
+ - new extern declaration for pcomp_set_compspec_options
+
+bashline.c
+ - fix bash_dequote_filename to implement shell quoting conventions:
+ 1. Inhibit backslash stripping within single quotes
+ 2. Inhibit backslash stripping within double quotes only if
+ the following character is one of the special ones
+ - call pcomp_set_readline_variables from attempt_shell_completion
+ instead of doing the equivalent inline
+
+ 3/18
+ ----
+bracecomp.c
+ - make sure we sort array of matches in byte order (using strcmp). so
+ the brace calculations work correctly even when the locale orders
+ characters like aAbBcC...zZ. Fixes bug reported by Torsten Nahm
+ <torstennahm@torstennahm.de>
+
+ 3/20
+ ----
+lib/readline/{rltty,signals}.c
+ - move block_sigint and release_sigint from rltty.c to signals.c; add
+ _rl_ prefix to make them public to the library; change callers.
+ From Jan Kratchovil <jan.kratchovil@redhat.com>
+
+lib/readline/rlprivate.h
+ - new extern declarations for _rl_block_sigint and _rl_release_sigint
+
+lib/readline/display.c
+ - add calls to _rl_block_sigint and _rl_release_sigint to rl_redisplay,
+ since it maniupluates global data structures. Fix from Jan
+ Kratchovil <jan.kratchovil@redhat.com>
+
+builtins/printf.def
+ - change calls to asprintf and manually adding to vbuf to use calls
+ to vsnprintf against vbuf directly -- if the number of characters
+ to be written overflows the buffer, realloc the buffer and use
+ vsnprintf again. This should reduce the memory used by printf.
+ Idea from Yuya Katayama <yuya999@gmail.com>
+
+lib/readline/doc/rltech.texi
+ - documented rest of readline's state flags, including RL_STATE_CALLBACK
+ - documented rl_save_state and rl_restore_state
+
+ 3/27
+ ----
+lib/readline/{rlprivate.h,{display,readline,rltty,terminal,text}.c}
+ - rename readline_echoing_p to _rl_echoing_p for namespace consistency
+
+lib/readline/{rlprivate.h,{callback,readline,util}.c}
+ - rename readline_top_level to _rl_top_level for namespace consistency
+
+builtins/ulimit.def
+ - new -b (socket buffer size) and -T (number of threads) options
+
+array.c
+ - fix bug in calculation of the array element assignment string length:
+ use length of `is' instead of `indstr'. Reported as ubuntu bug
+ #202885 by John McCabe-Dansted
+
+builtins/setattr.def
+ - new function, show_all_var_attributes, displays attributes and
+ values for all shell variables (or shell functions) in a reusable
+ format
+
+builtins/common.h
+ - new extern declaration for show_all_var_attributes
+
+builtins/declare.def
+ - change `declare -p' to print out all variable attributes and values,
+ and `declare -fp' to print out all function attributes and
+ definitions. Inspired by request from John Love-Jensen
+ <eljay@adobe.com>
+
+doc/{bash.1,bashref.texi}
+ - document new -b and -T options to ulimit
+ - tighten up language describing AND and OR lists
+ - add description of new behavior of `declare -p'
+
+ 3/28
+ ----
+pcomplete.c
+ - rename curcs -> pcomp_curcs
+ - new global completion variable, pcomp_curcmd, the current command
+ name being completed
+
+builtins/complete.def
+ - new builtin, compopt, allows completion options for command names
+ supplied as arguments or the current completion being executed to
+ be modified. Suggested by Mika Fischer <mf+ubuntu@zoopnet.de>
+
+ 3/30
+ ----
+doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi
+ - document new compopt builtin
+
+ 4/5
+ ---
+support/shobj-conf
+ - change solaris10 stanza to use -fPIC to fix 64-bit sparc_v9/solaris10
+ compilations. Fix from Fabian Groffen <grobian@gentoo.org>
+
+builtins/read.def
+ - added `-i text' option, inserts `text' into line if using readline.
+ Suggested by many, used some ideas from Kevin Pulo <kevin@pulo.com.au>
+
+doc/{bash.1,bashref.texi}
+ - document new `-i text' option to read builtin
+
+ 4/7
+ ---
+lib/readline/bind.c
+ - new settable variable, `history-size', sets the max number of
+ entries in the history list
+
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+ - document new `history-size' settable readline variable
+
+ 4/8
+ ---
+builtins/complete.def
+ - change build_actions calling sequence to take a struct with `other'
+ (non-action) flag arguments (-p, -r)
+ - add support for `-E' option to build_actions and complete builtin --
+ modifies or displays (internal) `_EmptycmD_' completion spec
+
+bashline.c
+ - change attempt_shell_completion to try programmable completion on an
+ `empty' command line and return the results
+
+doc/bash.1,lib/readline/doc/rluser.texi
+ - documented new `-E' option to `complete'
+
+ 4/9
+ ---
+bashhist.c
+ - new variable, `enable_history_list', used to reflect setting of
+ `-o history' option
+ - change bash_history_{enable,disable,reinit} to set enable_history_list
+ as well as remember_on_history
+
+builtins/set.def
+ - use `enable_history_list' instead of `remember_on_history' to keep
+ value of `-o history' option
+
+builtins/evalstring.c
+ - instead of unwind-protecting remember_on_history, use a function to
+ restore it to the value of `enable_history_list' after
+ parse_and_execute runs the commands in the string. This allows
+ history to be turned off in a startup file, for instance. Problem
+ reported by Dan Jacobson <jidanni@jidanni.org>
+
+ 4/11
+ ----
+bashline.c
+ - limited support for completing command words with globbing characters
+ (only a single match completed on TAB, absolute or relative
+ pathnames supported, no $PATH searching, some support for displaying
+ possible matches, can be used with menu completion).
+ Suggested by Harald Koenig <h.koenig@science-computing.de>
+
+print_cmd.c
+ - change redirection printing to output r_err_and_out as `&>file',
+ since the man page says that's the preferred form
+
+ 4/12
+ ----
+builtins/*.def
+ - change long doc so the first line is a short description
+ - add `Exit Status:' section to each longdoc describing exit values
+
+builtins/help.def
+ - new `-d' option to print short description of each utility
+ - new `-m' option to print description of each builtin in a
+ pseudo-manpage format (inspired by ksh93)
+
+doc/{bash.1,bashref.texi}
+ - document new `-d' and `-m' options to `help'
+
+builtins/mapfile.def
+ - new builtin, `mapfile', imported from bash-4.0-devel branch
+
+tests/{mapfile.{data,right,tests},run-mapfile}
+ - tests for `mapfile' builtin
+
+doc/{bash.1,bashref.texi}
+ - added description of `mapfile' builtin
+
+MANIFEST,Makefile.in,builtins/Makefile.in
+ - added entries for mapfile source files
+
+arrayfunc.[ch]
+ - new function, bind_array_element, to support mapfile builtin
+
+ 4/20
+ ----
+expr.c
+ - fix operator precendence in expcond(): term after the `:' is
+ a conditional-expression, not a logical-OR-expression (using C
+ terminology). Bug reported by <archimerged@gmail.com>
+
+ 4/22
+ ----
+bashintl.h
+ - new P_ define for using ngettext to decide on plural forms
+ (currently unused)
+
+ 4/25
+ ----
+execute_cmd.c
+ - in execute_disk_command, if the command is not found, search for
+ a shell function named `command_not_found_handle' and call it
+ with the words in the command as arguments. Inspired by Debian
+ feature.
+
+doc/{bash.1,bashref.texi}
+ - document new command_not_found_handle behavior in COMMAND EXECUTION
+ section
+
+configure.in
+ - change default version to bash-4.0-devel
+
+ 4/28
+ ----
+variables.c
+ - change push_func_var and push_exported_var to call
+ stupidly_hack_special_variables if the temporary variable is going
+ to be disposed. This undoes any internal changes caused by a local
+ variable assignment in the environment or in a shell function. Bug
+ reported by Morita Sho <morita-pub-en-debian@inz.sakura.ne.jp> in
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=478096
+
+ 5/3
+ ---
+builtins/fc.def
+ - fixed a problem caused by change of 1/21 to use remember_on_history,
+ since it's turned off by parse_and_execute(), but can cause the
+ last command in history to be deleted and leave last_hist pointing
+ beyond the end of the history list. edit_and_execute_command can
+ do this.
+
+bashline.c
+ - new define, RL_BOOLEAN_VAR_VALUE, to take a readline boolean variable
+ and get its value as 0 or 1 (consider making readline global)
+ - put tty back into canonical mode before calling parse_and_execute in
+ edit_and_execute_command and then back into raw mode after it
+ returns. Fixes problem identified by <koersen@gmail.com>.
+
+ 5/4
+ ---
+lib/glob/glob.c
+ - code to support `globstar' option: GX_GLOBSTAR and two internal
+ flags. Changes to skipname, glob_vector, mbskipname, glob_filename.
+ New function finddirs().
+
+lib/glob/glob.h
+ - new defines to support globstar code
+
+builtins/shopt.def
+ - new shell option, `globstar', enables special handling of `**' in
+ glob patterns -- matches all directories recursively
+
+pathexp.h
+ - extern declaration for glob_star
+
+pathexp.c
+ - break inline code out of quote_globbing_chars into a separate
+ function to decide whether a character is a globbing char:
+ glob_char_p
+ - change shell_glob_filename to call glob_filename with the
+ GX_GLOBSTAR flag if glob_star is set
+
+doc/{bash.1,bashref.texi}
+ - document new `globstar' shell option
+
+arrayfunc.c
+ - new function, broken out of quote_array_assignment_chars:
+ quote_assign; extended from old code to make sure that globbing
+ chars and chars in $IFS are quoted when displaying assignment
+ statements, especially in compound array assignments
+
+ 5/5
+ ---
+bashline.c
+ - new variable, dircomplete_spelling, controls spelling correction
+ of directory names when doing filename completion
+ - change bash_directory_completion_hook to incorporate spelling
+ correction if initial canonicalization of directory name fails
+
+builtins/shopt.def
+ - new shell option, `dirspell', enables and disables spelling
+ correction of directory names during word completion
+
+builtins/read.def
+ - support for fractional timeout values (ival.uval); uses uconvert
+ and falarm/setitimer
+
+config.h.in
+ - new `HAVE_SETITIMER' define
+
+configure.in
+ - look for setitimer(2), define HAVE_SETITIMER if found
+
+doc/{bash.1,bashref.texi}
+ - document new `dirspell' shopt option
+ - document new fractional values to `read -t timeout'
+
+ 5/6
+ ---
+assoc.[ch]
+ - new files, basic support for associative array implementation
+
+general.h
+ - new extern declarations for sh_openpipe, sh_closepipe, trim_pathname
+
+general.c
+ - new functions: sh_openpipe to create a pipe and move the file
+ descriptors to a high range; sh_closepipe, to close pipe fds and
+ clean up, and trim_pathname, to replace portions of a pathname
+ with `...' (for prompting)
+
+jobs.c
+ - don't set last_asynchronous_pid in child shell (messes up $!, among
+ other things)
+
+parse.y,parser.h
+ - moved definitions of parser flags to parser.h
+
+array.c
+ - imported array_modcase (case-changing operations on arrays) from
+ 4.0-devel branch
+
+array.h
+ - new extern declaration for array_modcase
+
+lib/readline/complete.c
+ - new variable, rl_menu_completion_entry_function, generator for
+ rl_menu_complete
+ - new menu completion `browsing' implementation, with several
+ improvements over the old code. Inspired by Sami
+
+lib/readline/readline.h
+ - extern declaration for rl_menu_completion_entry_function
+
+ 5/8
+ ---
+lib/readline/complete.c
+ - add support for a third argument to fnprint and print_filename,
+ which supports replacing a specified portion of the pathnames
+ printed when displaying possible completions with a `...' (or
+ `___', if the prefix would be confused with a portion of the
+ filename)
+ - new variable, _rl_completion_prefix_display_length, sets the
+ number of characters in a common prefix to be replaced with an
+ ellipsis when displaying possible completions
+ - add support to _rl_display_match_list to find the length of the
+ common prefix of all items being displayed, and passing that
+ value to print_filename for possible replacement with an ellipsis
+ if that length is longer than _rl_completion_prefix_display_length
+
+lib/readline/bind.c
+ - add support for retrieving value of history-size variable to
+ _rl_get_string_variable_value
+ - new bindable variable, completion-prefix-display-length. When
+ displaying possible completions, matches with a common prefix
+ longer than this value have the common prefix replaced with an
+ ellipsis
+ - support for retrieving value of completion-prefix-display-length
+ variable to _rl_get_string_variable_value
+ - new bindable variable, revert-all-at-newline: if enabled, causes
+ all changes in history lines to be undone before readline returns
+ after processing a newline
+
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+ - document new `completion-prefix-display-length' variable
+ - document new `revert-all-at-newline' variable
+
+execute_cmd.c
+ - change execute_builtin to not inherit the `-e' flag into commands
+ executed by the `command' or `source/.' builtins if we are supposed
+ to be ignoring the return value. This is like `eval'. Fixes bug
+ reported by Hiroshi Fujishima <hirobo@tonteki.org>
+
+ 5/10
+ ----
+variables.c
+ - when reading the initial environment, don't create variables with
+ names that are not valid shell identifiers. Fixes bug reported by
+ Stephane Chazleas <stephane_chazelas@yahoo.fr>
+
+ 5/13
+ ----
+subst.c
+ - fix string_quote_removal to gracefully handle the case where a
+ backslash is the final character in the string (leaves the backslash
+ in place). Fixes bug reported by Ian Robertson
+ <iroberts@u.washington.edu>
+
+ 5/16
+ ----
+support/checkbashisms
+ - Perl script that purports to check for bash-specific features in a
+ shell script. Lifted from Debian via ubuntu
+
+ 5/20
+ ----
+lib/readline/display.c
+ - in update_line, when deciding whether or not to adjust _rl_last_c_pos
+ in a multibyte environment after printing the last line of a multiline
+ prompt with invisible characters on the first and last lines, use
+ the number of inivisible chars on the first line in the calculation
+ deciding whether or not we're past the last invisible character and
+ need to adjust the cursor position. Old code used the number of
+ invisible chars on the last prompt line. Fixes bug reported by
+ stuff@slinkp.com.
+ - in update_line, when fixing _rl_last_c_pos after drawing the first
+ line of the prompt, use the number of invisible chars on the first
+ line as the offset, instead of the total number of invisible chars
+ - use prompt_multibyte_characters, the number of multibyte chars in
+ the prompt string, to short-circuit some relatively expensive
+ multibyte text processing in rl_redisplay
+
+ 5/21
+ ----
+variables.c
+ - new function, reinit_special_variables(), a hook for special
+ vars that need their hook functions called when they're unset as
+ a result of the shell reinitializing itself to run a script
+
+shell.c
+ - shell_reinitialize now calls reinit_special_variables
+ - shell_reinitialize now calls bashline_reset
+
+variables.h
+ - new extern declaration for reinit_special_variables
+
+bashline.c
+ - new function, bashline_reset(), called when the shell reinitializes
+ in shell_reinitialize. Right now, just resets
+ bash_readline_initialized to 0.
+
+bashline.h
+ - new extern declaration for bashline_reset()
+
+ 5/23
+ ----
+bashhist.c
+ - new function, bash_clear_history, clears the history and resets any
+ associated internal bash state
+
+bashhist.h
+ - extern declaration for bash_clear_history
+
+builtins/history.def
+ - call bash_clear_history instead of clear_history for `history -c'.
+ Fixes part of problem reported by Scott McDermott
+ <scott.m.mcdermott@gmail.com>
+ - decrement history_lines_this_session in delete_histent, called for
+ `history -d'
+
+builtins/history.def,bashhist.[ch]
+ - move delete_histent() to bashhist.c; rename to bash_delete_histent
+ - move delete_last_history() to bashhist.c; rename to
+ bash_delete_last_history()
+
+ 5/25
+ ----
+braces.c
+ - add another parameter to mkseq(), the number of digits to put into
+ each member of a numeric sequence (width), changes to determine
+ any zero-padding go into expand_seqterm
+ - changes to expand_seqterm to allow user-specified increments
+
+bashline.[ch],shell.c,sig.c
+ - switched names of bashline_reinitialize and bashline_reset to better
+ reflect their functions
+ - when searching $PATH for directories to use for command completion,
+ make sure to free `current_path' before going out of scope
+ - new bindable function `dabbrev-expand', which is more or less
+ menu completion using dynamic history completion as the generator
+ - changes to bash_execute_unix_command to set variables for the
+ executed command like programmable completion: READLINE_LINE
+ (rl_line_buffer) and READLINE_POINT (rl_point)
+ - change to bash_execute_unix_command to allow the executed command
+ to change the readline line buffer by modifying the value of
+ READLINE_LINE and to change rl_point by modifying the value of
+ READLINE_POINT
+
+common.h
+ - new SEVAL_ defines for later parse_string changes from 4.0-devel
+ branch
+
+command.h
+ - new defines for new &>> r_append_err_and_out redirection
+
+builtins/evalstring.c
+ - new function, parse_string, parses a command from a passed string
+ and returns the number of characters consumed. For satisfying
+ Posix rules when parsing command substitutions, from bash-4.0-devel
+ branch
+ - split out common prolog code from parse_string and
+ parse_and_execute into a separate function called from both
+
+parse.y
+ - small changes to add symbols needed for parse_string
+ - parser change to add `|&' as synonym for `2>&1 |'; translation is
+ performed at parse time so |& never shows up in output of
+ print_command, for instance. Picked up from zsh, merged in from
+ bash-4.0-devel branch
+
+parse.y,{redir,copy_cmd,dispose_cmd,make_cmd,print_cmd}.c
+ - implement new &>> r_append_err_and_out (like >>foo 2>&1); merged
+ in from bash-4.0-devel branch
+
+doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi
+ - document new optional increment in brace expansion
+ - document new zero-padded fixed-width integer brace expansion
+ - document new `dabbrev-expand' bindable readline command
+ - document new effects of `bind -x' setting and reading the values of
+ READLINE_LINE and READLINE_POINT
+ - document new |& synonym for `2>&1 |' pipeline operator
+
+ 5/26
+ ----
+parse.y - recognize new ;& and ;;& case action list terminator tokens and
+ implement them in the grammar, setting CASEPAT_FALLTHROUGH and
+ CASEPAT_TESTNEXT flags as appropriate
+
+print_cmd.c
+ - print new ;& and ;;& case clause action list terminators as
+ appropriate
+
+execute_cmd.c
+ - implement new case clause action list terminators:
+ ;& - fall through to actions associated with next pattern list
+ ;;& - fall through to tests in next pattern list
+
+doc/{bash.1,bashref.texi}
+ - document new ;& and ;;& case clause action list terminators
+
+ 5/28
+ ----
+jobs.c
+ - change waitchld so it treats SIGCHLD like SIGINT if `wait' is being
+ executed, and allows wait to jump out before running any trap set
+ on SIGCHLD. Fixes debian bug #483016 reported by Miroslav Rudisin
+ <miero@atrey.karlin.mff.cuni.cz>
+ - run_sigchld_trap is no longer static, so the trap code in trap.c
+ can call it
+ - change run_sigchld_trap to call set_impossible_sigchld_trap instead
+ of just using a call to restore_default_signal
+
+jobs.h
+ - new extern declaration for run_sigchld_trap
+
+trap.c
+ - fix run_pending_traps to run a SIGCHLD trap if the trap handler isn't
+ set to IMPOSSIBLE_TRAP_HANDLER
+ - in trap_handler, don't reset the SIGCHLD trap handler to trap_handler
+ if MUST_REINSTALL_SIGHANDLERS is defined
+ - new function, set_impossible_sigchld_handler, sets the trap string
+ associated with SIGCHLD to IMPOSSIBLE_TRAP_HANDLER; used as a sentinel
+ by run_sigchld_trap and maybe_set_sigchld_handler
+ - change maybe_set_sigchld_handler to set the SIGCHLD trap string only
+ if the current value is IMPOSSIBLE_TRAP_HANDLER. This ensures that
+ any traps on SIGCHLD set in a SIGCHLD handler will persist. Fixes
+ debian bug #483016 reported by Miroslav Rudisin
+ <miero@atrey.karlin.mff.cuni.cz>
+
+trap.h
+ - new extern declaration for set_impossible_sigchld_trap
+
+ 5/31
+ ----
+parse.y
+ - new function: parse_comsub(), parses $(...) by parsing command
+ between parens and making sure the next token is `)'. From
+ the bash-4.0-devel branch
+ - new function: xparse_dolparen, helper function for parsing
+ command substitutions in $(...). Called from subst.c to extract
+ a command substitution during word expansion. From bash-4.0-devel
+ branch
+ - new function: rewind_input_stream(). Rewinds bash_input.location.string
+ back to where it was before the shell parsed a $() command
+ substitution. From bash-4.0-devel branch
+ - changes to parse_matched_pair to combine most of the flag variables
+ (was_dollar, in_comment, and so on) into a local flags word
+
+ 6/2
+ ---
+parse.y
+ - call trim_pathname, which retains only the last $PROMPT_DIRTRIM
+ directories and replaces the intervening characters with `...',
+ when expanding \w and \W
+
+doc/{bash.1,bashref.texi}
+ - document the effect of setting PROMPT_DIRTRIM
+
+ 6/3
+ ---
+builtins/ulimit.def
+ - make the multiplier (block size) for -c and -f 512 bytes only if in
+ Posix mode and 1024 bytes otherwise (as in previous versions). Uses
+ POSIXBLK and BLOCK_SIZE defines to parameterize size based on value
+ of posixly_correct
+
+doc/bashref.texi
+ - document this addition to posix mode
+
+builtins/common.c
+ - change get_numeric_arg to have a calling sequence and return value
+ more closely mimicking general.c:legal_number(), with the addition
+ of a flags word
+ - add extra value for `fatal' argument to get_numeric_arg to force it
+ to return failure to the caller rather than longjmping
+
+builtins/common.h
+ - change prototype declaration for get_numeric_arg
+
+builtins/{break,shift}.def
+ - change calls to get_numeric_arg to deal with new semantics and calling
+ sequence
+
+builtins/history.def
+ - display_history now returns an int
+ - change calling sequence for get_numeric_arg in display_history
+ - display_history now returns failure to the caller if get_numeric_arg
+ detects an invalid number, rather than jumping back to the top level
+ - use value returned by display_history as return status of history
+ builtin, filtered through sh_chkwrite
+ - history no longer aborts compound commands on invalid arguments.
+ fixes problem reported by Chu Li <chul@cn.fujitsu.com>
+
+{braces,subst}.c
+ - extract_command_subst now takes a third flags argument; passed flags
+ are ORd into flags passed to other functions; changed callers
+
+subst.h
+ - move SX_* defines here from subst.c so parse.y:xparse_dolparen can
+ see them and behave appropriately
+ - extract_command_subst now takes a third flags argument; change
+ prototype
+
+subst.c
+ - change extract_command_subst to call xparse_dolparen when extracting
+ a $() construct
+ - change calls to extract_delimited_string to extract_command_subst
+ as appropriate
+ - if command_substitute returns a NULL word desc, don't call
+ dispose_word_desc on it
+
+parse.y
+ - change xparse_dolparen to use the SX_* flags now in subst.h
+
+ 6/16
+ ----
+subst.c
+ - in quote_list, set W_HASQUOTEDNULL flag in the word if quote_string
+ turns "" into CTLNUL
+ - in dequote_list, turn off W_HASQUOTEDNULL flag in the word if
+ dequote_string turns CTLNUL into ""
+ - new function, string_list_pos_params, encapsulates everything
+ needed to turn the positional parameters or an array indexed with
+ '@' or '*' into a string, including taking care of quoting and
+ using the first char of $IFS, when used in another expansion like
+ pattern removal or pattern substitution
+ - change list_remove_pattern, pos_params, pos_params_pat_subst to
+ call string_list_pos_params. Fixes problems reported by
+ Stephane Chazelas <stephane_chazelas@yahoo.fr>
+
+ 6/22
+ ----
+variables.h
+ - include assoc.h for associative arrays
+ - defines for case-modifying expansions and associative array variables
+ - sh_var_assign_func_t functions now take an extra char * parameter
+
+ 6/25
+ ----
+variables.c
+ - change declarations and definitions of sh_var_assign_func_t functions
+ to add the extra char * parameter: null_assign, null_array_assign,
+ assign_seconds, assign_random, assign_lineno, assign_subshell,
+ assign_dirstack
+ - change calls to var->assign_func to add extra char * argument
+ - broke part of body of dispose_variable out into a new function,
+ dispose_variable_value, which knows how to free all kinds of shell
+ variable data
+ - changes to deal with variables with the internal `nofree' attribute
+
+arrayfunc.c
+ - change calls to var->assign_func to add extra char * argument
+ - bind_array_var_internal now takes an extra `char *key' argument
+ - additions for associative array implementation; from bash-4.0-devel
+ tree
+
+arrayfunc.[ch],subst.c
+ - expand_compound_array_assignment now takes the variable as the first
+ argument (SHELL_VAR *); changed function definition and callers
+
+builtins/set.def
+ - changes to handle associative arrays in `unset'
+
+{execute_cmd,command}.h
+ - definitions for coproc implementation; from bash-4.0-devel tree
+
+variables.c
+ - new functions for associative arrays: make_new_assoc_variable,
+ make_local_assoc_variable
+
+ 6/26
+ ----
+variables.c
+ - more infrastructure for associative arrays; from bash-4.0-devel tree
+ - infrastructure for handling assignments to variables with
+ case-modifying attributes; from bash-4.0-devel tree
+
+config.h.in
+ - add #defines controlling case-modifying variable attributes and word
+ expansions
+
+configure.in
+ - add enable options for case-modifying variable attributes and word
+ expansions (--enable-casemod-attributes and --enable-casemod-expansions,
+ respectively); from bash-4.0-devel tree
+
+execute_cmd.c
+ - add code to fix_assignment_words to handle assignment statements to
+ "assignment builtins" that seem to be associative arrays. Imperfect
+
+subst.c
+ - array_remove_pattern now takes a SHELL_VAR * as its first argument
+ instead of an ARRAY *; from the bash-4.0-devel tree
+ - changes to array_length_reference for associative arrays; from the
+ bash-4.0-devel tree
+ - changes to get_var_and_type for associative arrays; from the
+ bash-4.0-devel tree
+ - changes to parameter_brace_substring for associative arrays; from the
+ bash-4.0-devel tree
+ - changes to param_expand for associative arrays; from the
+ bash-4.0-devel tree
+
+builtins/declare.def
+ - changes for associative arrays: new `-A' option, changes to make
+ local and global associative array variables; from the bash-4.0-devel
+ tree
+
+ 6/27
+ ----
+execute_cmd.c
+ - in execute_command_internal, when short-circuiting execution
+ because `breaking' or `continuing' is non-zero, preserve the exit
+ status by returning `last_command_exit_value' instead of an
+ unconditional EXECUTION_SUCCESS. Fixes bug reported by Roman
+ Rakus <rrakus@redhat.com>
+
+ 6/28
+ ----
+variables.c
+ - fix get_var_and_type to appropriately handle references like
+ ${varname[0]}, where `varname' is a scalar variable
+
+make_cmd.[ch],parse.y
+ - make_here_document now takes a second argument: the current line
+ number; changed caller (gather_here_documents)
+
+builtins/setattr.def
+ - added support for associative arrays and the `-A' variable attribute
+ option; from the bash-4.0-devel tree
+
+subst.c
+ - change code that transforms `declare -A xxx=(yyy)' to perform the
+ internal `declare -A xxx' before doing the variable assignment,
+ because associative arrays have to be declared before being assigned
+ to as such; uses new function make_internal_declare
+
+ 6/30
+ ----
+subst.[ch]
+ - dequote_escapes is now external; add declaration in subst.h
+ - remove_quoted_nulls is now external; add declaration in subst.h
+
+array.[ch]
+ - new functions for completeness: array_dequote, array_dequote_escapes,
+ array_remove_quoted_nulls
+ - array_subrange now calls array_remove_quoted_nulls for "${array[*]}".
+ Fixes bug reported by Vitor De Araujo <ux386@yahoo.com.br>
+ - array_patsub now calls array_remove_quoted_nulls for "${array[*]}"
+ - array_modcase now calls array_remove_quoted_nulls for "${array[*]}"
+ - array_patsub now handles the mflags&MATCH_QUOTED case appropriately
+ (that implies "${array[@]}")
+
+subst.c
+ - new functions for case-modifying word expansion suppport:
+ pos_params_casemod, parameter_brace_casemod; from bash-4.0-devel branch
+
+assoc.c
+ - new functions for completeness: assoc_remove_quoted_nulls
+ - assoc_patsub now calls assoc_remove_quoted_nulls for "${assoc[*]}"
+ - assoc_modcase now calls assoc_remove_quoted_nulls for "${array[*]}"
+ - assoc_patsub now handles the mflags&MATCH_QUOTED case appropriately
+ (that implies "${assoc[@]}")
+
+ 7/1
+ ---
+assoc.[ch]
+ - new function, assoc_subrange: takes a hash table, converts it to a
+ word list, and performs the subrange and indexing on that list
+ - new functions for completeness: assoc_dequote, assoc_dequote_escapes
+
+subst.c
+ - verify_substring_values now takes the variable SHELL_VAR * as its
+ new first argument; changed callers
+ - change verify_substring_values to handle associative arrays using the
+ number of elements as the upper bound
+ - brought in code to do case-modifying word expansions from
+ bash-4.0-devel branch, conditional on CASEMOD_EXPANSIONS
+
+input.c
+ - if the read(2) in getc_with_restart returns -1/EAGAIN, turn off
+ non-blocking mode on the file descriptor and try again. Fixes
+ problem reported by Glynn Clements <glynn@clements.plus.com>
+
+ 7/2
+ ---
+doc/{bash.1,bashref.texi}
+ - documented new case-modifying word expansions
+
+make_cmd.c
+ - change make_here_document to display a warning message including the
+ start line of a here document if it ends up delimited by EOF.
+ Addresses issue raised by Richard Neill <rn214@hermes.cam.ac.uk>
+
+subst.c
+ - in do_assignment_internal, make sure the `invisible' attribute is
+ unset before returning success
+
+ 7/3
+ ---
+config-top.h
+ - add `CASEMOD_CAPCASE' define to include or exclude the ~[~] word
+ expansion and the `capcase' variable attribute (declare -c)
+
+builtins/declare.def
+ - add support for manipulating the case-modifying attributes (new
+ declare -clu); from bash-4.0-devel branch
+
+builtins/setattr.def
+ - add support for reporting case-modifying attributes (-clu attributes);
+ from bash-4.0-devel branch
+
+doc/{bash.1,bashref.texi}
+ - specify that the read builtin timing out results in a return value
+ greater than 128
+ - document new `-l' and `-u' options to declare/typeset/local. Leave
+ `-c' undocumented for now
+
+ 7/4
+ ---
+make_cmd.[ch]
+ - make_coproc_command: construct a coproc; from bash-4.0-devel tree
+
+dispose_cmd.c
+ - dispose coproc command; from bash-4.0-devel tree
+
+copy_cmd.c
+ - copy a coproc command; from bash-4.0-devel tree
+
+print_cmd.c
+ - print a coproc command; from bash-4.0-devel tree
+
+shell.c
+ - dispoe the current coproc on shell exit; from bash-4.0-devel tree
+
+redir.c
+ - when closing redirects as part of user redirections, check whether
+ or not active coprocess fds are being closed and close the coproc
+ if so; from bash-4.0-devel tree
+
+config.h.in
+ - add define for COPROCESS_SUPPORT to include coprocesses
+
+configure.in
+ - add support for configuring coprocesses into and out of the build
+
+jobs.c
+ - in waitchld, check whether or not a coproc processs has exited;
+ from the bash-4.0-devel tree
+
+ 7/5
+ ---
+doc/bashref.texi
+ - document new --enable-coprocesses option that includes coprocess
+ support
+
+execute_cmd.c
+ - add functions for coprocess support, including execute_coproc and
+ code to call it when command->type == cm_coproc; from
+ bash-4.0-devel tree
+
+lib/sh/fdprintf.c
+ - new library function fdprintf(int fd, const char *format, ...);
+ printf to a file descriptor
+
+{configure,config.h}.in
+ - support for detecting fdprintf and compiling in replacement
+
+Makefile.in,lib/sh/Makefile.in
+ - add rules to include fdprintf.o
+
+doc/{bash.1,bashref.texi}
+ - documented coprocesses and `coproc' reserved word
+
+ 7/7
+ ---
+subst.c
+ - fix array_length_reference to use MB_STRLEN instead of STRLEN, so
+ multibyte characters in array values are computed correctly. Fixes
+ bug reported by Wang Xin <wxinee@gmail.com>
+
+ 7/10
+ ----
+jobs.c
+ - new function, maybe_give_terminal_to (old, new, flags), sets the
+ terminal pgrp to NEW if and only if it's currently set to OLD
+ - call maybe_give_terminal_to when the parent sets the terminal pgrp
+ to the pipeline pgrp in stop_pipeline, so we don't give the
+ terminal to the new job's pgrp unless it's currently owned by the
+ shell. Fixes race condition described by Joe Peterson
+ <joe@skyrush.com>, where parent bash may change tty pgrp after a
+ grandchild (interactive bash child of su) has changed it to
+ something else. The call to maybe_give_terminal_to makes explicit
+ a previously-implicit assumption
+
+aclocal.m4
+ - remove dependency on writable /tmp by creating directories in
+ build directory
+
+shell.c
+ - make changes to how bash sets no_line_editing and running_under_emacs
+ to deal with various emacs terminal emulators; use better check
+ for `eterm', since bash sends $PWD to eterm with control sequences
+ that confuse other programs. Problem reported by Micah Cowan
+ <micah@cowan.name>
+
+
+ 7/12
+ ----
+print_cmd.c
+ - break code that prints here-documents into two functions:
+ print_heredoc_header, which prints the operator and delimiter, and
+ print_heredoc_body, which prints the body text and closing delimiter
+ - change print_redirection to call print_heredoc_{header,body}
+ - sentinel variable, printing_connection, used when printing a command
+ of type `connection' (|, &&, ||, etc.)
+ - change print_redirection_list to save any here documents it finds
+ while printing a connection and save them in `deferred_heredocs'
+ - new function, print_deferred_heredocs, called from print_redirection
+ in the cm_connection case, calls print_heredoc_header for all the
+ here documents, then prints the operator (|, &&, ||, etc.), then
+ the here-document body. This preserves syntactic correctness; the
+ old code printed the control operator after the body of the here
+ document. Fixes bug reported by <buport@figpost.com>
+
+ 7/16
+ ----
+locale.c
+ - in set_locale_var, print a warning message if setlocale() fails any
+ time it's called -- required some code restructuring
+
+ 7/19
+ ----
+support/shobj-conf
+ - support for mingw32, contributed by Carlo Bramix
+ <carlo.bramix@libero.it>
+
+ 7/23
+ ----
+execute_cmd.c
+ - added support (currently unused) to manage a list of coprocs
+
+ 7/25
+ ----
+bashline.c
+ - add extern declarations for literal_history and force_append_history
+
+builtins/shopt.def
+ - include "bashhist.h" instead of having extern declarations for the
+ appropriate history variables
+
+parser.h
+ - new parser_state value: PST_HEREDOC, set when reading body of here-
+ document in parse.y:read_secondary_line
+
+parse.y
+ - set PST_HEREDOC bit in parser_state when reading a secondary line
+ for the body of a here-document
+ - change read_secondary_line to save lines in the body of a here-
+ document in the shell history list if remember_on_history is
+ set. Fixes bug reported by Gene Golub <gene_golub@hotmail.com>
+
+ 8/4
+ ---
+configure.in
+ - changed to 4.0-alpha
+
+lib/readline/readline.h
+ - changed constants to reflect readline-6.0 version
+
+ 8/11
+ ----
+lib/readline/signals.c
+ - make sure we don't use SIGWINCH without checking whether or not it's
+ defined. Fix from Pedro Alves <pedro@codesourcery.com>
+
+ 8/12
+ ----
+
+COPYING
+ - updated to GPLv3; edits in every file with a copyright or license
+ declaration to update to gpl3
+
+version.c
+ - update extended version info to latest gnu standard
+
+ 8/17
+ ----
+subst.c
+ - change exp_jump_to_top_level to only call top_level_cleanup if
+ parse_and_execute_level is 0. If it's not, the longjmp to
+ parse_and_execute will run the unwind-protect stack. Fixes bug
+ most recently reported by Roman Rakus <rrakus@redhat.com>
+
+ 8/18
+ ----
+support/config.{guess,sub}
+ - updated to newer versions from autoconf-2.62 distribution
+
+ 8/20
+ ----
+subst.c
+ - fixed parameter_brace_substring to differentiate between indexed and
+ associative arrays when computing second offset, instead of
+ assuming indexed array
+
+ 8/21
+ ----
+support/xcase.c
+ - simple program to convert input from lower to uppercase and vice
+ versa. Now used by coproc test suite, since `tr -u' is not
+ portable.
+
+ 8/22
+ ----
+doc/bash.1
+ - fixed description of the bindable edit-and-execute commands to note
+ they check $VISUAL first, instead of $FCEDIT. Fixed bug reported
+ by
+
+[bash-4.0-alpha frozen]
+
+ 8/28
+ ----
+[bash-4.0-alpha released]
+
+ 9/1
+ ---
+builtins/evalstring.c
+ - fixed typo in parse_string (ostring used uninitialized). Bug
+ reported by Andreas Schwab <schwab@suse.de>
+
+subst.c
+ - fix return value of parameter_brace_expand to set the
+ W_HASQUOTEDNULL flag in the returned WORD_DESC * if the return value
+ from parameter_brace_remove_pattern is a quoted null string. Fixes
+ bug reported by Andreas Schwab <schwab@suse.de>
+ - set the W_HASQUOTEDNULL flag in the return value from
+ parameter_brace_expand if the return value from parameter_brace_patsub
+ is a quoted null string
+
+ 9/6
+ ---
+builtins/read.def
+ - change read -t 0 to return success if there is input available to be
+ read -- allows scripts to poll for input. Uses input_avail libsh
+ function
+
+ 9/9
+ ---
+externs.h
+ - fix extern fpurge declaration -- use HAVE_DECL_FPURGE instead of
+ NEED_FPURGE_DECL, since the former is set by `configure'
+
+jobs.h
+ - add extern declaration for close_pgrp_pipe
+ - add a new job state JNONE (-1) to the enum
+
+jobs.c
+ - include execute_cmd.h for extern declarations for coproc functions
+
+subst.c
+ - include builtins/builtext.h for extern declarations for functions
+ implementing builtins (e.g., declare_builtin)
+
+arrayfunc.c
+ - include "pathexp.h" for extern declaration for glob_char_p
+
+braces.c
+ - add extern declaration for `asprintf'
+
+lib/readline/rlprivate.h
+ - add extern declarations for _rl_trace, _rl_tropen
+
+lib/sh/zgetline.c
+ - add extern declarations for zread, zreadc
+
+lib/sh/mktime.c
+ - include "bashansi.h" for string function declarations
+
+builtins/common.h
+ - add extern declaration for parse_string
+
+trap.c
+ - include jobs.h for extern declaration for run_sigchld_trap
+
+general.c
+ - fix call to strtoimax in legal_number; if ep == string when function
+ returns, the number was not converted, even if errno is not set.
+ Fix from Paul Jarc <prj@case.edu>
+
+ 9/11
+ ----
+[prayers for the victims of 9/11/2001]
+
+builtins/return.def
+ - call no_options, as Posix requires. This also has the effect of
+ disallowing negative return values unless they're prefixed by `--'
+
+ 9/13
+ ----
+builtins/bind.def
+ - add an error message when bind is used without line editing active,
+ instead of just returning an error status
+
+variables.c
+ - make sure make_local_variable never creates visible variables with
+ a value, whether or not a variable with the same name existed in a
+ previous context. This is consistent with ksh93. Fix from
+ <neil@s-z.org>
+
+ 9/16
+ ----
+execute_cmd.c
+ - add call to CHECK_TERMSIG in shell_execve after the call to execve
+ returns. Recommended by Roman Rakus <rrakus@redhat.com>
+ - add QUIT check in execute_connection after executing first command
+ in a `&' connection
+
+ 9/22
+ ----
+execute_cmd.c
+ - new semaphore variable, executing_list, incremented every time a
+ list (command1;command2 or command1 || command2 or command1 &&
+ command2) is executed; used as sentinel for rest of shell
+
+sig.c,builtins/evalstring.c
+ - set executing_list to 0 when throwing execution back to top level;
+ make sure to unwind-protect it in appropriate places
+
+jobs.c
+ - if a pipeline is killed by SIGINT while executing a list (when
+ executing_list is non-zero), make sure the shell acts as if an
+ interrupt occurred. The behavior is dependent on the shell
+ compatibility level being > 32 (bash-4.0 and above)
+
+ 9/23
+ ----
+redir.c
+ - don't bother reporting an error with a file descriptor, even if
+ the errno is EBADF, if the redirection error (e.g., NOCLOBBER)
+ can't have anything to do with the fd. Fixes bug reported by
+ "David A. Harding" <dave@dtrt.org>, debian bug #499633.
+
+ 9/24
+ ----
+builtins/declare.def
+ - make `declare [option] var' (and the `typeset' equivalent) create
+ invisible variables, instead of assigning the null string to a
+ visible variable. Fixes bug reported by Bernd Eggink <monoped@sudrala.de>
+
+ 9/25
+ ----
+builtins/common.[ch]
+ - new function, builtin_warning(), like builtin_error but for warning
+ messages
+
+builtins/bind.def
+ - experimental: print a warning, but go on, if line editing not active
+ when bind is invoked. Suggested by Rocky Bernstein
+ <rocky.bernstein@gmail.com>
+
+ 10/3
+ ----
+test.c
+ - use same_file instead of directly comparing st_dev and st_ino when
+ comparing files in filecomp(). From mingw32 patches submitted
+ by Hector Chu <hkcc2@cantab.net>
+
+ 10/4
+ ----
+
+redir.c
+ - in redirection_error(), use `error' instead of errno when comparing
+ against EBADF. From mingw32 patches submitted by Hector Chu
+ <hkcc2@cantab.net>
+
+shell.c
+ - in unset_bash_input(), reset bash_input.type to st_none after
+ closing the default buffered fd. From mingw32 patches submitted
+ by Hector Chu <hkcc2@cantab.net>
+
+builtins/cd.def
+ - ignore CDPATH when in privileged mode. Suggested by Paul Jarc
+ <prj@po.cwru.edu>
+
+variables.c
+ - change sv_globignore to only act if privileged mode is not enabled.
+ Suggested by Paul Jarc <prj@po.cwru.edu>
+
+doc/bash.1,bashref.texi
+ - document new treatment of CDPATH and GLOBIGNORE when privileged
+ mode is enabled
+
+builtins/read.def
+ - change prompt printing to occur after terminal is set to no-echo
+ mode. Based on suggestion from Stephane Chazelas
+ <stephane_chazelas@yahoo.fr>
+
+lib/readline/signals.c
+ - new variables to keep track of special characters corresponding to
+ SIGINT, SIGQUIT, and SIGTSTP
+ - new variable to keep track of whether tty is echoing control
+ characters corresponding to SIGINT, SIGQUIT, and SIGTSTP
+ - new function, _rl_echo_signal_char(int sig) to display the tty
+ special char generating SIGINT, SIGQUIT, or SIGTSTP. Based on
+ idea and code from Joe Peterson <joe@skyrush.com>
+ - call rl_echo_signal_char in rl_signal_handler: if the terminal
+ settings indicate it, readline will echo characters that generate
+ keyboard signals
+
+lib/readline/rltty.c
+ - set _rl_intr_char, _rl_quit_char, and _rl_susp_char to special
+ characters that generate signals from keyboard
+ - set _rl_echoctl if ECHOCTL tty flag is set
+
+lib/readline/rlprivate.h
+ - extern declarations for _rl_intr_char, _rl_quit_char, and
+ _rl_susp_char
+ - extern declaration for _rl_echoctl
+
+lib/readline/readline.h
+ - extern declaration for rl_echo_signal_char()
+
+lib/readline/doc/rltech.texi
+ - document rl_echo_signal_handler(): available for applications
+ that install their own signal handlers
+
+ 10/5
+ ----
+execute_cmd.c
+ - fix errexit logic to not cause the shell to exit when a command in
+ a pipeline fails. Fixes bug reported by Marcin Owsiany
+ <marcin@owsiany.pl>
+
+ 10/14
+ -----
+builtins/evalstring.c
+ - don't short-circuit execution in parse_and_execute if we want to
+ run an exit trap. Fixes bug reported by Steffen Kiess
+ <s-kiess@web.de>
+
+ 10/18
+ -----
+parse.y
+ - fix error production to only call YYACCEPT if the shell is currently
+ interactive and not in parse_and_execute (so parser errors in
+ things like eval will correctly set $?). Fixes bug reported by
+ marco-oweber@gmx.de
+
+execute_cmd.c
+ - make sure variable name errors in execute_for_command and non-
+ identifier function names in execute_intern_function set the
+ return status to EX_BADUSAGE (2), not EX_USAGE (258)
+
+parser.h
+ - new parser state, PST_REPARSE
+
+parse.y
+ - turn PST_REPARSE on in parse_string_to_word_list
+ - in parse_matched_pair, if parsing a single-quoted string and
+ PST_REPARSE is set, don't requote CTLESC or CTLNUL. Fixes bug with
+ compound array assignment using $'\x7f' reported by Antonio Macchi
+ <antonio_macchi@alice.it>
+
+ 10/23
+ -----
+configure.in
+ - define LOCAL_LDFLAGS as `-z interpose' on Solaris 8, 9, and 10 to
+ allow the bash malloc to interpose the libc malloc when called by
+ library functions pre-bound to the libc malloc. Suggested by
+ Serge Dussud <Serge.Dussud@Sun.COM>
+
+ 10/26
+ -----
+doc/bash.1
+ - add single-sentence descriptions to rest of parameter expansions.
+ Suggested by Ken Irving <fnkci@uaf.edu>
+
+ 10/27
+ -----
+subst.c
+ - rearrange code in skip_to_delims to allow quote characters and other
+ shell expansion characters to be delimiters
+ - add new flags value for inverting search: skip to the next character
+ NOT in the set of delimiters passed as an argument
+
+subst.h
+ - define for new SD_INVERT flag value for skip_to_delims
+
+ 10/28
+ -----
+bashline.c
+ - new bindable functions: shell-forward-word and shell-backward-word.
+ Like forward-word and backward-word, but understand shell quoting
+ and use shell metacharacters and whitespace as delimiters.
+ Suggested by Andre Majorel <amajorel@teaser.fr>
+ - new bindable functions: shell-kill-word and shell-backward-kill-word.
+ Like kill-word and backward-kill-word, but understand shell quoting
+ and use shell metacharacters and whitespace as delimiters.
+ Suggested by Andre Majorel <amajorel@teaser.fr>
+
+doc/bash.1,lib/readline/doc/rluser.texi
+ - documented shell-forward-word and shell-backward-word
+ - documented shell-kill-word and shell-backward-kill-word
+
+ 11/1
+ ----
+redir.c
+ - add extra argument to add_undo_redirect: fdbase. FD used to save
+ a file descriptor must be > fdbase if fdbase >= SHELL_FD_BASE. A
+ value of -1 for fdbase means to just use SHELL_FD_BASE. Fixes bug
+ with 0<&10 reported by Clark Jian Wang <dearvoid@gmail.com>
+
+ 11/5
+ ----
+unwind_prot.c
+ - new function: have_unwind_protects(); returns 1 if unwind_protect_list
+ is not empty
+
+unwind_prot.h
+ - extern declaration for have_unwind_protects
+
+builtins/evalstring.c
+ - in parse_and_execute_cleanup, make sure that we don't call
+ run_unwind_frame and expect it to decrement parse_and_execute_level
+ if there's no unwind_protect_list, since there's a while loop in
+ throw_to_top_level that calls parse_and_execute_cleanup as long as
+ parse_and_execute_level is non-zero
+
+ 11/9
+ ----
+variables.c
+ - fix the assign function for COMP_WORDBREAKS to allocate new memory
+ to store as the variable's value, to avoid freeing memory twice
+ if the variable is unset after rl_completer_word_break_characters
+ is freed and reallocated. Fix from Mike Stroyan <mike@stroyan.net
+
+ 11/11
+ -----
+bashline.c
+ - new function to reset the value of rl_completer_word_break_characters
+ while honoring setting of `hostcomplete': reset_completer_word_break_chars.
+
+bashline.h
+ - new extern declaration for reset_completer_word_break_chars.
+
+variables.c
+ - call reset_completer_word_break_chars in sv_comp_wordbreaks when the
+ variable is unset
+
+[bash-4.0-beta frozen]
+
+ 11/16
+ -----
+subst.c
+ - call set_pipestatus_from_exit in exp_jump_to_top_level so that
+ failed expansions that set $? will set $PIPESTATUS. Fixes bug
+ reported by Eric Blake <ebb9@byu.net>
+
+ 11/20
+ -----
+general.c
+ - new 'file_exists(fn)' primitive; just calls stat(2)
+
+general.h
+ - new extern declaration for file_exists
+
+bashline.c
+ - add `~' to rl_filename_quote_characters so make_quoted_replacement
+ will call bash_quote_filename for words containing `~'. Then
+ bash_quote_filename can make choices based on that
+ - change quote_word_break_chars to backslash-quote the tilde in a
+ filename with a leading tilde that exists in the current directory,
+ since we want to inhibit tilde expansion in this case
+
+execute_cmd.c
+ - call file_isdir from shell_execve instead of stat(2) directly
+
+bashhist.c
+ - use file_exists and file_isdir primitives instead of calling stat
+
+ 11/21
+ -----
+redir.c
+ - When undoing saving of non-standard file descriptors (>=3) using
+ file descriptors >= SHELL_FD_BASE, we set the saving fd to be
+ close-on-exec and use a flag (RX_SAVCLEXEC) to decide how to set
+ close-on-exec when the fd is restored. Set flag in add_undo_redirect,
+ check in do_redirection_internal. Fixes problem reported by Andreas
+ Schwab <schwab@suse.de>
+
+ 11/26
+ -----
+subst.c
+ - fix param_expand to have expansions of $@ and $* exit the shell if
+ there are no positional parameters and `set -u' is enabled. Fixes
+ bug reported by Dan Jacobson <jidanni@jidanni.org>
+
+ 11/27
+ -----
+lib/readline/display.c
+ - fix update_line to not call space_to_eol if current cursor position
+ (_rl_last_c_pos) indicates that we're already at end of line.
+ Partial fix for bug reported by Mike Frysinger <vapier@gentoo.org>
+ - in update_line, don't call insert_some_chars if that will start
+ before the last invisible character in the prompt string and not
+ draw the entire prompt string. More of the partial fix for bug
+ reported by Mike Frysinger <vapier@gentoo.org>
+ - fix update_line to adjust _rl_last_c_pos by wrap_offset when adding
+ characters beginning before the last invisible character in the
+ prompt. New code is same as previously existed in a different code
+ path. Rest of fix for bug from Mike Frysinger <vapier@gentoo.org>
+ - fix assignment of newline breaks (inv_lbreaks) to correctly account
+ for prompts longer than two screen lines containing invisible
+ characters. The assumption is that part of the invisible characters
+ are on the first line (prompt_invis_chars_first_line) and the
+ remainder are on the last (wrap_offset - prompt_invis_chars_first_line).
+ Fix is in rl_redisplay. part of fix for bug reported by
+ "Wesley J. Landaker" <wjl@icecavern.net> in
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=265182
+ [TENTATIVE]
+ - fix _rl_move_cursor_relative to correctly offset `dpos' by `woff'
+ when there are invisible characters on lines after the second by
+ using (_rl_screenwidth*_rl_last_v_pos) when seeing whether or not
+ we just wrote some invisible characters. Rest of fix for bug
+ reported in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=265182
+ [TENTATIVE]
+
+ 12/11
+ -----
+sig.c
+ - reset the execution context before running the exit trap in
+ termsig_handler
+
+general.c
+ - set and unset terminate_immediately like interrupt_immediately in
+ bash_tilde_expand
+
+builtins/read.def
+ - change terminate_immediately to a counter instead of a flag, as
+ interrupt_immediately is used
+
+lib/readline/display.c
+ - slight change to fix from 11/27 to deal with prompts longer than a
+ screen line where the invisible characters all appear after the
+ line wrap. Fixes bug reported by Andreas Schwab <schwab@suse.de>
+
+builtins/{echo,printf}.def
+ - increment terminate_immediately at entry; decrement before returning.
+ Fix for bug reported by Ralf.Wildenhues@gmx.de
+
+ 12/16
+ -----
+subst.c
+ - fix off-by-one error in /dev/fd version of add_fifo_list; make
+ sure we add to totfds when it is == fd, not just when fd > totfds.
+ Fixes bug reported by marciso@gmail.com
+
+[bash-4.0-beta2 frozen]
+
+ 12/29
+ -----
+doc/{bash.1,bashref.texi}
+ - document more clearly that when not in Posix mode, command
+ substitution does not inherit the -e option. From bug report from
+ Freddy Vulto <fvulto@gmail.com>
+
+{execute_cmd,sig,builtins/evalstring}.c
+ - sentinel variable to keep track of whether or not we're supposed to
+ ignore the failure status of a command executed in a command
+ substitution even if the `-e' option is set: comsub_ignore_return
+ - increment and decrement comsub_ignore_return in execute_simple_command
+ before calling expand_words
+ - in parse_and_execute, if comsub_ignore_return is non-zero and the
+ SUBSHELL_COMSUB bit is set in subshell_environment, enable the
+ CMD_IGNORE_RETURN flag in every command executed from the passed
+ string. Fixes problem reported by Freddy Vulto <fvulto@gmail.com>
+ - make sure to reset comsub_ignore_return every time we throw to the
+ top level, like executing_list flag
+
+ 1/2/2009
+ --------
+parse.y
+ - fix to rewind_input_stream to handle case of $(...) command
+ substitution followed by a quoted literal newline. Report and fix
+ from Andreas Schwab <schwab@suse.de>
+
+ 1/7
+ ---
+
+subst.c
+ - fix match_wpattern and match_upattern to prefix a `*' to the
+ pattern even if it starts with a `*(' (if extglob is enabled)
+ before checking whether or not it can match anywhere in the
+ string. Fixes bug reported by os@sernet.de.
+
+[bash-4.0-rc1 frozen]
+
+ 1/9
+ ---
+locale.c
+ - since setlocale() doesn't set errno to anything meaningful,
+ don't include the strerror() result in the error message if
+ it fails
+ - make sure the error messages printed when setlocale fails are
+ localizable
+
+ 1/11
+ ----
+lib/readline/histexpand.c
+ - make sure that every time history_no_expand_chars is tested, we
+ also call the history_inhibit_expansion_function if it's set.
+ Fixes bug reported by Yang Zhang <yanghatespam@gmail.com>
+
+ 1/12
+ ----
+trap.c
+ - make sure to call parse_and_execute with the SEVAL_RESETLINE bit
+ set in the flags so it will reset the line number when running
+ the trap commands. Partial fix for bug reported by
+ peter360@fastmail.us
+
+ 1/14
+ ----
+builtins/reserved.def
+ - document `coproc' so it can be used with `help' builtin. Pointed
+ out by Pierre Gaston <pgas@freeshell.org>
+
+lib/sh/casemod.c
+ - added two new flags: CASE_UPFIRST and CASE_LOWFIRST to casemod
+ the first character of the passed string and pass the rest
+ through unchanged. Fixes bug reported by Jan Schampera
+ <jan.schampera@web.de>
+
+externs.h
+ - new defines for CASE_UPFIRST and CASE_LOWFIRST
+
+subst.c
+ - use CASE_UPFIRST for ^ and CASE_LOWFIRST for , casemod operators
+
+builtins/mapfile.def
+ - call zreset() before calling first zgetline(), to clean out any
+ remaining data in local buffer used by zreadc. Fixes bug
+ reported by Pierre Gaston <pierre.gaston@gmail.com>
+
+ 1/15
+ ----
+lib/sh/zread.c
+ - renamed zreadintr to zreadretry -- not perfect, but better
+ - new functions: zreadintr, which just calls read so it can be
+ interruptible, and zreadcintr, which is like zreadc but uses
+ zreadintr to fill the buffer
+
+lib/sh/zgetline.c
+ - in zgetline, when zread/zreadc return <= 0, make sure line is
+ non-null before assigning to line[nr]
+
+builtins/mapfile.def
+ - return an error right away if the supplied array variable name
+ refers to a readonly or noassign array
+ - set interrupt_immediately so calls to zgetline can be
+ interrupted. Fixes bug reported by Pierre Gaston
+ <pierre.gaston@gmail.com>
+ - if interactive, pass the SEVAL_INTERACT and SEVAL_NOHIST flags
+ to parse_and_execute when calling callbacks. Fixes bug reported
+ by Pierre Gaston <pierre.gaston@gmail.com>
+ - add `readarray' as a synonym for mapfile
+
+doc/{bash.1,bashref.texi}
+ - document behavior of mapfile builtin adding index of array element
+ to be assigned as additional argument to callback string. Reported
+ by Pierre Gaston <pierre.gaston@gmail.com>
+ - document readarray as synonym for mapfile
+
+builtins/common.c
+ - new error function, sh_ttyerror(set), prints an error message having
+ to do with setting or getting terminal attributes
+
+builtins/read.def
+ - print error message if read fails to set terminal attributes
+
+ 1/16
+ ----
+execute_cmd.c
+ - new function, coproc_reap, calls coproc_dispose if sh_coproc is
+ marked as COPROC_DEAD
+ - new function, cpl_reap, disposes coprocs marked as COPROC_DEAD
+ from coproc list
+ - change coproc_pidchk to just mark the coproc as dead instead of
+ calling coproc_dispose, so we don't call unsafe functions from
+ a signal handler. Fixes bug reported by Andreas Schwab
+ <schwab@suse.de>
+
+execute_cmd.h
+ - new extern declaration for coproc_reap
+
+command.h
+ - new flags for c_flags member of a struct coproc
+
+{jobs,nojobs}.c
+ - add call to coproc_reap in cleanup_dead_jobs, which will do the
+ right queueing or blocking of SIGCHLD
+
+trap.c
+ - modify change from 1/12 to not reset the line number when running
+ the DEBUG and RETURN traps
+
+ 1/18
+ ----
+lib/sh/casemod.c
+ - change default operations to work on entire passed string instead
+ of breaking into words at non-alpha-numerics. Use new
+ CASE_USEWORDS flag to enable by-word behavior. Fixes bug reported
+ by Jan Schampera <jan.schampera@web.de>
+
+builtins/printf.def
+ - in vbprintf, bracket each call to vsnprintf (which uses the args
+ passed to vbprintf) with SH_VA_START and va_end, so we can
+ reninitialize the argument list for each call. This is actually
+ what the C standard requires. Fixes bug that caused printf -b
+ to `ignore' first % format specifier if it came first in the
+ string. Reported by David Leverton <levertond@googlemail.com>
+
+builtins/mapfile.def
+ - start the line count at 1, since it doesn't get incremented before
+ (or after) reading the first line, so things like
+ `mapfile -n 5 -c 1 -C 'echo foo' array < file' work right and call
+ the callback after the first line is read. Fixes bug reported by
+ Pierre Gaston <pierre.gaston@gmail.com>
+
+ 1/22
+ ----
+lib/readline/complete.c
+ - set _rl_interrupt_immediately non-zero before reading from the file
+ system or calling an application-defined completion function
+
+lib/readline/signals.c
+ - renamed rl_signal_handler to _rl_handle_signal; new version of
+ rl_signal_handler that just calls _rl_handle_signal (for now)
+ - new function _rl_signal_handler that calls _rl_handle_signal without
+ any checking
+
+lib/readline/rlprivate.h
+ - new extern declaration for _rl_signal_handler
+ - new define, RL_CHECK_SIGNALS, checks whether or not _rl_caught_signal
+ is set and calls _rl_signal_handler if so
+
+lib/readline/{bind,input,readline}.c
+ - add RL_CHECK_SIGNALS in appropriate places
+
+lib/readline/signals.c
+ - change rl_signal_handler to set a flag and return rather than
+ run through the entire signal handling process. If
+ _rl_interrupt_immediately is set, call the signal handling code
+ right away instead of setting the flag. Initial fix for crash
+ bug reported by Roman Rakus <rrakus@redhat.com>
+
+aclocal.m4
+ - new macro, BASH_TYPE_SIG_ATOMIC_T, tests for sig_atomic_t in
+ <signal.h>, defines as int if not defined
+
+configure.in
+ - call BASH_TYPE_SIG_ATOMIC_T
+ - call AC_C_VOLATILE
+
+config.h.in
+ - empty define for sig_atomic_t
+ - empty define for volatile
+
+ 1/27
+ ----
+subst.c
+ - audit calls to add_character and change to add_ifs_character (which
+ quotes characters in $IFS). Affects primarily `:', `=', and `~'.
+ Fixes bug reported by Jan Schampera <jan.schampera@web.de>; fix
+ suggested by Stephane Chazelas <stephane_chazelas@yahoo.fr>
+
+ 2/1
+ ---
+configure.in
+ - call AC_C_RESTRICT
+
+config.h.in
+ - add empty defintion for `restrict'
+
+pcomplete.c
+ - use unwind_protects around call to execute_shell_function in
+ gen_shell_function_matches to prevent data corruption if
+ throw_to_top_level is called. Bug report and fix from
+ werner@suse.de.
+
+execute_cmd.c
+ - don't clamp CPU usage at 100% in print_formatted_time. Bug reported
+ by Linda Walsh <bash@tlinx.org>
+
+ 2/5
+ ---
+locale.c
+ - in set_locale_var, set errno to 0 before calling setlocale(), and
+ print strerror (errno) if setlocale fails and errno ends up non-zero
+
+ 2/6
+ ---
+configure.in
+ - backed out of solaris change from 10/23/2008 (adding `-z interpose'
+ to LDFLAGS) due to solaris updates to fix a linker problem.
+ Updatted by Serge Dussud <Serge.Dussud@Sun.COM>
+
+ 2/12
+ ----
+execute_cmd.c
+ - change execute_connection so failure of a pipeline will cause the
+ shell to exit if -e is on. From discussion on austin-group
+ mailing list
+ - change execute_command_internal so failure of a user-specified
+ subshell will cause the shell to exit if -e is on. From discussion
+ on austin-group mailing list
+
+ 2/13
+ ----
+doc/{bash.1,bashref.texi}
+ - clarified description of set -e option to accurately reflect current
+ implementation
+
+ 2/19
+ ----
+print_cmd.c
+ - fix print_deferred_heredocs to not print a space if the separator
+ string is null
+ - change print_deferred_heredocs to set `was_heredoc' after printing
+ something
+ - change connection printing code to only print the `;' separator
+ if we haven't just printed a here-document
+ - change connection printing code to print any deferred here
+ documents after the rhs of the connection. Fixes bug reported by
+ Bo Andresen <bo.andresen@zlin.dk>
+
+[bash-4.0 frozen]
tests/glob.right f
tests/heredoc.tests f
tests/heredoc.right f
+tests/heredoc1.sub f
tests/herestr.tests f
tests/herestr.right f
tests/histexp.tests f
append_history (history_lines_this_session, hf);
else
write_history (hf);
-
sv_histsize ("HISTFILESIZE");
}
}
A2) What's the latest version?
-The latest version is 4.0, first made available on XXX YYYYY, 2008.
+The latest version is 4.0, first made available on 20 February, 2009.
A3) Where can I get it?
or
.B until
keyword,
-part of the test in an
+part of the test following the
.B if
-statement, part of any command executed in a
+or
+.B elif
+reserved words, part of any command executed in a
.B &&
or
.B \(bv\(bv
%!PS-Adobe-3.0
%%Creator: groff version 1.19.2
-%%CreationDate: Tue Feb 10 10:57:01 2009
+%%CreationDate: Wed Feb 18 15:33:01 2009
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
%%+ font Courier
%%+ font Symbol
%%DocumentSuppliedResources: procset grops 1.19 2
-%%Pages: 68
+%%Pages: 69
%%PageOrder: Ascend
%%DocumentMedia: Default 595 842 0 () ()
%%Orientation: Portrait
2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E
(primary prompt.)184 571.2 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)
-.25 H(nly when job control is enabled.).15 E F1<ad65>144 583.2 Q F0
-1.694(Exit immediately if a)29.86 F F2 1.693(simple command)4.193 F F0
-(\(see)4.193 E F3 1.693(SHELL GRAMMAR)4.193 F F0(abo)3.943 E -.15(ve)
--.15 G 4.193(\)e).15 G 1.693(xits with a)-4.343 F .011(non-zero status.)
-184 595.2 R .011(The shell does not e)5.011 F .011
-(xit if the command that f)-.15 F .012(ails is part of the command)-.1 F
-.719(list immediately follo)184 607.2 R .719(wing a)-.25 F F1(while)
-3.219 E F0(or)3.219 E F1(until)3.219 E F0 -.1(ke)3.219 G(yw)-.05 E .719
-(ord, part of the test in an)-.1 F F1(if)3.218 E F0(statement,)3.218 E
-.378(part of a command e)184 619.2 R -.15(xe)-.15 G .379(cuted in a).15
-F F1(&&)2.879 E F0(or)2.879 E/F5 10/Symbol SF<efef>2.879 E F0 .379
-(list, an)2.879 F 2.879(yc)-.15 G .379(ommand in a pipeline b)-2.879 F
-.379(ut the last,)-.2 F .578(or if the command')184 631.2 R 3.078(sr)
--.55 G .578(eturn v)-3.078 F .578(alue is being in)-.25 F -.15(ve)-.4 G
-.578(rted via).15 F F1(!)3.078 E F0 5.578(.F)C .577
-(ailing simple commands that)-5.728 F .402(are part of shell functions \
-or command lists enclosed in braces or parentheses satisfying)184 643.2
-R .841(the abo)184 655.2 R 1.141 -.15(ve c)-.15 H .841
-(onditions do not cause the shell to e).15 F 3.341(xit. A)-.15 F .84
-(trap on)3.34 F F1(ERR)3.34 E F0 3.34(,i)C 3.34(fs)-3.34 G .84(et, is e)
--3.34 F -.15(xe)-.15 G(cuted).15 E(before the shell e)184 667.2 Q(xits.)
--.15 E F1<ad66>144 679.2 Q F0(Disable pathname e)30.97 E(xpansion.)-.15
-E F1<ad68>144 691.2 Q F0 2.238(Remember the location of commands as the)
-28.74 F 4.738(ya)-.15 G 2.239(re look)-4.738 F 2.239(ed up for e)-.1 F
--.15(xe)-.15 G 4.739(cution. This).15 F(is)4.739 E(enabled by def)184
-703.2 Q(ault.)-.1 E F1<ad6b>144 715.2 Q F0 .514(All ar)28.74 F .514
-(guments in the form of assignment statements are placed in the en)-.18
-F .513(vironment for a)-.4 F
-(command, not just those that precede the command name.)184 727.2 Q
-(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(59)190.95 E 0 Cg EP
+.511(Exit immediately if a)29.86 F F2(pipeline)3.011 E F0 .511
+(\(which may consist of a single)3.011 F F2 .51(simple command)3.01 F F0
+3.01(\), a)B F2(sub-)3.01 E(shell)184 595.2 Q F0 .872
+(command enclosed in parentheses, or one of the commands e)3.372 F -.15
+(xe)-.15 G .872(cuted as part of a).15 F .399
+(command list enclosed by braces \(see)184 607.2 R F3 .399
+(SHELL GRAMMAR)2.899 F F0(abo)2.649 E -.15(ve)-.15 G 2.899(\)e).15 G
+.399(xits with a non-zero)-3.049 F 3.968(status. The)184 619.2 R 1.468
+(shell does not e)3.968 F 1.468(xit if the command that f)-.15 F 1.468
+(ails is part of the command list)-.1 F .57(immediately follo)184 631.2
+R .57(wing a)-.25 F F1(while)3.07 E F0(or)3.07 E F1(until)3.07 E F0 -.1
+(ke)3.069 G(yw)-.05 E .569(ord, part of the test follo)-.1 F .569
+(wing the)-.25 F F1(if)3.069 E F0(or)3.069 E F1(elif)3.069 E F0(reserv)
+184 643.2 Q .544(ed w)-.15 F .544(ords, part of an)-.1 F 3.044(yc)-.15 G
+.544(ommand e)-3.044 F -.15(xe)-.15 G .544(cuted in a).15 F F1(&&)3.044
+E F0(or)3.044 E/F5 10/Symbol SF<efef>3.044 E F0 .544(list e)3.044 F .544
+(xcept the command)-.15 F(follo)184 655.2 Q 1.231(wing the \214nal)-.25
+F F1(&&)3.731 E F0(or)3.731 E F5<efef>3.731 E F0 3.731(,a)C 1.531 -.15
+(ny c)-3.731 H 1.231(ommand in a pipeline b).15 F 1.23
+(ut the last, or if the com-)-.2 F(mand')184 667.2 Q 3.19(sr)-.55 G .69
+(eturn v)-3.19 F .69(alue is being in)-.25 F -.15(ve)-.4 G .69
+(rted with).15 F F1(!)3.191 E F0 5.691(.A)C .691(trap on)-2.5 F F1(ERR)
+3.191 E F0 3.191(,i)C 3.191(fs)-3.191 G .691(et, is e)-3.191 F -.15(xe)
+-.15 G .691(cuted before).15 F .687(the shell e)184 679.2 R 3.186
+(xits. This)-.15 F .686(option applies to the shell en)3.186 F .686
+(vironment and each subshell en)-.4 F(viron-)-.4 E .658
+(ment separately \(see)184 691.2 R F1 .659(COMMAND EXECUTION ENVIR)3.159
+F(ONMENT)-.3 E F0(abo)3.159 E -.15(ve)-.15 G .659(\), and may).15 F
+(cause subshells to e)184 703.2 Q(xit before e)-.15 E -.15(xe)-.15 G
+(cuting all the commands in the subshell.).15 E F1<ad66>144 715.2 Q F0
+(Disable pathname e)30.97 E(xpansion.)-.15 E(GNU Bash-4.0)72 768 Q
+(2009 February 7)140.96 E(59)190.95 E 0 Cg EP
%%Page: 60 60
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF<ad6d>144 84 Q F0 .148(Monitor mode.)25.97 F
-.148(Job control is enabled.)5.148 F .149(This option is on by def)5.148
-F .149(ault for interacti)-.1 F .449 -.15(ve s)-.25 H(hells).15 E .637
-(on systems that support it \(see)184 96 R/F2 9/Times-Bold@0 SF .636
+-.35 E/F1 10/Times-Bold@0 SF<ad68>144 84 Q F0 2.239
+(Remember the location of commands as the)28.74 F 4.738(ya)-.15 G 2.238
+(re look)-4.738 F 2.238(ed up for e)-.1 F -.15(xe)-.15 G 4.738
+(cution. This).15 F(is)4.738 E(enabled by def)184 96 Q(ault.)-.1 E F1
+<ad6b>144 108 Q F0 .513(All ar)28.74 F .514
+(guments in the form of assignment statements are placed in the en)-.18
+F .514(vironment for a)-.4 F
+(command, not just those that precede the command name.)184 120 Q F1
+<ad6d>144 132 Q F0 .149(Monitor mode.)25.97 F .149
+(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
+.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .636
+(on systems that support it \(see)184 144 R/F2 9/Times-Bold@0 SF .636
(JOB CONTR)3.136 F(OL)-.27 E F0(abo)2.886 E -.15(ve)-.15 G 3.136
-(\). Background).15 F .636(processes run in a)3.136 F .641
-(separate process group and a line containing their e)184 108 R .642
-(xit status is printed upon their com-)-.15 F(pletion.)184 120 Q F1
-<ad6e>144 132 Q F0 .653(Read commands b)28.74 F .653(ut do not e)-.2 F
--.15(xe)-.15 G .653(cute them.).15 F .652
-(This may be used to check a shell script for)5.653 F(syntax errors.)184
-144 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
-F1<ad6f>144 156 Q/F3 10/Times-Italic@0 SF(option\255name)2.5 E F0(The)
-184 168 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5 E
-(wing:)-.25 E F1(allexport)184 180 Q F0(Same as)224 192 Q F1<ad61>2.5 E
-F0(.)A F1(braceexpand)184 204 Q F0(Same as)224 216 Q F1<ad42>2.5 E F0(.)
-A F1(emacs)184 228 Q F0 .089
+(\). Background).15 F .637(processes run in a)3.136 F .642
+(separate process group and a line containing their e)184 156 R .641
+(xit status is printed upon their com-)-.15 F(pletion.)184 168 Q F1
+<ad6e>144 180 Q F0 .652(Read commands b)28.74 F .652(ut do not e)-.2 F
+-.15(xe)-.15 G .652(cute them.).15 F .653
+(This may be used to check a shell script for)5.652 F(syntax errors.)184
+192 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15 E
+F1<ad6f>144 204 Q/F3 10/Times-Italic@0 SF(option\255name)2.5 E F0(The)
+184 216 Q F3(option\255name)2.5 E F0(can be one of the follo)2.5 E
+(wing:)-.25 E F1(allexport)184 228 Q F0(Same as)224 240 Q F1<ad61>2.5 E
+F0(.)A F1(braceexpand)184 252 Q F0(Same as)224 264 Q F1<ad42>2.5 E F0(.)
+A F1(emacs)184 276 Q F0 .089
(Use an emacs-style command line editing interf)13.9 F 2.589(ace. This)
-.1 F .089(is enabled by def)2.589 F(ault)-.1 E .95
-(when the shell is interacti)224 240 R -.15(ve)-.25 G 3.45(,u).15 G .95
+(when the shell is interacti)224 288 R -.15(ve)-.25 G 3.45(,u).15 G .95
(nless the shell is started with the)-3.45 F F1(\255\255noediting)3.45 E
-F0 2.5(option. This)224 252 R(also af)2.5 E(fects the editing interf)
+F0 2.5(option. This)224 300 R(also af)2.5 E(fects the editing interf)
-.25 E(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1
-(errtrace)184 264 Q F0(Same as)5.03 E F1<ad45>2.5 E F0(.)A F1(functrace)
-184 276 Q F0(Same as)224 288 Q F1<ad54>2.5 E F0(.)A F1(err)184 300 Q
-(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5 E F0(.)A F1(hashall)184 312
-Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1(histexpand)184 324 Q F0
-(Same as)224 336 Q F1<ad48>2.5 E F0(.)A F1(history)184 348 Q F0 .586
+(errtrace)184 312 Q F0(Same as)5.03 E F1<ad45>2.5 E F0(.)A F1(functrace)
+184 324 Q F0(Same as)224 336 Q F1<ad54>2.5 E F0(.)A F1(err)184 348 Q
+(exit)-.18 E F0(Same as)11.31 E F1<ad65>2.5 E F0(.)A F1(hashall)184 360
+Q F0(Same as)9.43 E F1<ad68>2.5 E F0(.)A F1(histexpand)184 372 Q F0
+(Same as)224 384 Q F1<ad48>2.5 E F0(.)A F1(history)184 396 Q F0 .587
(Enable command history)10 F 3.087(,a)-.65 G 3.087(sd)-3.087 G .587
(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder).15 E F2(HIST)3.087 E
(OR)-.162 E(Y)-.315 E/F4 9/Times-Roman@0 SF(.)A F0 .587(This option is)
-5.087 F(on by def)224 360 Q(ault in interacti)-.1 E .3 -.15(ve s)-.25 H
-(hells.).15 E F1(ignor)184 372 Q(eeof)-.18 E F0 1.657(The ef)224 384 R
-1.657(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF
-(IGNOREEOF=10)4.156 E F0 1.656(had been e)4.156 F -.15(xe)-.15 G(cuted)
-.15 E(\(see)224 396 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15
-(ve)-.15 G(\).).15 E F1 -.1(ke)184 408 S(yw).1 E(ord)-.1 E F0(Same as)
-224 420 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 432 Q F0(Same as)5.56 E F1
-<ad6d>2.5 E F0(.)A F1(noclob)184 444 Q(ber)-.1 E F0(Same as)224 456 Q F1
-<ad43>2.5 E F0(.)A F1(noexec)184 468 Q F0(Same as)11.12 E F1<ad6e>2.5 E
-F0(.)A F1(noglob)184 480 Q F0(Same as)11.1 E F1<ad66>2.5 E F0(.)A F1
-(nolog)184 492 Q F0(Currently ignored.)16.66 E F1(notify)184 504 Q F0
-(Same as)15 E F1<ad62>2.5 E F0(.)A F1(nounset)184 516 Q F0(Same as)6.66
-E F1<ad75>2.5 E F0(.)A F1(onecmd)184 528 Q F0(Same as)6.67 E F1<ad74>2.5
-E F0(.)A F1(ph)184 540 Q(ysical)-.15 E F0(Same as)5.14 E F1<ad50>2.5 E
-F0(.)A F1(pipefail)184 552 Q F0 1.029(If set, the return v)7.77 F 1.029
-(alue of a pipeline is the v)-.25 F 1.03
-(alue of the last \(rightmost\) com-)-.25 F 1.137(mand to e)224 564 R
+5.087 F(on by def)224 408 Q(ault in interacti)-.1 E .3 -.15(ve s)-.25 H
+(hells.).15 E F1(ignor)184 420 Q(eeof)-.18 E F0 1.656(The ef)224 432 R
+1.656(fect is as if the shell command)-.25 F/F5 10/Courier@0 SF
+(IGNOREEOF=10)4.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted)
+.15 E(\(see)224 444 Q F1(Shell V)2.5 E(ariables)-.92 E F0(abo)2.5 E -.15
+(ve)-.15 G(\).).15 E F1 -.1(ke)184 456 S(yw).1 E(ord)-.1 E F0(Same as)
+224 468 Q F1<ad6b>2.5 E F0(.)A F1(monitor)184 480 Q F0(Same as)5.56 E F1
+<ad6d>2.5 E F0(.)A F1(noclob)184 492 Q(ber)-.1 E F0(Same as)224 504 Q F1
+<ad43>2.5 E F0(.)A F1(noexec)184 516 Q F0(Same as)11.12 E F1<ad6e>2.5 E
+F0(.)A F1(noglob)184 528 Q F0(Same as)11.1 E F1<ad66>2.5 E F0(.)A F1
+(nolog)184 540 Q F0(Currently ignored.)16.66 E F1(notify)184 552 Q F0
+(Same as)15 E F1<ad62>2.5 E F0(.)A F1(nounset)184 564 Q F0(Same as)6.66
+E F1<ad75>2.5 E F0(.)A F1(onecmd)184 576 Q F0(Same as)6.67 E F1<ad74>2.5
+E F0(.)A F1(ph)184 588 Q(ysical)-.15 E F0(Same as)5.14 E F1<ad50>2.5 E
+F0(.)A F1(pipefail)184 600 Q F0 1.03(If set, the return v)7.77 F 1.029
+(alue of a pipeline is the v)-.25 F 1.029
+(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 612 R
1.136
(xit with a non-zero status, or zero if all commands in the pipeline)
--.15 F -.15(ex)224 576 S(it successfully).15 E 5(.T)-.65 G
-(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 588 Q F0
-2.09(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
+-.15 F -.15(ex)224 624 S(it successfully).15 E 5(.T)-.65 G
+(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 636 Q F0
+2.091(Change the beha)17.77 F 2.091(vior of)-.2 F F1(bash)4.591 E F0
2.091(where the def)4.591 F 2.091(ault operation dif)-.1 F 2.091
-(fers from the)-.25 F(POSIX standard to match the standard \()224 600 Q
-F3(posix mode)A F0(\).)A F1(pri)184 612 Q(vileged)-.1 E F0(Same as)224
-624 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 636 S(rbose).1 E F0(Same as)
-7.33 E F1<ad76>2.5 E F0(.)A F1(vi)184 648 Q F0 1.466
-(Use a vi-style command line editing interf)32.22 F 3.965(ace. This)-.1
-F 1.465(also af)3.965 F 1.465(fects the editing)-.25 F(interf)224 660 Q
-(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(xtrace)184
-672 Q F0(Same as)13.35 E F1<ad78>2.5 E F0(.)A(If)184 690 Q F1<ad6f>3.052
-E F0 .552(is supplied with no)3.052 F F3(option\255name)3.053 E F0 3.053
-(,t)C .553(he v)-3.053 F .553(alues of the current options are printed.)
--.25 F(If)5.553 E F1(+o)184 702 Q F0 1.072(is supplied with no)3.572 F
-F3(option\255name)3.572 E F0 3.572(,a)C 1.071(series of)-.001 F F1(set)
-3.571 E F0 1.071(commands to recreate the current)3.571 F
-(option settings is displayed on the standard output.)184 714 Q
-(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(60)190.95 E 0 Cg EP
+(fers from the)-.25 F(POSIX standard to match the standard \()224 648 Q
+F3(posix mode)A F0(\).)A F1(pri)184 660 Q(vileged)-.1 E F0(Same as)224
+672 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 684 S(rbose).1 E F0(Same as)
+7.33 E F1<ad76>2.5 E F0(.)A F1(vi)184 696 Q F0 1.465
+(Use a vi-style command line editing interf)32.22 F 3.966(ace. This)-.1
+F 1.466(also af)3.966 F 1.466(fects the editing)-.25 F(interf)224 708 Q
+(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A(GNU Bash-4.0)
+72 768 Q(2009 February 7)140.96 E(60)190.95 E 0 Cg EP
%%Page: 61 61
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF<ad70>144 84 Q F0 -.45(Tu)28.74 G 1.071
-(rn on).45 F/F2 10/Times-Italic@0 SF(privile)4.821 E -.1(ge)-.4 G(d).1 E
-F0 3.572(mode. In)4.341 F 1.072(this mode, the)3.572 F/F3 9/Times-Bold@0
-SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.072
-(\214les are not pro-)3.322 F 1.501
-(cessed, shell functions are not inherited from the en)184 96 R 1.5
-(vironment, and the)-.4 F F3(SHELLOPTS)4 E/F4 9/Times-Roman@0 SF(,)A F1
-(CDP)184 108 Q -.95(AT)-.74 G(H).95 E F0 5.603(,a)C(nd)-5.603 E F1
+-.35 E/F1 10/Times-Bold@0 SF(xtrace)184 84 Q F0(Same as)13.35 E F1<ad78>
+2.5 E F0(.)A(If)184 102 Q F1<ad6f>3.053 E F0 .553(is supplied with no)
+3.053 F/F2 10/Times-Italic@0 SF(option\255name)3.053 E F0 3.053(,t)C
+.553(he v)-3.053 F .552(alues of the current options are printed.)-.25 F
+(If)5.552 E F1(+o)184 114 Q F0 1.071(is supplied with no)3.571 F F2
+(option\255name)3.571 E F0 3.571(,as)C 1.071(eries of)-3.571 F F1(set)
+3.572 E F0 1.072(commands to recreate the current)3.572 F
+(option settings is displayed on the standard output.)184 126 Q F1<ad70>
+144 138 Q F0 -.45(Tu)28.74 G 1.072(rn on).45 F F2(privile)4.822 E -.1
+(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
+/F3 9/Times-Bold@0 SF($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)
+-.27 E F0 1.071(\214les are not pro-)3.322 F 1.5
+(cessed, shell functions are not inherited from the en)184 150 R 1.501
+(vironment, and the)-.4 F F3(SHELLOPTS)4.001 E/F4 9/Times-Roman@0 SF(,)A
+F1(CDP)184 162 Q -.95(AT)-.74 G(H).95 E F0 5.603(,a)C(nd)-5.603 E F1
(GLOBIGNORE)5.603 E F0 -.25(va)5.603 G 3.103(riables, if the).25 F 5.603
(ya)-.15 G 3.103(ppear in the en)-5.603 F 3.103(vironment, are)-.4 F
-2.618(ignored. If)184 120 R .118(the shell is started with the ef)2.618
-F(fecti)-.25 E .418 -.15(ve u)-.25 H .117
+2.617(ignored. If)184 174 R .117(the shell is started with the ef)2.617
+F(fecti)-.25 E .418 -.15(ve u)-.25 H .118
(ser \(group\) id not equal to the real user).15 F 1.018
-(\(group\) id, and the)184 132 R F1<ad70>3.518 E F0 1.018
+(\(group\) id, and the)184 186 R F1<ad70>3.518 E F0 1.018
(option is not supplied, these actions are tak)3.518 F 1.018
-(en and the ef)-.1 F(fecti)-.25 E -.15(ve)-.25 G .287
-(user id is set to the real user id.)184 144 R .286(If the)5.286 F F1
-<ad70>2.786 E F0 .286(option is supplied at startup, the ef)2.786 F
-(fecti)-.25 E .586 -.15(ve u)-.25 H(ser).15 E .102(id is not reset.)184
-156 R -.45(Tu)5.102 G .102(rning this option of).45 F 2.602(fc)-.25 G
-.102(auses the ef)-2.602 F(fecti)-.25 E .402 -.15(ve u)-.25 H .103
+(en and the ef)-.1 F(fecti)-.25 E -.15(ve)-.25 G .286
+(user id is set to the real user id.)184 198 R .286(If the)5.286 F F1
+<ad70>2.786 E F0 .287(option is supplied at startup, the ef)2.786 F
+(fecti)-.25 E .587 -.15(ve u)-.25 H(ser).15 E .103(id is not reset.)184
+210 R -.45(Tu)5.103 G .102(rning this option of).45 F 2.602(fc)-.25 G
+.102(auses the ef)-2.602 F(fecti)-.25 E .402 -.15(ve u)-.25 H .102
(ser and group ids to be set to).15 F(the real user and group ids.)184
-168 Q F1<ad74>144 180 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15
-G(cuting one command.).15 E F1<ad75>144 192 Q F0 -.35(Tr)28.74 G .445
+222 Q F1<ad74>144 234 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15
+G(cuting one command.).15 E F1<ad75>144 246 Q F0 -.35(Tr)28.74 G .444
(eat unset v).35 F .444
(ariables as an error when performing parameter e)-.25 F 2.944
-(xpansion. If)-.15 F -.15(ex)2.944 G .444(pansion is).15 F .519
-(attempted on an unset v)184 204 R .519
+(xpansion. If)-.15 F -.15(ex)2.945 G .445(pansion is).15 F .52
+(attempted on an unset v)184 258 R .519
(ariable, the shell prints an error message, and, if not interacti)-.25
-F -.15(ve)-.25 G(,).15 E -.15(ex)184 216 S(its with a non-zero status.)
-.15 E F1<ad76>144 228 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
--.15 G(re read.)-2.5 E F1<ad78>144 240 Q F0 .315(After e)29.3 F .315
+F -.15(ve)-.25 G(,).15 E -.15(ex)184 270 S(its with a non-zero status.)
+.15 E F1<ad76>144 282 Q F0(Print shell input lines as the)29.3 E 2.5(ya)
+-.15 G(re read.)-2.5 E F1<ad78>144 294 Q F0 .315(After e)29.3 F .315
(xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25(fo)
2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)2.815 E
-F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184 252 R F1
+F1(select)2.815 E F0(command,)2.815 E 1.236(or arithmetic)184 306 R F1
-.25(fo)3.736 G(r).25 E F0 1.236(command, display the e)3.736 F 1.236
(xpanded v)-.15 F 1.236(alue of)-.25 F F3(PS4)3.736 E F4(,)A F0(follo)
-3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 264 Q
+3.486 E 1.236(wed by the com-)-.25 F(mand and its e)184 318 Q
(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1
-<ad42>144 276 Q F0 2.579(The shell performs brace e)27.63 F 2.578
+<ad42>144 330 Q F0 2.578(The shell performs brace e)27.63 F 2.578
(xpansion \(see)-.15 F F1 2.578(Brace Expansion)5.078 F F0(abo)5.078 E
--.15(ve)-.15 G 5.078(\). This).15 F 2.578(is on by)5.078 F(def)184 288 Q
-(ault.)-.1 E F1<ad43>144 300 Q F0 .213(If set,)27.08 F F1(bash)2.713 E
-F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
+-.15(ve)-.15 G 5.079(\). This).15 F 2.579(is on by)5.079 F(def)184 342 Q
+(ault.)-.1 E F1<ad43>144 354 Q F0 .214(If set,)27.08 F F1(bash)2.714 E
+F0 .214(does not o)2.714 F -.15(ve)-.15 G .214(rwrite an e).15 F .214
(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
-2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
-3.054(tors. This)184 312 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+2.713(,a)C(nd)-2.713 E F1(<>)2.713 E F0 .213(redirection opera-)2.713 F
+3.053(tors. This)184 366 R .553(may be o)3.053 F -.15(ve)-.15 G .553
(rridden when creating output \214les by using the redirection opera-)
-.15 F(tor)184 324 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
-<ad45>144 336 Q F0 .103(If set, an)27.63 F 2.603(yt)-.15 G .103(rap on)
--2.603 F F1(ERR)2.603 E F0 .104
-(is inherited by shell functions, command substitutions, and com-)2.603
-F .839(mands e)184 348 R -.15(xe)-.15 G .839(cuted in a subshell en).15
-F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
-(trap is normally not inherited in)3.338 F(such cases.)184 360 Q F1
-<ad48>144 372 Q F0(Enable)26.52 E F1(!)3.031 E F0 .531
-(style history substitution.)5.531 F .531(This option is on by def)5.531
-F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 384 Q -.15
-(ve)-.25 G(.).15 E F1<ad50>144 396 Q F0 1.165
+.15 F(tor)184 378 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
+<ad45>144 390 Q F0 .104(If set, an)27.63 F 2.604(yt)-.15 G .104(rap on)
+-2.604 F F1(ERR)2.604 E F0 .103
+(is inherited by shell functions, command substitutions, and com-)2.604
+F .838(mands e)184 402 R -.15(xe)-.15 G .838(cuted in a subshell en).15
+F 3.338(vironment. The)-.4 F F1(ERR)3.338 E F0 .839
+(trap is normally not inherited in)3.339 F(such cases.)184 414 Q F1
+<ad48>144 426 Q F0(Enable)26.52 E F1(!)3.032 E F0 .532
+(style history substitution.)5.532 F .531(This option is on by def)5.532
+F .531(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 438 Q -.15
+(ve)-.25 G(.).15 E F1<ad50>144 450 Q F0 1.164
(If set, the shell does not follo)28.19 F 3.664(ws)-.25 G 1.164
-(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.164
-(cuting commands such as).15 F F1(cd)3.664 E F0 2.821
-(that change the current w)184 408 R 2.822(orking directory)-.1 F 7.822
-(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.822
-(ysical directory structure)-.05 F 2.686(instead. By)184 420 R(def)2.686
+(ymbolic links when e)-3.664 F -.15(xe)-.15 G 1.165
+(cuting commands such as).15 F F1(cd)3.665 E F0 2.822
+(that change the current w)184 462 R 2.822(orking directory)-.1 F 7.822
+(.I)-.65 G 5.322(tu)-7.822 G 2.822(ses the ph)-5.322 F 2.821
+(ysical directory structure)-.05 F 2.685(instead. By)184 474 R(def)2.685
E(ault,)-.1 E F1(bash)2.686 E F0(follo)2.686 E .186
(ws the logical chain of directories when performing com-)-.25 F
-(mands which change the current directory)184 432 Q(.)-.65 E F1<ad54>144
-444 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(mands which change the current directory)184 486 Q(.)-.65 E F1<ad54>144
+498 Q F0 .89(If set, an)27.63 F 3.39(yt)-.15 G .89(raps on)-3.39 F F1
(DEB)3.39 E(UG)-.1 E F0(and)3.39 E F1(RETURN)3.39 E F0 .89
(are inherited by shell functions, command)3.39 F 1.932
-(substitutions, and commands e)184 456 R -.15(xe)-.15 G 1.932
+(substitutions, and commands e)184 510 R -.15(xe)-.15 G 1.932
(cuted in a subshell en).15 F 4.432(vironment. The)-.4 F F1(DEB)4.432 E
-(UG)-.1 E F0(and)4.432 E F1(RETURN)184 468 Q F0
-(traps are normally not inherited in such cases.)2.5 E F1<adad>144 480 Q
-F0 .4(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401
+(UG)-.1 E F0(and)4.432 E F1(RETURN)184 522 Q F0
+(traps are normally not inherited in such cases.)2.5 E F1<adad>144 534 Q
+F0 .401(If no ar)28.6 F .401(guments follo)-.18 F 2.901(wt)-.25 G .401
(his option, then the positional parameters are unset.)-2.901 F
-(Otherwise,)5.401 E(the positional parameters are set to the)184 492 Q
-F2(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G
+(Otherwise,)5.4 E(the positional parameters are set to the)184 546 Q F2
+(ar)2.5 E(g)-.37 E F0(s, e)A -.15(ve)-.25 G 2.5(ni).15 G 2.5(fs)-2.5 G
(ome of them be)-2.5 E(gin with a)-.15 E F1<ad>2.5 E F0(.)A F1<ad>144
-504 Q F0 1.945(Signal the end of options, cause all remaining)34.3 F F2
-(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.444(ea)-4.444 G
-1.944(ssigned to the positional)-4.444 F 3.445(parameters. The)184 516 R
-F1<ad78>3.445 E F0(and)3.445 E F1<ad76>3.445 E F0 .945
-(options are turned of)3.445 F 3.445(f. If)-.25 F .946(there are no)
-3.445 F F2(ar)3.446 E(g)-.37 E F0 .946(s, the positional)B
-(parameters remain unchanged.)184 528 Q .425(The options are of)144
-544.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
+558 Q F0 1.944(Signal the end of options, cause all remaining)34.3 F F2
+(ar)4.444 E(g)-.37 E F0 4.444(st)C 4.444(ob)-4.444 G 4.445(ea)-4.444 G
+1.945(ssigned to the positional)-4.445 F 3.446(parameters. The)184 570 R
+F1<ad78>3.446 E F0(and)3.446 E F1<ad76>3.446 E F0 .945
+(options are turned of)3.446 F 3.445(f. If)-.25 F .945(there are no)
+3.445 F F2(ar)3.445 E(g)-.37 E F0 .945(s, the positional)B
+(parameters remain unchanged.)184 582 Q .425(The options are of)144
+598.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)-2.925 E .425
(ault unless otherwise noted.)-.1 F .425
-(Using + rather than \255 causes these options)5.425 F .177
-(to be turned of)144 556.8 R 2.677(f. The)-.25 F .178
+(Using + rather than \255 causes these options)5.425 F .178
+(to be turned of)144 610.8 R 2.678(f. The)-.25 F .178
(options can also be speci\214ed as ar)2.678 F .178(guments to an in)
--.18 F -.2(vo)-.4 G .178(cation of the shell.).2 F(The)5.178 E .066
-(current set of options may be found in)144 568.8 R F1<24ad>2.566 E F0
+-.18 F -.2(vo)-.4 G .177(cation of the shell.).2 F(The)5.177 E .066
+(current set of options may be found in)144 622.8 R F1<24ad>2.566 E F0
5.066(.T)C .066(he return status is al)-5.066 F -.1(wa)-.1 G .066
-(ys true unless an in).1 F -.25(va)-.4 G .066(lid option).25 F
-(is encountered.)144 580.8 Q F1(shift)108 597.6 Q F0([)2.5 E F2(n)A F0
-(])A .428(The positional parameters from)144 609.6 R F2(n)2.928 E F0
-.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
-.429(rameters represented by the num-).15 F(bers)144 621.6 Q F1($#)2.583
-E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
-(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
--.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
-.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
-(is 0, no parameters are changed.)144 633.6 R(If)5.06 E F2(n)2.92 E F0
+(ys true unless an in).1 F -.25(va)-.4 G .067(lid option).25 F
+(is encountered.)144 634.8 Q F1(shift)108 651.6 Q F0([)2.5 E F2(n)A F0
+(])A .429(The positional parameters from)144 663.6 R F2(n)2.929 E F0
+.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.428 G
+.428(rameters represented by the num-).15 F(bers)144 675.6 Q F1($#)2.582
+E F0(do)2.582 E .082(wn to)-.25 F F1($#)2.582 E F0<ad>A F2(n)A F0 .082
+(+1 are unset.)B F2(n)5.442 E F0 .082(must be a non-ne)2.822 F -.05(ga)
+-.15 G(ti).05 E .383 -.15(ve n)-.25 H .083(umber less than or equal to)
+.15 F F1($#)2.583 E F0 5.083(.I)C(f)-5.083 E F2(n)2.943 E F0 .06
+(is 0, no parameters are changed.)144 687.6 R(If)5.06 E F2(n)2.92 E F0
.06(is not gi)2.8 F -.15(ve)-.25 G .06(n, it is assumed to be 1.).15 F
(If)5.06 E F2(n)2.92 E F0 .06(is greater than)2.8 F F1($#)2.56 E F0 2.56
-(,t)C(he)-2.56 E .144(positional parameters are not changed.)144 645.6 R
-.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
-.143(is greater than)2.883 F F1($#)2.643 E F0
-(or less than zero; otherwise 0.)144 657.6 Q F1(shopt)108 674.4 Q F0([)
-2.5 E F1(\255pqsu)A F0 2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C F2(optname)
--2.5 E F0(...])2.5 E -.8(To)144 686.4 S .222(ggle the v).8 F .222
-(alues of v)-.25 F .222(ariables controlling optional shell beha)-.25 F
-(vior)-.2 E 5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1
-<ad70>2.722 E F0 .721(option, a list of all settable options is display\
-ed, with an indication of whether or not each is set.)144 698.4 R(The)
-144 710.4 Q F1<ad70>2.827 E F0 .327(option causes output to be displaye\
-d in a form that may be reused as input.)2.827 F .328(Other options)
-5.328 F(ha)144 722.4 Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)
--.25 E(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(61)190.95 E 0 Cg
-EP
+(,t)C(he)-2.56 E .143(positional parameters are not changed.)144 699.6 R
+.144(The return status is greater than zero if)5.143 F F2(n)3.004 E F0
+.144(is greater than)2.884 F F1($#)2.644 E F0
+(or less than zero; otherwise 0.)144 711.6 Q(GNU Bash-4.0)72 768 Q
+(2009 February 7)140.96 E(61)190.95 E 0 Cg EP
%%Page: 62 62
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF<ad73>144 84 Q F0(Enable \(set\) each)26.41
-E/F2 10/Times-Italic@0 SF(optname)2.5 E F0(.)A F1<ad75>144 96 Q F0
-(Disable \(unset\) each)24.74 E F2(optname)2.5 E F0(.)A F1<ad71>144 108
-Q F0 .003(Suppresses normal output \(quiet mode\); the return status in\
-dicates whether the)24.74 F F2(optname)2.503 E F0(is)2.503 E .255
-(set or unset.)180 120 R .255(If multiple)5.255 F F2(optname)2.755 E F0
-(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
-(ith)-2.756 E F1<ad71>2.756 E F0 2.756(,t)C .256
-(he return status is zero if)-2.756 F(all)180 132 Q F2(optnames)2.5 E F0
-(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 144 Q F0
+-.35 E/F1 10/Times-Bold@0 SF(shopt)108 84 Q F0([)2.5 E F1(\255pqsu)A F0
+2.5(][)C F1<ad6f>-2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(optname)-2.5
+E F0(...])2.5 E -.8(To)144 96 S .222(ggle the v).8 F .222(alues of v)
+-.25 F .222(ariables controlling optional shell beha)-.25 F(vior)-.2 E
+5.222(.W)-.55 G .222(ith no options, or with the)-5.622 F F1<ad70>2.722
+E F0 .721(option, a list of all settable options is displayed, with an \
+indication of whether or not each is set.)144 108 R(The)144 120 Q F1
+<ad70>2.828 E F0 .327(option causes output to be displayed in a form th\
+at may be reused as input.)2.828 F .327(Other options)5.327 F(ha)144 132
+Q .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad73>144
+144 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5 E F0(.)A F1<ad75>144
+156 Q F0(Disable \(unset\) each)24.74 E F2(optname)2.5 E F0(.)A F1<ad71>
+144 168 Q F0 .003(Suppresses normal output \(quiet mode\); the return s\
+tatus indicates whether the)24.74 F F2(optname)2.504 E F0(is)2.504 E
+.256(set or unset.)180 180 R .256(If multiple)5.256 F F2(optname)2.756 E
+F0(ar)2.756 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
+(ith)-2.756 E F1<ad71>2.756 E F0 2.755(,t)C .255
+(he return status is zero if)-2.755 F(all)180 192 Q F2(optnames)2.5 E F0
+(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 204 Q F0
(Restricts the v)25.3 E(alues of)-.25 E F2(optname)2.5 E F0
(to be those de\214ned for the)2.5 E F1<ad6f>2.5 E F0(option to the)2.5
-E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .128(If either)144 160.8 R F1
-<ad73>2.628 E F0(or)2.628 E F1<ad75>2.628 E F0 .127(is used with no)
+E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .127(If either)144 220.8 R F1
+<ad73>2.627 E F0(or)2.627 E F1<ad75>2.627 E F0 .127(is used with no)
2.627 F F2(optname)2.627 E F0(ar)2.627 E .127
-(guments, the display is limited to those options which)-.18 F 1.023
-(are set or unset, respecti)144 172.8 R -.15(ve)-.25 G(ly).15 E 6.023
-(.U)-.65 G 1.024(nless otherwise noted, the)-6.023 F F1(shopt)3.524 E F0
-1.024(options are disabled \(unset\) by)3.524 F(def)144 184.8 Q(ault.)
+(guments, the display is limited to those options which)-.18 F 1.024
+(are set or unset, respecti)144 232.8 R -.15(ve)-.25 G(ly).15 E 6.024
+(.U)-.65 G 1.024(nless otherwise noted, the)-6.024 F F1(shopt)3.523 E F0
+1.023(options are disabled \(unset\) by)3.523 F(def)144 244.8 Q(ault.)
-.1 E 1.544(The return status when listing options is zero if all)144
-201.6 R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)
-4.044 F .696
+261.6 R F2(optnames)4.044 E F0 1.545(are enabled, non-zero otherwise.)
+4.045 F .696
(When setting or unsetting options, the return status is zero unless an)
-144 213.6 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696
-(alid shell)-.25 F(option.)144 225.6 Q(The list of)144 242.4 Q F1(shopt)
-2.5 E F0(options is:)2.5 E F1(autocd)144 260.4 Q F0 .2
+144 273.6 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .695
+(alid shell)-.25 F(option.)144 285.6 Q(The list of)144 302.4 Q F1(shopt)
+2.5 E F0(options is:)2.5 E F1(autocd)144 320.4 Q F0 .199
(If set, a command name that is the name of a directory is e)11.11 F
--.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E
-(ment to the)184 272.4 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F
+-.15(xe)-.15 G .2(cuted as if it were the ar).15 F(gu-)-.18 E
+(ment to the)184 332.4 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F
(option is only used by interacti)2.5 E .3 -.15(ve s)-.25 H(hells.).15 E
-F1(cdable_v)144 284.4 Q(ars)-.1 E F0 .155(If set, an ar)184 296.4 R .155
-(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156
+F1(cdable_v)144 344.4 Q(ars)-.1 E F0 .156(If set, an ar)184 356.4 R .156
+(gument to the)-.18 F F1(cd)2.656 E F0 -.2(bu)2.656 G .155
(iltin command that is not a directory is assumed to be the).2 F
-(name of a v)184 308.4 Q(ariable whose v)-.25 E
-(alue is the directory to change to.)-.25 E F1(cdspell)144 320.4 Q F0
+(name of a v)184 368.4 Q(ariable whose v)-.25 E
+(alue is the directory to change to.)-.25 E F1(cdspell)144 380.4 Q F0
1.055
(If set, minor errors in the spelling of a directory component in a)
-10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
-(corrected. The)184 332.4 R 1.487(errors check)3.987 F 1.487
-(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
--.4 G(nd)-3.988 E .552(one character too man)184 344.4 R 4.352 -.65
+10.55 F F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
+(corrected. The)184 392.4 R 1.488(errors check)3.988 F 1.487
+(ed for are transposed characters, a missing character)-.1 F 3.987(,a)
+-.4 G(nd)-3.987 E .552(one character too man)184 404.4 R 4.352 -.65
(y. I)-.15 H 3.052(fac).65 G .552
(orrection is found, the corrected \214le name is printed, and)-3.052 F
-(the command proceeds.)184 356.4 Q
+(the command proceeds.)184 416.4 Q
(This option is only used by interacti)5 E .3 -.15(ve s)-.25 H(hells.)
-.15 E F1(checkhash)144 368.4 Q F0 2.079(If set,)184 380.4 R F1(bash)
-4.579 E F0 2.079(checks that a command found in the hash table e)4.579 F
-2.08(xists before trying to)-.15 F -.15(exe)184 392.4 S(cute it.).15 E
+.15 E F1(checkhash)144 428.4 Q F0 2.08(If set,)184 440.4 R F1(bash)4.58
+E F0 2.079(checks that a command found in the hash table e)4.58 F 2.079
+(xists before trying to)-.15 F -.15(exe)184 452.4 S(cute it.).15 E
(If a hashed command no longer e)5 E
-(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 404.4
-Q F0 .449(If set,)184 416.4 R F1(bash)2.949 E F0 .449
-(lists the status of an)2.949 F 2.949(ys)-.15 G .448
-(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15
-F -.15(ve)-.25 G 3.438(shell. If)184 428.4 R(an)3.438 E 3.438(yj)-.15 G
-.938(obs are running, this causes the e)-3.438 F .938
-(xit to be deferred until a second e)-.15 F .939(xit is)-.15 F 1.456
-(attempted without an interv)184 440.4 R 1.456(ening command \(see)-.15
+(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 464.4
+Q F0 .448(If set,)184 476.4 R F1(bash)2.948 E F0 .448
+(lists the status of an)2.948 F 2.949(ys)-.15 G .449
+(topped and running jobs before e)-2.949 F .449(xiting an interacti)-.15
+F -.15(ve)-.25 G 3.439(shell. If)184 488.4 R(an)3.439 E 3.439(yj)-.15 G
+.938(obs are running, this causes the e)-3.439 F .938
+(xit to be deferred until a second e)-.15 F .938(xit is)-.15 F 1.456
+(attempted without an interv)184 500.4 R 1.456(ening command \(see)-.15
F F1 1.456(JOB CONTR)3.956 F(OL)-.3 E F0(abo)3.956 E -.15(ve)-.15 G
-3.956(\). The).15 F(shell)3.956 E(al)184 452.4 Q -.1(wa)-.1 G
+3.956(\). The).15 F(shell)3.956 E(al)184 512.4 Q -.1(wa)-.1 G
(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G(obs are stopped.)
--2.5 E F1(checkwinsize)144 464.4 Q F0 .796(If set,)184 476.4 R F1(bash)
-3.296 E F0 .796(checks the windo)3.296 F 3.296(ws)-.25 G .797
-(ize after each command and, if necessary)-3.296 F 3.297(,u)-.65 G .797
-(pdates the)-3.297 F -.25(va)184 488.4 S(lues of).25 E/F3 9/Times-Bold@0
+-2.5 E F1(checkwinsize)144 524.4 Q F0 .797(If set,)184 536.4 R F1(bash)
+3.297 E F0 .797(checks the windo)3.297 F 3.297(ws)-.25 G .796
+(ize after each command and, if necessary)-3.297 F 3.296(,u)-.65 G .796
+(pdates the)-3.296 F -.25(va)184 548.4 S(lues of).25 E/F3 9/Times-Bold@0
SF(LINES)2.5 E F0(and)2.25 E F3(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF(.)A
-F1(cmdhist)144 500.4 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
+F1(cmdhist)144 560.4 Q F0 1.202(If set,)6.11 F F1(bash)3.702 E F0 1.202
(attempts to sa)3.702 F 1.502 -.15(ve a)-.2 H 1.202
(ll lines of a multiple-line command in the same history).15 F(entry)184
-512.4 Q 5(.T)-.65 G(his allo)-5 E
-(ws easy re-editing of multi-line commands.)-.25 E F1(compat31)144 524.4
-Q F0 .419(If set,)184 536.4 R F1(bash)2.919 E F0 .419(changes its beha)
-2.919 F .419(vior to that of v)-.2 F .42
+572.4 Q 5(.T)-.65 G(his allo)-5 E
+(ws easy re-editing of multi-line commands.)-.25 E F1(compat31)144 584.4
+Q F0 .42(If set,)184 596.4 R F1(bash)2.92 E F0 .42(changes its beha)2.92
+F .419(vior to that of v)-.2 F .419
(ersion 3.1 with respect to quoted ar)-.15 F(guments)-.18 E
-(to the conditional command')184 548.4 Q 2.5(s=)-.55 G 2.5(~o)-2.5 G
-(perator)-2.5 E(.)-.55 E F1(dirspell)144 560.4 Q F0 .859(If set,)7.77 F
-F1(bash)3.359 E F0 .858
-(attempts spelling correction on directory names during w)3.359 F .858
+(to the conditional command')184 608.4 Q 2.5(s=)-.55 G 2.5(~o)-2.5 G
+(perator)-2.5 E(.)-.55 E F1(dirspell)144 620.4 Q F0 .858(If set,)7.77 F
+F1(bash)3.358 E F0 .858
+(attempts spelling correction on directory names during w)3.358 F .859
(ord completion if)-.1 F
-(the directory name initially supplied does not e)184 572.4 Q(xist.)-.15
-E F1(dotglob)144 584.4 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165
+(the directory name initially supplied does not e)184 632.4 Q(xist.)-.15
+E F1(dotglob)144 644.4 Q F0 .165(If set,)7.77 F F1(bash)2.665 E F0 .165
(includes \214lenames be)2.665 F .165(ginning with a `.)-.15 F 2.665('i)
-.7 G 2.665(nt)-2.665 G .165(he results of pathname e)-2.665 F
-(xpansion.)-.15 E F1(execfail)144 596.4 Q F0 1.387
-(If set, a non-interacti)7.79 F 1.687 -.15(ve s)-.25 H 1.386
+(xpansion.)-.15 E F1(execfail)144 656.4 Q F0 1.386
+(If set, a non-interacti)7.79 F 1.686 -.15(ve s)-.25 H 1.386
(hell will not e).15 F 1.386(xit if it cannot e)-.15 F -.15(xe)-.15 G
-1.386(cute the \214le speci\214ed as an).15 F(ar)184 608.4 Q
+1.387(cute the \214le speci\214ed as an).15 F(ar)184 668.4 Q
(gument to the)-.18 E F1(exec)2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E
(An interacti)5 E .3 -.15(ve s)-.25 H(hell does not e).15 E(xit if)-.15
-E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 620.4 Q
-F0 .716(If set, aliases are e)184 632.4 R .717(xpanded as described abo)
+E F1(exec)2.5 E F0 -.1(fa)2.5 G(ils.).1 E F1(expand_aliases)144 680.4 Q
+F0 .717(If set, aliases are e)184 692.4 R .717(xpanded as described abo)
-.15 F 1.017 -.15(ve u)-.15 H(nder).15 E F3(ALIASES)3.217 E F4(.)A F0
-.717(This option is enabled)5.217 F(by def)184 644.4 Q
-(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E F1(extdeb)144
-656.4 Q(ug)-.2 E F0(If set, beha)184 668.4 Q
-(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1(1.)184
-680.4 Q F0(The)28.5 E F1<ad46>4.251 E F0 1.751(option to the)4.251 F F1
-(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751
-(iltin displays the source \214le name and line).2 F
-(number corresponding to each function name supplied as an ar)220 692.4
-Q(gument.)-.18 E F1(2.)184 704.4 Q F0 1.667(If the command run by the)
-28.5 F F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167
-F 1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220
-716.4 Q -.15(xe)-.15 G(cuted.).15 E(GNU Bash-4.0)72 768 Q
-(2009 February 7)140.96 E(62)190.95 E 0 Cg EP
+.716(This option is enabled)5.217 F(by def)184 704.4 Q
+(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.).15 E(GNU Bash-4.0)
+72 768 Q(2009 February 7)140.96 E(62)190.95 E 0 Cg EP
%%Page: 63 63
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(3.)184 84 Q F0 .841
-(If the command run by the)28.5 F F1(DEB)3.341 E(UG)-.1 E F0 .841
-(trap returns a v)3.341 F .84(alue of 2, and the shell is)-.25 F -.15
-(exe)220 96 S .488
+-.35 E/F1 10/Times-Bold@0 SF(extdeb)144 84 Q(ug)-.2 E F0(If set, beha)
+184 96 Q(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F1
+(1.)184 108 Q F0(The)28.5 E F1<ad46>4.25 E F0 1.75(option to the)4.25 F
+F1(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751
+(iltin displays the source \214le name and line).2 F
+(number corresponding to each function name supplied as an ar)220 120 Q
+(gument.)-.18 E F1(2.)184 132 Q F0 1.667(If the command run by the)28.5
+F F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)4.167 F
+1.667(alue, the ne)-.25 F(xt)-.15 E(command is skipped and not e)220 144
+Q -.15(xe)-.15 G(cuted.).15 E F1(3.)184 156 Q F0 .84
+(If the command run by the)28.5 F F1(DEB)3.34 E(UG)-.1 E F0 .841
+(trap returns a v)3.341 F .841(alue of 2, and the shell is)-.25 F -.15
+(exe)220 168 S .488
(cuting in a subroutine \(a shell function or a shell script e).15 F
-.15(xe)-.15 G .488(cuted by the).15 F F1(.)2.988 E F0(or)2.988 E F1
-(sour)220 108 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1
+(sour)220 180 Q(ce)-.18 E F0 -.2(bu)2.5 G(iltins\), a call to).2 E F1
-.18(re)2.5 G(tur).18 E(n)-.15 E F0(is simulated.)2.5 E F1 26(4. B)184
-120 R(ASH_ARGC)-.3 E F0(and)3.776 E F1 -.3(BA)3.776 G(SH_ARGV).3 E F0
-1.275(are updated as described in their descrip-)3.776 F(tions abo)220
-132 Q -.15(ve)-.15 G(.).15 E F1(5.)184 144 Q F0 1.359
+192 R(ASH_ARGC)-.3 E F0(and)3.775 E F1 -.3(BA)3.775 G(SH_ARGV).3 E F0
+1.276(are updated as described in their descrip-)3.775 F(tions abo)220
+204 Q -.15(ve)-.15 G(.).15 E F1(5.)184 216 Q F0 1.359
(Function tracing is enabled:)28.5 F 1.359
(command substitution, shell functions, and sub-)6.359 F(shells in)220
-156 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F2 10
+228 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E/F2 10
/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1
(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0(traps.)2.5 E F1(6.)
-184 168 Q F0 .805(Error tracing is enabled:)28.5 F .804
-(command substitution, shell functions, and subshells)5.805 F(in)220 180
+184 240 Q F0 .804(Error tracing is enabled:)28.5 F .805
+(command substitution, shell functions, and subshells)5.804 F(in)220 252
Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F2
(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E(OR)-.3 E F0
-(trap.)2.5 E F1(extglob)144 192 Q F0 .4(If set, the e)8.89 F .4
+(trap.)2.5 E F1(extglob)144 264 Q F0 .4(If set, the e)8.89 F .4
(xtended pattern matching features described abo)-.15 F .7 -.15(ve u)
--.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 204 Q
-F0(are enabled.)2.5 E F1(extquote)144 216 Q F0 2.473(If set,)184 228 R
+-.15 H(nder).15 E F1 -.1(Pa)2.9 G .4(thname Expan-).1 F(sion)184 276 Q
+F0(are enabled.)2.5 E F1(extquote)144 288 Q F0 2.473(If set,)184 300 R
F1($)4.973 E F0<08>A F2(string)A F0 4.973<0861>C(nd)-4.973 E F1($)4.973
E F0(")A F2(string)A F0 4.973("q)C 2.473(uoting is performed within)
-4.973 F F1(${)4.973 E F2(par)A(ameter)-.15 E F1(})A F0 -.15(ex)4.973 G
-(pansions).15 E(enclosed in double quotes.)184 240 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 252 Q F0
-1.424(If set, patterns which f)7.77 F 1.425
-(ail to match \214lenames during pathname e)-.1 F 1.425
-(xpansion result in an)-.15 F -.15(ex)184 264 S(pansion error).15 E(.)
--.55 E F1 -.25(fo)144 276 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
-.585(If set, the suf)184 288 R<8c78>-.25 E .585(es speci\214ed by the)
+(pansions).15 E(enclosed in double quotes.)184 312 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 324 Q F0
+1.425(If set, patterns which f)7.77 F 1.425
+(ail to match \214lenames during pathname e)-.1 F 1.424
+(xpansion result in an)-.15 F -.15(ex)184 336 S(pansion error).15 E(.)
+-.55 E F1 -.25(fo)144 348 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
+.585(If set, the suf)184 360 R<8c78>-.25 E .585(es speci\214ed by the)
-.15 F F1(FIGNORE)3.085 E F0 .585(shell v)3.085 F .585(ariable cause w)
--.25 F .585(ords to be ignored)-.1 F .32(when performing w)184 300 R .32
+-.25 F .585(ords to be ignored)-.1 F .32(when performing w)184 372 R .32
(ord completion e)-.1 F -.15(ve)-.25 G 2.82(ni).15 G 2.82(ft)-2.82 G .32
-(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.33
-(pletions. See)184 312 R/F3 9/Times-Bold@0 SF .83(SHELL V)3.33 F
-(ARIABLES)-1.215 E F0(abo)3.08 E 1.13 -.15(ve f)-.15 H .829
-(or a description of).15 F F1(FIGNORE)3.329 E F0 5.829(.T)C .829
-(his option)-5.829 F(is enabled by def)184 324 Q(ault.)-.1 E F1
-(globstar)144 336 Q F0 .439(If set, the pattern)5 F F1(**)2.939 E F0
-.439(used in a \214lename e)2.939 F .439(xpansion conte)-.15 F .44
-(xt will match a \214les and zero or)-.15 F 1.298
-(more directories and subdirectories.)184 348 R 1.298
-(If the pattern is follo)6.298 F 1.298(wed by a)-.25 F F1(/)3.797 E F0
-3.797(,o)C 1.297(nly directories)-3.797 F(and subdirectories match.)184
-360 Q F1(gnu_errfmt)144 372 Q F0(If set, shell error messages are writt\
-en in the standard GNU error message format.)184 384 Q F1(histappend)144
-396 Q F0 .383
+(he ignored w)-2.82 F .32(ords are the only possible com-)-.1 F 3.329
+(pletions. See)184 384 R/F3 9/Times-Bold@0 SF .829(SHELL V)3.329 F
+(ARIABLES)-1.215 E F0(abo)3.079 E 1.129 -.15(ve f)-.15 H .83
+(or a description of).15 F F1(FIGNORE)3.33 E F0 5.83(.T)C .83
+(his option)-5.83 F(is enabled by def)184 396 Q(ault.)-.1 E F1(globstar)
+144 408 Q F0 .44(If set, the pattern)5 F F1(**)2.94 E F0 .44
+(used in a \214lename e)2.94 F .439(xpansion conte)-.15 F .439
+(xt will match a \214les and zero or)-.15 F 1.297
+(more directories and subdirectories.)184 420 R 1.298
+(If the pattern is follo)6.297 F 1.298(wed by a)-.25 F F1(/)3.798 E F0
+3.798(,o)C 1.298(nly directories)-3.798 F(and subdirectories match.)184
+432 Q F1(gnu_errfmt)144 444 Q F0(If set, shell error messages are writt\
+en in the standard GNU error message format.)184 456 Q F1(histappend)144
+468 Q F0 .384
(If set, the history list is appended to the \214le named by the v)184
-408 R .384(alue of the)-.25 F F1(HISTFILE)2.884 E F0 -.25(va)2.884 G
-(ri-).25 E(able when the shell e)184 420 Q(xits, rather than o)-.15 E
--.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 432 Q(eedit)-.18
-E F0 .576(If set, and)184 444 R F1 -.18(re)3.076 G(adline).18 E F0 .575
-(is being used, a user is gi)3.076 F -.15(ve)-.25 G 3.075(nt).15 G .575
-(he opportunity to re-edit a f)-3.075 F .575(ailed his-)-.1 F
-(tory substitution.)184 456 Q F1(histv)144 468 Q(erify)-.1 E F0 .402
-(If set, and)184 480 R F1 -.18(re)2.903 G(adline).18 E F0 .403
+480 R .383(alue of the)-.25 F F1(HISTFILE)2.883 E F0 -.25(va)2.883 G
+(ri-).25 E(able when the shell e)184 492 Q(xits, rather than o)-.15 E
+-.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 504 Q(eedit)-.18
+E F0 .575(If set, and)184 516 R F1 -.18(re)3.075 G(adline).18 E F0 .575
+(is being used, a user is gi)3.075 F -.15(ve)-.25 G 3.075(nt).15 G .576
+(he opportunity to re-edit a f)-3.075 F .576(ailed his-)-.1 F
+(tory substitution.)184 528 Q F1(histv)144 540 Q(erify)-.1 E F0 .403
+(If set, and)184 552 R F1 -.18(re)2.903 G(adline).18 E F0 .403
(is being used, the results of history substitution are not immediately)
-2.903 F .662(passed to the shell parser)184 492 R 5.662(.I)-.55 G .661
-(nstead, the resulting line is loaded into the)-5.662 F F1 -.18(re)3.161
-G(adline).18 E F0(editing)3.161 E -.2(bu)184 504 S -.25(ff).2 G(er).25 E
+2.903 F .661(passed to the shell parser)184 564 R 5.661(.I)-.55 G .662
+(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
+G(adline).18 E F0(editing)3.162 E -.2(bu)184 576 S -.25(ff).2 G(er).25 E
2.5(,a)-.4 G(llo)-2.5 E(wing further modi\214cation.)-.25 E F1
-(hostcomplete)144 516 Q F0 1.181(If set, and)184 528 R F1 -.18(re)3.681
-G(adline).18 E F0 1.181(is being used,)3.681 F F1(bash)3.682 E F0 1.182
-(will attempt to perform hostname completion)3.682 F 1.381(when a w)184
-540 R 1.381(ord containing a)-.1 F F1(@)3.881 E F0 1.381
-(is being completed \(see)3.881 F F1(Completing)3.88 E F0(under)3.88 E
-F3(READLINE)3.88 E F0(abo)184 552 Q -.15(ve)-.15 G 2.5(\). This).15 F
-(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 564 Q F0(If set,)
-184 576 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E F0
+(hostcomplete)144 588 Q F0 1.182(If set, and)184 600 R F1 -.18(re)3.682
+G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
+(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
+612 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
+(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
+F3(READLINE)3.881 E F0(abo)184 624 Q -.15(ve)-.15 G 2.5(\). This).15 F
+(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 636 Q F0(If set,)
+184 648 Q F1(bash)2.5 E F0(will send)2.5 E F3(SIGHUP)2.5 E F0
(to all jobs when an interacti)2.25 E .3 -.15(ve l)-.25 H(ogin shell e)
-.15 E(xits.)-.15 E F1(interacti)144 588 Q -.1(ve)-.1 G(_comments).1 E F0
-.33(If set, allo)184 600 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33
+.15 E(xits.)-.15 E F1(interacti)144 660 Q -.1(ve)-.1 G(_comments).1 E F0
+.33(If set, allo)184 672 R 2.83(waw)-.25 G .33(ord be)-2.93 F .33
(ginning with)-.15 F F1(#)2.83 E F0 .33(to cause that w)2.83 F .33
(ord and all remaining characters on)-.1 F .967
-(that line to be ignored in an interacti)184 612 R 1.267 -.15(ve s)-.25
+(that line to be ignored in an interacti)184 684 R 1.267 -.15(ve s)-.25
H .967(hell \(see).15 F F3(COMMENTS)3.467 E F0(abo)3.217 E -.15(ve)-.15
-G 3.467(\). This).15 F .967(option is)3.467 F(enabled by def)184 624 Q
-(ault.)-.1 E F1(lithist)144 636 Q F0 .654(If set, and the)15.55 F F1
-(cmdhist)3.154 E F0 .654(option is enabled, multi-line commands are sa)
-3.154 F -.15(ve)-.2 G 3.155(dt).15 G 3.155(ot)-3.155 G .655(he history)
--3.155 F(with embedded ne)184 648 Q
-(wlines rather than using semicolon separators where possible.)-.25 E F1
-(login_shell)144 660 Q F0 .486
-(The shell sets this option if it is started as a login shell \(see)184
-672 R F3(INV)2.986 E(OCA)-.405 E(TION)-.855 E F0(abo)2.736 E -.15(ve)
--.15 G 2.986(\). The).15 F -.25(va)184 684 S(lue may not be changed.).25
-E F1(mailwar)144 696 Q(n)-.15 E F0 .814(If set, and a \214le that)184
-708 R F1(bash)3.314 E F0 .815
-(is checking for mail has been accessed since the last time it)3.314 F
--.1(wa)184 720 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
-(`The mail in)-.74 E F2(mail\214le)2.5 E F0(has been read')2.5 E 2.5('i)
--.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E(GNU Bash-4.0)72 768 Q
-(2009 February 7)140.96 E(63)190.95 E 0 Cg EP
+G 3.467(\). This).15 F .968(option is)3.468 F(enabled by def)184 696 Q
+(ault.)-.1 E F1(lithist)144 708 Q F0 .655(If set, and the)15.55 F F1
+(cmdhist)3.155 E F0 .654(option is enabled, multi-line commands are sa)
+3.154 F -.15(ve)-.2 G 3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)
+-3.154 F(with embedded ne)184 720 Q
+(wlines rather than using semicolon separators where possible.)-.25 E
+(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(63)190.95 E 0 Cg EP
%%Page: 64 64
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(no_empty_cmd_completion)144 84 Q F0 .146
-(If set, and)184 96 R F1 -.18(re)2.646 G(adline).18 E F0 .146
-(is being used,)2.646 F F1(bash)2.646 E F0 .145
-(will not attempt to search the)2.646 F F1 -.74(PA)2.645 G(TH)-.21 E F0
-.145(for possible)2.645 F
-(completions when completion is attempted on an empty line.)184 108 Q F1
-(nocaseglob)144 120 Q F0 .436(If set,)184 132 R F1(bash)2.936 E F0 .436
-(matches \214lenames in a case\255insensiti)2.936 F .737 -.15(ve f)-.25
-H .437(ashion when performing pathname).05 F -.15(ex)184 144 S
+-.35 E/F1 10/Times-Bold@0 SF(login_shell)144 84 Q F0 .486
+(The shell sets this option if it is started as a login shell \(see)184
+96 R/F2 9/Times-Bold@0 SF(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)
+2.737 E -.15(ve)-.15 G 2.987(\). The).15 F -.25(va)184 108 S
+(lue may not be changed.).25 E F1(mailwar)144 120 Q(n)-.15 E F0 .815
+(If set, and a \214le that)184 132 R F1(bash)3.315 E F0 .814
+(is checking for mail has been accessed since the last time it)3.315 F
+-.1(wa)184 144 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+(`The mail in)-.74 E/F3 10/Times-Italic@0 SF(mail\214le)2.5 E F0
+(has been read')2.5 E 2.5('i)-.74 G 2.5(sd)-2.5 G(isplayed.)-2.5 E F1
+(no_empty_cmd_completion)144 156 Q F0 .145(If set, and)184 168 R F1 -.18
+(re)2.645 G(adline).18 E F0 .145(is being used,)2.645 F F1(bash)2.646 E
+F0 .146(will not attempt to search the)2.646 F F1 -.74(PA)2.646 G(TH)
+-.21 E F0 .146(for possible)2.646 F
+(completions when completion is attempted on an empty line.)184 180 Q F1
+(nocaseglob)144 192 Q F0 .437(If set,)184 204 R F1(bash)2.937 E F0 .436
+(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)-.25
+H .436(ashion when performing pathname).05 F -.15(ex)184 216 S
(pansion \(see).15 E F1 -.1(Pa)2.5 G(thname Expansion).1 E F0(abo)2.5 E
--.15(ve)-.15 G(\).).15 E F1(nocasematch)144 156 Q F0 1.194(If set,)184
-168 R F1(bash)3.694 E F0 1.194(matches patterns in a case\255insensiti)
-3.694 F 1.493 -.15(ve f)-.25 H 1.193(ashion when performing matching).05
-F(while e)184 180 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5
-E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 192 Q F0
-.854(If set,)184 204 R F1(bash)3.354 E F0(allo)3.354 E .855
-(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.355 G .855
-(thname Expansion).1 F F0(abo)3.355 E -.15(ve)-.15 G 3.355(\)t).15 G(o)
--3.355 E -.15(ex)184 216 S(pand to a null string, rather than themselv)
-.15 E(es.)-.15 E F1(pr)144 228 Q(ogcomp)-.18 E F0 .677
-(If set, the programmable completion f)184 240 R .677(acilities \(see)
--.1 F F1(Pr)3.176 E .676(ogrammable Completion)-.18 F F0(abo)3.176 E
--.15(ve)-.15 G(\)).15 E(are enabled.)184 252 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 264 Q(omptv)
--.18 E(ars)-.1 E F0 1.447(If set, prompt strings under)184 276 R 1.448
-(go parameter e)-.18 F 1.448(xpansion, command substitution, arithmetic)
--.15 F -.15(ex)184 288 S .171(pansion, and quote remo).15 F -.25(va)-.15
+-.15(ve)-.15 G(\).).15 E F1(nocasematch)144 228 Q F0 1.193(If set,)184
+240 R F1(bash)3.693 E F0 1.194(matches patterns in a case\255insensiti)
+3.693 F 1.494 -.15(ve f)-.25 H 1.194(ashion when performing matching).05
+F(while e)184 252 Q -.15(xe)-.15 G(cuting).15 E F1(case)2.5 E F0(or)2.5
+E F1([[)2.5 E F0(conditional commands.)2.5 E F1(nullglob)144 264 Q F0
+.855(If set,)184 276 R F1(bash)3.355 E F0(allo)3.355 E .855
+(ws patterns which match no \214les \(see)-.25 F F1 -.1(Pa)3.354 G .854
+(thname Expansion).1 F F0(abo)3.354 E -.15(ve)-.15 G 3.354(\)t).15 G(o)
+-3.354 E -.15(ex)184 288 S(pand to a null string, rather than themselv)
+.15 E(es.)-.15 E F1(pr)144 300 Q(ogcomp)-.18 E F0 .676
+(If set, the programmable completion f)184 312 R .677(acilities \(see)
+-.1 F F1(Pr)3.177 E .677(ogrammable Completion)-.18 F F0(abo)3.177 E
+-.15(ve)-.15 G(\)).15 E(are enabled.)184 324 Q
+(This option is enabled by def)5 E(ault.)-.1 E F1(pr)144 336 Q(omptv)
+-.18 E(ars)-.1 E F0 1.448(If set, prompt strings under)184 348 R 1.448
+(go parameter e)-.18 F 1.447(xpansion, command substitution, arithmetic)
+-.15 F -.15(ex)184 360 S .17(pansion, and quote remo).15 F -.25(va)-.15
G 2.67(la).25 G .17(fter being e)-2.67 F .17(xpanded as described in)
--.15 F/F2 9/Times-Bold@0 SF(PR)2.67 E(OMPTING)-.27 E F0(abo)2.42 E -.15
-(ve)-.15 G(.).15 E(This option is enabled by def)184 300 Q(ault.)-.1 E
-F1 -.18(re)144 312 S(stricted_shell).18 E F0 1.069
+-.15 F F2(PR)2.671 E(OMPTING)-.27 E F0(abo)2.421 E -.15(ve)-.15 G(.).15
+E(This option is enabled by def)184 372 Q(ault.)-.1 E F1 -.18(re)144 384
+S(stricted_shell).18 E F0 1.069
(The shell sets this option if it is started in restricted mode \(see)
-184 324 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 336 Q 4.178
+184 396 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 408 Q 4.178
(w\). The)-.25 F -.25(va)4.178 G 1.678(lue may not be changed.).25 F
1.678(This is not reset when the startup \214les are)6.678 F -.15(exe)
-184 348 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E
+184 420 S(cuted, allo).15 E(wing the startup \214les to disco)-.25 E
-.15(ve)-.15 G 2.5(rw).15 G(hether or not a shell is restricted.)-2.5 E
-F1(shift_v)144 360 Q(erbose)-.1 E F0 .501(If set, the)184 372 R F1
-(shift)3.001 E F0 -.2(bu)3.001 G .501
-(iltin prints an error message when the shift count e).2 F .502
-(xceeds the number)-.15 F(of positional parameters.)184 384 Q F1(sour)
-144 396 Q(cepath)-.18 E F0 .771(If set, the)184 408 R F1(sour)3.271 E
-(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
--3.471 F .771(alue of)-.25 F F2 -.666(PA)3.27 G(TH)-.189 E F0 .77
-(to \214nd the directory containing the)3.02 F(\214le supplied as an ar)
-184 420 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E(ault.)
--.1 E F1(xpg_echo)144 432 Q F0(If set, the)184 444 Q F1(echo)2.5 E F0
--.2(bu)2.5 G(iltin e).2 E(xpands backslash-escape sequences by def)-.15
-E(ault.)-.1 E F1(suspend)108 456 Q F0([)2.5 E F1<ad66>A F0(])A 1.001
-(Suspend the e)144 468 R -.15(xe)-.15 G 1.001
-(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.501(sa).15 G
-F2(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002(login shell cannot be)
-3.502 F .023(suspended; the)144 480 R F1<ad66>2.523 E F0 .023
-(option can be used to o)2.523 F -.15(ve)-.15 G .022
-(rride this and force the suspension.).15 F .022(The return status is)
-5.022 F 2.5(0u)144 492 S(nless the shell is a login shell and)-2.5 E F1
+F1(shift_v)144 432 Q(erbose)-.1 E F0 .502(If set, the)184 444 R F1
+(shift)3.002 E F0 -.2(bu)3.002 G .501
+(iltin prints an error message when the shift count e).2 F .501
+(xceeds the number)-.15 F(of positional parameters.)184 456 Q F1(sour)
+144 468 Q(cepath)-.18 E F0 .77(If set, the)184 480 R F1(sour)3.27 E(ce)
+-.18 E F0(\()3.27 E F1(.)A F0 3.27(\)b)C .77(uiltin uses the v)-3.47 F
+.771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771
+(to \214nd the directory containing the)3.021 F
+(\214le supplied as an ar)184 492 Q 2.5(gument. This)-.18 F
+(option is enabled by def)2.5 E(ault.)-.1 E F1(xpg_echo)144 504 Q F0
+(If set, the)184 516 Q F1(echo)2.5 E F0 -.2(bu)2.5 G(iltin e).2 E
+(xpands backslash-escape sequences by def)-.15 E(ault.)-.1 E F1(suspend)
+108 528 Q F0([)2.5 E F1<ad66>A F0(])A 1.002(Suspend the e)144 540 R -.15
+(xe)-.15 G 1.002(cution of this shell until it recei).15 F -.15(ve)-.25
+G 3.501(sa).15 G F2(SIGCONT)A F0 3.501(signal. A)3.251 F 1.001
+(login shell cannot be)3.501 F .022(suspended; the)144 552 R F1<ad66>
+2.522 E F0 .022(option can be used to o)2.522 F -.15(ve)-.15 G .022
+(rride this and force the suspension.).15 F .023(The return status is)
+5.023 F 2.5(0u)144 564 S(nless the shell is a login shell and)-2.5 E F1
<ad66>2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E
-F1(test)108 504 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)108
-516 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 1.15
+F1(test)108 576 Q F3 -.2(ex)2.5 G(pr).2 E F1([)108 588 Q F3 -.2(ex)2.5 G
+(pr).2 E F1(])2.5 E F0 1.15
(Return a status of 0 or 1 depending on the e)6.77 F -.25(va)-.25 G 1.15
(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)3.65 G
-(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.188
-(operator and operand must be a separate ar)144 528 R 3.688
-(gument. Expressions)-.18 F 1.187(are composed of the primaries)3.688 F
-1.889(described abo)144 540 R 2.189 -.15(ve u)-.15 H(nder).15 E F2
-(CONDITION)4.389 E 1.889(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
-F1(test)6.389 E F0 1.89(does not accept an)4.389 F 4.39(yo)-.15 G 1.89
-(ptions, nor)-4.39 F(does it accept and ignore an ar)144 552 Q
+(pr).2 E F0 6.15(.E).73 G(ach)-6.15 E 1.187
+(operator and operand must be a separate ar)144 600 R 3.688
+(gument. Expressions)-.18 F 1.188(are composed of the primaries)3.688 F
+1.89(described abo)144 612 R 2.19 -.15(ve u)-.15 H(nder).15 E F2
+(CONDITION)4.39 E 1.89(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(.)A
+F1(test)6.39 E F0 1.889(does not accept an)4.389 F 4.389(yo)-.15 G 1.889
+(ptions, nor)-4.389 F(does it accept and ignore an ar)144 624 Q
(gument of)-.18 E F1<adad>2.5 E F0(as signifying the end of options.)2.5
-E .786(Expressions may be combined using the follo)144 570 R .785
+E .785(Expressions may be combined using the follo)144 642 R .786
(wing operators, listed in decreasing order of prece-)-.25 F 2.5
-(dence. The)144 582 R -.25(eva)2.5 G
+(dence. The)144 654 R -.25(eva)2.5 G
(luation depends on the number of ar).25 E(guments; see belo)-.18 E -.65
-(w.)-.25 G F1(!)144 594 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G
+(w.)-.25 G F1(!)144 666 Q F3 -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)12.6 G
(ue if).35 E F3 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\()
-144 606 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)6.77
+144 678 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)6.77
F .26(alue of)-.25 F F3 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26
(his may be used to o)-5.26 F -.15(ve)-.15 G .26
-(rride the normal precedence of opera-).15 F(tors.)180 618 Q F3 -.2(ex)
-144 630 S(pr1).2 E F0<ad>2.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35
-(Tr)180 642 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F3
--.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F3 -.2(ex)144 654 S(pr1).2 E
-F0<ad>2.5 E F1(o)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 666 S
-(ue if either).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F3 -.2(ex)2.5 G
-(pr2).2 E F0(is true.)2.52 E F1(test)144 682.8 Q F0(and)2.5 E F1([)2.5 E
-F0 -.25(eva)2.5 G(luate conditional e).25 E
-(xpressions using a set of rules based on the number of ar)-.15 E
-(guments.)-.18 E 2.5(0a)144 700.8 S -.18(rg)-2.5 G(uments).18 E(The e)
-180 712.8 Q(xpression is f)-.15 E(alse.)-.1 E(GNU Bash-4.0)72 768 Q
+(rride the normal precedence of opera-).15 F(tors.)180 690 Q F3 -.2(ex)
+144 702 S(pr1).2 E F0<ad>2.5 E F1(a)A F3 -.2(ex)2.5 G(pr2).2 E F0 -.35
+(Tr)180 714 S(ue if both).35 E F3 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F3
+-.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E(GNU Bash-4.0)72 768 Q
(2009 February 7)140.96 E(64)190.95 E 0 Cg EP
%%Page: 65 65
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E 2.5(1a)144 84 S -.18(rg)-2.5 G(ument).18 E(The e)180 96 Q
+-.35 E/F1 10/Times-Italic@0 SF -.2(ex)144 84 S(pr1).2 E F0<ad>2.5 E/F2
+10/Times-Bold@0 SF(o)A F1 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 96 S
+(ue if either).35 E F1 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F1 -.2(ex)2.5 G
+(pr2).2 E F0(is true.)2.52 E F2(test)144 112.8 Q F0(and)2.5 E F2([)2.5 E
+F0 -.25(eva)2.5 G(luate conditional e).25 E
+(xpressions using a set of rules based on the number of ar)-.15 E
+(guments.)-.18 E 2.5(0a)144 130.8 S -.18(rg)-2.5 G(uments).18 E(The e)
+180 142.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 154.8 S -.18
+(rg)-2.5 G(ument).18 E(The e)180 166.8 Q
(xpression is true if and only if the ar)-.15 E(gument is not null.)-.18
-E 2.5(2a)144 108 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)180
-120 R .37(gument is)-.18 F/F1 10/Times-Bold@0 SF(!)2.87 E F0 2.87(,t)C
-.37(he e)-2.87 F .37(xpression is true if and only if the second ar)-.15
-F .37(gument is null.)-.18 F .379(If the \214rst ar)180 132 R .38
-(gument is one of the unary conditional operators listed abo)-.18 F .68
--.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(CONDI-)2.88 E(TION)180
-144 Q .553(AL EXPRESSIONS)-.18 F/F3 9/Times-Roman@0 SF(,)A F0 .552
+E 2.5(2a)144 178.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
+180 190.8 R .37(gument is)-.18 F F2(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+F .37(xpression is true if and only if the second ar)-.15 F .37
+(gument is null.)-.18 F .38(If the \214rst ar)180 202.8 R .38
+(gument is one of the unary conditional operators listed abo)-.18 F .679
+-.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0 SF(CONDI-)2.879 E(TION)180
+214.8 Q .552(AL EXPRESSIONS)-.18 F/F4 9/Times-Roman@0 SF(,)A F0 .552
(the e)2.802 F .552(xpression is true if the unary test is true.)-.15 F
-.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 156 Q
+.552(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 226.8 Q
(alid unary conditional operator)-.25 E 2.5(,t)-.4 G(he e)-2.5 E
-(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 168 S -.18(rg)-2.5 G
-(uments).18 E .023(If the second ar)180 180 R .023
+(xpression is f)-.15 E(alse.)-.1 E 2.5(3a)144 238.8 S -.18(rg)-2.5 G
+(uments).18 E .024(If the second ar)180 250.8 R .023
(gument is one of the binary conditional operators listed abo)-.18 F
-.324 -.15(ve u)-.15 H(nder).15 E F2(CON-)2.524 E(DITION)180 192 Q 1.478
-(AL EXPRESSIONS)-.18 F F3(,)A F0 1.477(the result of the e)3.727 F 1.477
-(xpression is the result of the binary test)-.15 F .513
-(using the \214rst and third ar)180 204 R .513(guments as operands.)-.18
-F(The)5.513 E F1<ad61>3.013 E F0(and)3.013 E F1<ad6f>3.013 E F0 .513
-(operators are considered)3.013 F .972
-(binary operators when there are three ar)180 216 R 3.472(guments. If)
--.18 F .972(the \214rst ar)3.472 F .972(gument is)-.18 F F1(!)3.472 E F0
-3.472(,t)C .972(he v)-3.472 F .972(alue is)-.25 F .883(the ne)180 228 R
--.05(ga)-.15 G .883(tion of the tw).05 F(o-ar)-.1 E .884
-(gument test using the second and third ar)-.18 F 3.384(guments. If)-.18
-F .884(the \214rst)3.384 F(ar)180 240 Q .875(gument is e)-.18 F(xactly)
--.15 E F1(\()3.375 E F0 .875(and the third ar)3.375 F .875(gument is e)
--.18 F(xactly)-.15 E F1(\))3.375 E F0 3.374(,t)C .874
-(he result is the one-ar)-3.374 F(gument)-.18 E(test of the second ar)
-180 252 Q 2.5(gument. Otherwise,)-.18 F(the e)2.5 E(xpression is f)-.15
-E(alse.)-.1 E 2.5(4a)144 264 S -.18(rg)-2.5 G(uments).18 E .384
-(If the \214rst ar)180 276 R .384(gument is)-.18 F F1(!)2.884 E F0 2.885
-(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15 G .385
-(tion of the three-ar).05 F .385(gument e)-.18 F .385(xpression com-)
--.15 F 1.648(posed of the remaining ar)180 288 R 4.147
-(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.647
+.323 -.15(ve u)-.15 H(nder).15 E F3(CON-)2.523 E(DITION)180 262.8 Q
+1.477(AL EXPRESSIONS)-.18 F F4(,)A F0 1.477(the result of the e)3.727 F
+1.477(xpression is the result of the binary test)-.15 F .513
+(using the \214rst and third ar)180 274.8 R .513(guments as operands.)
+-.18 F(The)5.513 E F2<ad61>3.013 E F0(and)3.013 E F2<ad6f>3.013 E F0
+.512(operators are considered)3.013 F .972
+(binary operators when there are three ar)180 286.8 R 3.472(guments. If)
+-.18 F .972(the \214rst ar)3.472 F .972(gument is)-.18 F F2(!)3.472 E F0
+3.472(,t)C .972(he v)-3.472 F .972(alue is)-.25 F .884(the ne)180 298.8
+R -.05(ga)-.15 G .884(tion of the tw).05 F(o-ar)-.1 E .884
+(gument test using the second and third ar)-.18 F 3.383(guments. If)-.18
+F .883(the \214rst)3.383 F(ar)180 310.8 Q .874(gument is e)-.18 F
+(xactly)-.15 E F2(\()3.374 E F0 .875(and the third ar)3.374 F .875
+(gument is e)-.18 F(xactly)-.15 E F2(\))3.375 E F0 3.375(,t)C .875
+(he result is the one-ar)-3.375 F(gument)-.18 E(test of the second ar)
+180 322.8 Q 2.5(gument. Otherwise,)-.18 F(the e)2.5 E(xpression is f)
+-.15 E(alse.)-.1 E 2.5(4a)144 334.8 S -.18(rg)-2.5 G(uments).18 E .385
+(If the \214rst ar)180 346.8 R .385(gument is)-.18 F F2(!)2.885 E F0
+2.885(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15 G .384
+(tion of the three-ar).05 F .384(gument e)-.18 F .384(xpression com-)
+-.15 F 1.647(posed of the remaining ar)180 358.8 R 4.147
+(guments. Otherwise,)-.18 F 1.647(the e)4.147 F 1.648
(xpression is parsed and e)-.15 F -.25(va)-.25 G(luated).25 E
-(according to precedence using the rules listed abo)180 300 Q -.15(ve)
--.15 G(.).15 E 2.5(5o)144 312 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18
-E 1.635(The e)180 324 R 1.635(xpression is parsed and e)-.15 F -.25(va)
--.25 G 1.635(luated according to precedence using the rules listed).25 F
-(abo)180 336 Q -.15(ve)-.15 G(.).15 E F1(times)108 352.8 Q F0 1.229(Pri\
-nt the accumulated user and system times for the shell and for processe\
-s run from the shell.)13.23 F(The return status is 0.)144 364.8 Q F1
-(trap)108 381.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E/F4 10
-/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F4(sigspec)2.5 E F0(...])2.5 E
-.702(The command)144 393.6 R F4(ar)3.532 E(g)-.37 E F0 .702
-(is to be read and e)3.422 F -.15(xe)-.15 G .702
-(cuted when the shell recei).15 F -.15(ve)-.25 G 3.203(ss).15 G
-(ignal\(s\))-3.203 E F4(sigspec)3.203 E F0 5.703(.I).31 G(f)-5.703 E F4
-(ar)3.533 E(g)-.37 E F0(is)3.423 E .609(absent \(and there is a single)
-144 405.6 R F4(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F1<ad>3.108 E
+(according to precedence using the rules listed abo)180 370.8 Q -.15(ve)
+-.15 G(.).15 E 2.5(5o)144 382.8 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)
+-.18 E 1.635(The e)180 394.8 R 1.635(xpression is parsed and e)-.15 F
+-.25(va)-.25 G 1.635
+(luated according to precedence using the rules listed).25 F(abo)180
+406.8 Q -.15(ve)-.15 G(.).15 E F2(times)108 423.6 Q F0 1.229(Print the \
+accumulated user and system times for the shell and for processes run f\
+rom the shell.)13.23 F(The return status is 0.)144 435.6 Q F2(trap)108
+452.4 Q F0([)2.5 E F2(\255lp)A F0 2.5(][)C([)-2.5 E F1(ar)A(g)-.37 E F0
+(])A F1(sigspec)2.5 E F0(...])2.5 E .703(The command)144 464.4 R F1(ar)
+3.533 E(g)-.37 E F0 .703(is to be read and e)3.423 F -.15(xe)-.15 G .702
+(cuted when the shell recei).15 F -.15(ve)-.25 G 3.202(ss).15 G
+(ignal\(s\))-3.202 E F1(sigspec)3.202 E F0 5.702(.I).31 G(f)-5.702 E F1
+(ar)3.532 E(g)-.37 E F0(is)3.422 E .608(absent \(and there is a single)
+144 476.4 R F1(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F2<ad>3.108 E
F0 3.108(,e)C .608
(ach speci\214ed signal is reset to its original disposition)-3.108 F
-.658(\(the v)144 417.6 R .658(alue it had upon entrance to the shell\).)
--.25 F(If)5.658 E F4(ar)3.488 E(g)-.37 E F0 .659
-(is the null string the signal speci\214ed by each)3.378 F F4(sigspec)
-144.34 429.6 Q F0 .581
-(is ignored by the shell and by the commands it in)3.391 F -.2(vo)-.4 G
--.1(ke).2 G 3.08(s. If).1 F F4(ar)3.41 E(g)-.37 E F0 .58
-(is not present and)3.3 F F1<ad70>3.08 E F0(has)3.08 E 1.214
-(been supplied, then the trap commands associated with each)144 441.6 R
-F4(sigspec)4.054 E F0 1.215(are displayed.)4.024 F 1.215(If no ar)6.215
-F(gu-)-.18 E .86(ments are supplied or if only)144 453.6 R F1<ad70>3.36
-E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
+.659(\(the v)144 488.4 R .659(alue it had upon entrance to the shell\).)
+-.25 F(If)5.658 E F1(ar)3.488 E(g)-.37 E F0 .658
+(is the null string the signal speci\214ed by each)3.378 F F1(sigspec)
+144.34 500.4 Q F0 .58(is ignored by the shell and by the commands it in)
+3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F1(ar)3.411 E(g)-.37 E
+F0 .581(is not present and)3.301 F F2<ad70>3.081 E F0(has)3.081 E 1.215
+(been supplied, then the trap commands associated with each)144 512.4 R
+F1(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214
+F(gu-)-.18 E .86(ments are supplied or if only)144 524.4 R F2<ad70>3.36
+E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F2(trap)3.36 E F0 .86
(prints the list of commands associated with each)3.36 F 2.83
-(signal. The)144 465.6 R F1<ad6c>2.83 E F0 .33(option causes the shell \
-to print a list of signal names and their corresponding num-)2.83 F
-4.311(bers. Each)144 477.6 R F4(sigspec)4.651 E F0 1.811
-(is either a signal name de\214ned in <)4.621 F F4(signal.h)A F0 1.81
-(>, or a signal number)B 6.81(.S)-.55 G(ignal)-6.81 E .745
-(names are case insensiti)144 489.6 R 1.045 -.15(ve a)-.25 H .745
-(nd the SIG pre\214x is optional.).15 F .745(If a)5.745 F F4(sigspec)
-3.585 E F0(is)3.555 E F2(EXIT)3.245 E F0 .745(\(0\) the command)2.995 F
-F4(ar)144.33 501.6 Q(g)-.37 E F0 1.63(is e)4.35 F -.15(xe)-.15 G 1.63
-(cuted on e).15 F 1.63(xit from the shell.)-.15 F 1.63(If a)6.63 F F4
-(sigspec)4.47 E F0(is)4.44 E F2(DEB)4.13 E(UG)-.09 E F3(,)A F0 1.629
-(the command)3.88 F F4(ar)4.459 E(g)-.37 E F0 1.629(is e)4.349 F -.15
-(xe)-.15 G(cuted).15 E 1.206(before e)144 513.6 R -.15(ve)-.25 G(ry).15
-E F4 1.206(simple command)3.706 F F0(,)A F4(for)3.706 E F0(command,)
-3.706 E F4(case)3.706 E F0(command,)3.706 E F4(select)3.707 E F0 1.207
-(command, e)3.707 F -.15(ve)-.25 G 1.207(ry arithmetic).15 F F4(for)144
-525.6 Q F0 .412(command, and before the \214rst command e)2.913 F -.15
-(xe)-.15 G .412(cutes in a shell function \(see).15 F F2 .412
-(SHELL GRAMMAR)2.912 F F0(abo)144 537.6 Q -.15(ve)-.15 G 2.665
-(\). Refer).15 F .166(to the description of the)2.665 F F1(extdeb)2.666
-E(ug)-.2 E F0 .166(option to the)2.666 F F1(shopt)2.666 E F0 -.2(bu)
-2.666 G .166(iltin for details of its ef).2 F(fect)-.25 E .509(on the)
-144 549.6 R F1(DEB)3.009 E(UG)-.1 E F0 3.009(trap. If)3.009 F(a)3.009 E
-F4(sigspec)3.348 E F0(is)3.318 E F2(ERR)3.008 E F3(,)A F0 .508
-(the command)2.758 F F4(ar)3.338 E(g)-.37 E F0 .508(is e)3.228 F -.15
-(xe)-.15 G .508(cuted whene).15 F -.15(ve)-.25 G 3.008(ras).15 G .508
-(imple com-)-3.008 F 2.506(mand has a non\255zero e)144 561.6 R 2.506
+(signal. The)144 536.4 R F2<ad6c>2.83 E F0 .33(option causes the shell \
+to print a list of signal names and their corresponding num-)2.83 F 4.31
+(bers. Each)144 548.4 R F1(sigspec)4.65 E F0 1.811
+(is either a signal name de\214ned in <)4.62 F F1(signal.h)A F0 1.811
+(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E .745
+(names are case insensiti)144 560.4 R 1.045 -.15(ve a)-.25 H .745
+(nd the SIG pre\214x is optional.).15 F .745(If a)5.745 F F1(sigspec)
+3.585 E F0(is)3.555 E F3(EXIT)3.245 E F0 .745(\(0\) the command)2.995 F
+F1(ar)144.33 572.4 Q(g)-.37 E F0 1.629(is e)4.349 F -.15(xe)-.15 G 1.629
+(cuted on e).15 F 1.63(xit from the shell.)-.15 F 1.63(If a)6.63 F F1
+(sigspec)4.47 E F0(is)4.44 E F3(DEB)4.13 E(UG)-.09 E F4(,)A F0 1.63
+(the command)3.88 F F1(ar)4.46 E(g)-.37 E F0 1.63(is e)4.35 F -.15(xe)
+-.15 G(cuted).15 E 1.207(before e)144 584.4 R -.15(ve)-.25 G(ry).15 E F1
+1.207(simple command)3.707 F F0(,)A F1(for)3.707 E F0(command,)3.706 E
+F1(case)3.706 E F0(command,)3.706 E F1(select)3.706 E F0 1.206
+(command, e)3.706 F -.15(ve)-.25 G 1.206(ry arithmetic).15 F F1(for)144
+596.4 Q F0 .412(command, and before the \214rst command e)2.912 F -.15
+(xe)-.15 G .412(cutes in a shell function \(see).15 F F3 .413
+(SHELL GRAMMAR)2.912 F F0(abo)144 608.4 Q -.15(ve)-.15 G 2.666
+(\). Refer).15 F .166(to the description of the)2.666 F F2(extdeb)2.666
+E(ug)-.2 E F0 .166(option to the)2.666 F F2(shopt)2.666 E F0 -.2(bu)
+2.666 G .166(iltin for details of its ef).2 F(fect)-.25 E .508(on the)
+144 620.4 R F2(DEB)3.008 E(UG)-.1 E F0 3.008(trap. If)3.008 F(a)3.008 E
+F1(sigspec)3.348 E F0(is)3.318 E F3(ERR)3.008 E F4(,)A F0 .508
+(the command)2.758 F F1(ar)3.338 E(g)-.37 E F0 .509(is e)3.228 F -.15
+(xe)-.15 G .509(cuted whene).15 F -.15(ve)-.25 G 3.009(ras).15 G .509
+(imple com-)-3.009 F 2.506(mand has a non\255zero e)144 632.4 R 2.506
(xit status, subject to the follo)-.15 F 2.506(wing conditions.)-.25 F
-(The)7.506 E F2(ERR)5.006 E F0 2.506(trap is not)4.756 F -.15(exe)144
-573.6 S .105(cuted if the f).15 F .105
+(The)7.506 E F3(ERR)5.006 E F0 2.506(trap is not)4.756 F -.15(exe)144
+644.4 S .105(cuted if the f).15 F .105
(ailed command is part of the command list immediately follo)-.1 F .105
-(wing a)-.25 F F1(while)2.605 E F0(or)2.605 E F1(until)2.605 E F0 -.1
-(ke)144 585.6 S(yw)-.05 E .549(ord, part of the test in an)-.1 F F4(if)
+(wing a)-.25 F F2(while)2.605 E F0(or)2.605 E F2(until)2.605 E F0 -.1
+(ke)144 656.4 S(yw)-.05 E .549(ord, part of the test in an)-.1 F F1(if)
3.059 E F0 .549(statement, part of a command e)5.009 F -.15(xe)-.15 G
-.549(cuted in a).15 F F1(&&)3.049 E F0(or)3.049 E/F5 10/Symbol SF<efef>
-3.049 E F0 .549(list, or if)3.049 F .578(the command')144 597.6 R 3.078
-(sr)-.55 G .578(eturn v)-3.078 F .578(alue is being in)-.25 F -.15(ve)
--.4 G .578(rted via).15 F F1(!)3.078 E F0 5.577(.T)C .577
-(hese are the same conditions obe)-5.577 F .577(yed by the)-.15 F F1
-(err)144 609.6 Q(exit)-.18 E F0 3.03(option. If)3.03 F(a)3.03 E F4
-(sigspec)3.37 E F0(is)3.341 E F2(RETURN)3.031 E F3(,)A F0 .531
-(the command)2.781 F F4(ar)3.361 E(g)-.37 E F0 .531(is e)3.251 F -.15
-(xe)-.15 G .531(cuted each time a shell function).15 F .317
-(or a script e)144 621.6 R -.15(xe)-.15 G .317(cuted with the).15 F F1
-(.)2.817 E F0(or)2.817 E F1(sour)2.817 E(ce)-.18 E F0 -.2(bu)2.817 G
+.549(cuted in a).15 F F2(&&)3.049 E F0(or)3.049 E/F5 10/Symbol SF<efef>
+3.049 E F0 .549(list, or if)3.049 F .577(the command')144 668.4 R 3.077
+(sr)-.55 G .577(eturn v)-3.077 F .577(alue is being in)-.25 F -.15(ve)
+-.4 G .577(rted via).15 F F2(!)3.077 E F0 5.578(.T)C .578
+(hese are the same conditions obe)-5.578 F .578(yed by the)-.15 F F2
+(err)144 680.4 Q(exit)-.18 E F0 3.031(option. If)3.031 F(a)3.031 E F1
+(sigspec)3.371 E F0(is)3.341 E F3(RETURN)3.031 E F4(,)A F0 .531
+(the command)2.781 F F1(ar)3.361 E(g)-.37 E F0 .531(is e)3.251 F -.15
+(xe)-.15 G .53(cuted each time a shell function).15 F .316
+(or a script e)144 692.4 R -.15(xe)-.15 G .317(cuted with the).15 F F2
+(.)2.817 E F0(or)2.817 E F2(sour)2.817 E(ce)-.18 E F0 -.2(bu)2.817 G
.317(iltins \214nishes e).2 F -.15(xe)-.15 G 2.817(cuting. Signals).15 F
-.316(ignored upon entry to)2.817 F .787
-(the shell cannot be trapped or reset.)144 633.6 R -.35(Tr)5.787 G .787
+.317(ignored upon entry to)2.817 F .787
+(the shell cannot be trapped or reset.)144 704.4 R -.35(Tr)5.787 G .787
(apped signals that are not being ignored are reset to their).35 F 1.1
-(original v)144 645.6 R 1.1
+(original v)144 716.4 R 1.1
(alues in a child process when it is created.)-.25 F 1.1
-(The return status is f)6.1 F 1.1(alse if an)-.1 F(y)-.15 E F4(sigspec)
-3.94 E F0(is)3.91 E(in)144 657.6 Q -.25(va)-.4 G(lid; otherwise).25 E F1
-(trap)2.5 E F0(returns true.)2.5 E F1(type)108 674.4 Q F0([)2.5 E F1
-(\255aftpP)A F0(])A F4(name)2.5 E F0([)2.5 E F4(name)A F0(...])2.5 E -.4
-(Wi)144 686.4 S .173(th no options, indicate ho).4 F 2.673(we)-.25 G
-(ach)-2.673 E F4(name)3.033 E F0 -.1(wo)2.853 G .174
-(uld be interpreted if used as a command name.).1 F .174(If the)5.174 F
-F1<ad74>144 698.4 Q F0 .843(option is used,)3.343 F F1(type)3.343 E F0
-.843(prints a string which is one of)3.343 F F4(alias)3.343 E F0(,).27 E
-F4 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F4(function)3.343 E F0
-(,).24 E F4 -.2(bu)3.342 G(iltin).2 E F0 3.342(,o).24 G(r)-3.342 E F4
-(\214le)5.252 E F0(if)3.522 E F4(name)144.36 710.4 Q F0 .086
-(is an alias, shell reserv)2.766 F .086(ed w)-.15 F .086
-(ord, function, b)-.1 F .087(uiltin, or disk \214le, respecti)-.2 F -.15
-(ve)-.25 G(ly).15 E 5.087(.I)-.65 G 2.587(ft)-5.087 G(he)-2.587 E F4
-(name)2.947 E F0 .087(is not)2.767 F .119
-(found, then nothing is printed, and an e)144 722.4 R .118
-(xit status of f)-.15 F .118(alse is returned.)-.1 F .118(If the)5.118 F
-F1<ad70>2.618 E F0 .118(option is used,)2.618 F F1(type)2.618 E F0
-(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(65)190.95 E 0 Cg EP
+(The return status is f)6.1 F 1.1(alse if an)-.1 F(y)-.15 E F1(sigspec)
+3.94 E F0(is)3.91 E(in)144 728.4 Q -.25(va)-.4 G(lid; otherwise).25 E F2
+(trap)2.5 E F0(returns true.)2.5 E(GNU Bash-4.0)72 768 Q
+(2009 February 7)140.96 E(65)190.95 E 0 Cg EP
%%Page: 66 66
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E .855(either returns the name of the disk \214le that w)144 84 R
-.855(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F/F1 10
-/Times-Italic@0 SF(name)3.715 E F0 .855(were speci\214ed as a com-)3.535
-F .641(mand name, or nothing if)144 96 R/F2 10/Courier@0 SF .641
-(type -t name)3.141 F F0 -.1(wo)3.141 G .641(uld not return).1 F F1
-(\214le)3.14 E F0 5.64(.T).18 G(he)-5.64 E/F3 10/Times-Bold@0 SF<ad50>
-3.14 E F0 .64(option forces a)3.14 F/F4 9/Times-Bold@0 SF -.666(PA)3.14
-G(TH)-.189 E F0 .112(search for each)144 108 R F1(name)2.612 E F0 2.612
-(,e)C -.15(ve)-2.862 G 2.613(ni).15 G(f)-2.613 E F2 .113(type -t name)
-2.613 F F0 -.1(wo)2.613 G .113(uld not return).1 F F1(\214le)2.613 E F0
-5.113(.I).18 G 2.613(fac)-5.113 G .113(ommand is hashed,)-2.613 F F3
-<ad70>2.613 E F0(and)144 120 Q F3<ad50>2.945 E F0 .445
-(print the hashed v)2.945 F .444
+-.35 E/F1 10/Times-Bold@0 SF(type)108 84 Q F0([)2.5 E F1(\255aftpP)A F0
+(])A/F2 10/Times-Italic@0 SF(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5
+E -.4(Wi)144 96 S .174(th no options, indicate ho).4 F 2.674(we)-.25 G
+(ach)-2.674 E F2(name)3.034 E F0 -.1(wo)2.854 G .173
+(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F
+F1<ad74>144 108 Q F0 .842(option is used,)3.342 F F1(type)3.342 E F0
+.843(prints a string which is one of)3.343 F F2(alias)3.343 E F0(,).27 E
+F2 -.1(ke)3.343 G(ywor)-.2 E(d)-.37 E F0(,).77 E F2(function)3.343 E F0
+(,).24 E F2 -.2(bu)3.343 G(iltin).2 E F0 3.343(,o).24 G(r)-3.343 E F2
+(\214le)5.253 E F0(if)3.523 E F2(name)144.36 120 Q F0 .087
+(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087
+(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15
+(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2
+(name)2.946 E F0 .086(is not)2.766 F .118
+(found, then nothing is printed, and an e)144 132 R .118
+(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F
+F1<ad70>2.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855
+(either returns the name of the disk \214le that w)144 144 R .855
+(ould be e)-.1 F -.15(xe)-.15 G .855(cuted if).15 F F2(name)3.715 E F0
+.855(were speci\214ed as a com-)3.535 F .64(mand name, or nothing if)144
+156 R/F3 10/Courier@0 SF .64(type -t name)3.14 F F0 -.1(wo)3.14 G .641
+(uld not return).1 F F2(\214le)3.141 E F0 5.641(.T).18 G(he)-5.641 E F1
+<ad50>3.141 E F0 .641(option forces a)3.141 F/F4 9/Times-Bold@0 SF -.666
+(PA)3.141 G(TH)-.189 E F0 .113(search for each)144 168 R F2(name)2.613 E
+F0 2.613(,e)C -.15(ve)-2.863 G 2.613(ni).15 G(f)-2.613 E F3 .113
+(type -t name)2.613 F F0 -.1(wo)2.613 G .113(uld not return).1 F F2
+(\214le)2.613 E F0 5.113(.I).18 G 2.613(fa)-5.113 G .112
+(command is hashed,)-.001 F F1<ad70>2.612 E F0(and)144 180 Q F1<ad50>
+2.944 E F0 .444(print the hashed v)2.944 F .444
(alue, not necessarily the \214le that appears \214rst in)-.25 F F4
--.666(PA)2.944 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .444(If the)
-4.944 F F3<ad61>2.944 E F0(option)2.944 E .265(is used,)144 132 R F3
+-.666(PA)2.945 G(TH)-.189 E/F5 9/Times-Roman@0 SF(.)A F0 .445(If the)
+4.945 F F1<ad61>2.945 E F0(option)2.945 E .265(is used,)144 192 R F1
(type)2.765 E F0 .265(prints all of the places that contain an e)2.765 F
--.15(xe)-.15 G .265(cutable named).15 F F1(name)2.765 E F0 5.265(.T).18
-G .265(his includes aliases)-5.265 F .427
-(and functions, if and only if the)144 144 R F3<ad70>2.926 E F0 .426
-(option is not also used.)2.926 F .426
-(The table of hashed commands is not)5.426 F .548(consulted when using)
-144 156 R F3<ad61>3.048 E F0 5.548(.T)C(he)-5.548 E F3<ad66>3.048 E F0
-.549(option suppresses shell function lookup, as with the)3.048 F F3
-(command)3.049 E F0 -.2(bu)144 168 S(iltin.).2 E F3(type)5 E F0
+-.15(xe)-.15 G .265(cutable named).15 F F2(name)2.765 E F0 5.265(.T).18
+G .265(his includes aliases)-5.265 F .426
+(and functions, if and only if the)144 204 R F1<ad70>2.926 E F0 .426
+(option is not also used.)2.926 F .427
+(The table of hashed commands is not)5.426 F .549(consulted when using)
+144 216 R F1<ad61>3.049 E F0 5.549(.T)C(he)-5.549 E F1<ad66>3.049 E F0
+.548(option suppresses shell function lookup, as with the)3.049 F F1
+(command)3.048 E F0 -.2(bu)144 228 S(iltin.).2 E F1(type)5 E F0
(returns true if all of the ar)2.5 E(guments are found, f)-.18 E
-(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F3(ulimit)108 184.8
-Q F0([)2.5 E F3(\255HST)A(abcde\214lmnpqrstuvx)-.92 E F0([)2.5 E F1
-(limit)A F0(]])A(Pro)144 196.8 Q .244(vides control o)-.15 F -.15(ve)
--.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244
+(alse if an)-.1 E 2.5(ya)-.15 G(re not found.)-2.5 E F1(ulimit)108 244.8
+Q F0([)2.5 E F1(\255HST)A(abcde\214lmnpqrstuvx)-.92 E F0([)2.5 E F2
+(limit)A F0(]])A(Pro)144 256.8 Q .243(vides control o)-.15 F -.15(ve)
+-.15 G 2.743(rt).15 G .243(he resources a)-2.743 F -.25(va)-.2 G .244
(ilable to the shell and to processes started by it, on systems).25 F
-.943(that allo)144 208.8 R 3.443(ws)-.25 G .943(uch control.)-3.443 F
-(The)5.943 E F3<ad48>3.443 E F0(and)3.443 E F3<ad53>3.444 E F0 .944
+.944(that allo)144 268.8 R 3.444(ws)-.25 G .944(uch control.)-3.444 F
+(The)5.944 E F1<ad48>3.444 E F0(and)3.444 E F1<ad53>3.444 E F0 .943
(options specify that the hard or soft limit is set for the)3.444 F(gi)
-144 220.8 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208
+144 280.8 Q -.15(ve)-.25 G 2.708(nr).15 G 2.708(esource. A)-2.708 F .208
(hard limit cannot be increased by a non-root user once it is set; a so\
-ft limit may)2.709 F .425(be increased up to the v)144 232.8 R .425
-(alue of the hard limit.)-.25 F .426(If neither)5.425 F F3<ad48>2.926 E
-F0(nor)2.926 E F3<ad53>2.926 E F0 .426
-(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144
-244.8 R .139(The v)5.139 F .139(alue of)-.25 F F1(limit)2.729 E F0 .139
+ft limit may)2.708 F .426(be increased up to the v)144 292.8 R .426
+(alue of the hard limit.)-.25 F .425(If neither)5.426 F F1<ad48>2.925 E
+F0(nor)2.925 E F1<ad53>2.925 E F0 .425
+(is speci\214ed, both the soft and)2.925 F .139(hard limits are set.)144
+304.8 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139
(can be a number in the unit speci\214ed for the resource or one)3.319 F
-.741(of the special v)144 256.8 R(alues)-.25 E F3(hard)3.241 E F0(,)A F3
-(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F3(unlimited)3.241 E F0 3.241(,w)
+.742(of the special v)144 316.8 R(alues)-.25 E F1(hard)3.242 E F0(,)A F1
+(soft)3.241 E F0 3.241(,o)C(r)-3.241 E F1(unlimited)3.241 E F0 3.241(,w)
C .741(hich stand for the current hard limit, the current)-3.241 F .78
-(soft limit, and no limit, respecti)144 268.8 R -.15(ve)-.25 G(ly).15 E
-5.78(.I)-.65 G(f)-5.78 E F1(limit)3.37 E F0 .78
+(soft limit, and no limit, respecti)144 328.8 R -.15(ve)-.25 G(ly).15 E
+5.78(.I)-.65 G(f)-5.78 E F2(limit)3.37 E F0 .78
(is omitted, the current v)3.96 F .78(alue of the soft limit of the)-.25
-F .498(resource is printed, unless the)144 280.8 R F3<ad48>2.999 E F0
-.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .499
+F .499(resource is printed, unless the)144 340.8 R F1<ad48>2.999 E F0
+.499(option is gi)2.999 F -.15(ve)-.25 G 2.999(n. When).15 F .498
(more than one resource is speci\214ed, the)2.999 F
-(limit name and unit are printed before the v)144 292.8 Q 2.5
-(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F3
-<ad61>144 304.8 Q F0(All current limits are reported)25.3 E F3<ad62>144
-316.8 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E
-F3<ad63>144 328.8 Q F0(The maximum size of core \214les created)25.86 E
-F3<ad64>144 340.8 Q F0(The maximum size of a process')24.74 E 2.5(sd)
--.55 G(ata se)-2.5 E(gment)-.15 E F3<ad65>144 352.8 Q F0
-(The maximum scheduling priority \("nice"\))25.86 E F3<ad66>144 364.8 Q
+(limit name and unit are printed before the v)144 352.8 Q 2.5
+(alue. Other)-.25 F(options are interpreted as follo)2.5 E(ws:)-.25 E F1
+<ad61>144 364.8 Q F0(All current limits are reported)25.3 E F1<ad62>144
+376.8 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E
+F1<ad63>144 388.8 Q F0(The maximum size of core \214les created)25.86 E
+F1<ad64>144 400.8 Q F0(The maximum size of a process')24.74 E 2.5(sd)
+-.55 G(ata se)-2.5 E(gment)-.15 E F1<ad65>144 412.8 Q F0
+(The maximum scheduling priority \("nice"\))25.86 E F1<ad66>144 424.8 Q
F0(The maximum size of \214les written by the shell and its children)
-26.97 E F3<ad69>144 376.8 Q F0(The maximum number of pending signals)
-27.52 E F3<ad6c>144 388.8 Q F0(The maximum size that may be lock)27.52 E
-(ed into memory)-.1 E F3<ad6d>144 400.8 Q F0
+26.97 E F1<ad69>144 436.8 Q F0(The maximum number of pending signals)
+27.52 E F1<ad6c>144 448.8 Q F0(The maximum size that may be lock)27.52 E
+(ed into memory)-.1 E F1<ad6d>144 460.8 Q F0
(The maximum resident set size \(man)21.97 E 2.5(ys)-.15 G
-(ystems do not honor this limit\))-2.5 E F3<ad6e>144 412.8 Q F0 .791(Th\
+(ystems do not honor this limit\))-2.5 E F1<ad6e>144 472.8 Q F0 .791(Th\
e maximum number of open \214le descriptors \(most systems do not allo)
-24.74 F 3.29(wt)-.25 G .79(his v)-3.29 F .79(alue to)-.25 F(be set\))180
-424.8 Q F3<ad70>144 436.8 Q F0
-(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F3
-<ad71>144 448.8 Q F0
-(The maximum number of bytes in POSIX message queues)24.74 E F3<ad72>144
-460.8 Q F0(The maximum real-time scheduling priority)25.86 E F3<ad73>144
-472.8 Q F0(The maximum stack size)26.41 E F3<ad74>144 484.8 Q F0
-(The maximum amount of cpu time in seconds)26.97 E F3<ad75>144 496.8 Q
+24.74 F 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
+(be set\))180 484.8 Q F1<ad70>144 496.8 Q F0
+(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1
+<ad71>144 508.8 Q F0
+(The maximum number of bytes in POSIX message queues)24.74 E F1<ad72>144
+520.8 Q F0(The maximum real-time scheduling priority)25.86 E F1<ad73>144
+532.8 Q F0(The maximum stack size)26.41 E F1<ad74>144 544.8 Q F0
+(The maximum amount of cpu time in seconds)26.97 E F1<ad75>144 556.8 Q
F0(The maximum number of processes a)24.74 E -.25(va)-.2 G
-(ilable to a single user).25 E F3<ad76>144 508.8 Q F0
+(ilable to a single user).25 E F1<ad76>144 568.8 Q F0
(The maximum amount of virtual memory a)25.3 E -.25(va)-.2 G
-(ilable to the shell).25 E F3<ad78>144 520.8 Q F0
-(The maximum number of \214le locks)25.3 E F3<ad54>144 532.8 Q F0
-(The maximum number of threads)23.63 E(If)144 549.6 Q F1(limit)2.933 E
+(ilable to the shell).25 E F1<ad78>144 580.8 Q F0
+(The maximum number of \214le locks)25.3 E F1<ad54>144 592.8 Q F0
+(The maximum number of threads)23.63 E(If)144 609.6 Q F2(limit)2.933 E
F0 .343(is gi)3.523 F -.15(ve)-.25 G .343(n, it is the ne).15 F 2.843
-(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F3<ad61>
+(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F1<ad61>
2.843 E F0 .343(option is display only\).)2.843 F .343(If no)5.343 F
-.176(option is gi)144 561.6 R -.15(ve)-.25 G .176(n, then).15 F F3<ad66>
-2.676 E F0 .175(is assumed.)2.676 F -1.11(Va)5.175 G .175
-(lues are in 1024-byte increments, e)1.11 F .175(xcept for)-.15 F F3
-<ad74>2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 573.6
-Q F3<ad70>2.515 E F0 2.515(,w)C .015
-(hich is in units of 512-byte blocks, and)-2.515 F F3<ad54>2.516 E F0(,)
-A F3<ad62>2.516 E F0(,)A F3<ad6e>2.516 E F0 2.516(,a)C(nd)-2.516 E F3
-<ad75>2.516 E F0 2.516(,w)C .016(hich are unscaled v)-2.516 F(al-)-.25 E
-3.788(ues. The)144 585.6 R 1.287(return status is 0 unless an in)3.787 F
+.175(option is gi)144 621.6 R -.15(ve)-.25 G .175(n, then).15 F F1<ad66>
+2.675 E F0 .175(is assumed.)2.675 F -1.11(Va)5.175 G .175
+(lues are in 1024-byte increments, e)1.11 F .176(xcept for)-.15 F F1
+<ad74>2.676 E F0 2.676(,w)C .176(hich is in)-2.676 F(seconds,)144 633.6
+Q F1<ad70>2.516 E F0 2.516(,w)C .016
+(hich is in units of 512-byte blocks, and)-2.516 F F1<ad54>2.516 E F0(,)
+A F1<ad62>2.515 E F0(,)A F1<ad6e>2.515 E F0 2.515(,a)C(nd)-2.515 E F1
+<ad75>2.515 E F0 2.515(,w)C .015(hich are unscaled v)-2.515 F(al-)-.25 E
+3.787(ues. The)144 645.6 R 1.287(return status is 0 unless an in)3.787 F
-.25(va)-.4 G 1.287(lid option or ar).25 F 1.287
(gument is supplied, or an error occurs)-.18 F(while setting a ne)144
-597.6 Q 2.5(wl)-.25 G(imit.)-2.5 E F3(umask)108 614.4 Q F0([)2.5 E F3
-<ad70>A F0 2.5(][)C F3<ad53>-2.5 E F0 2.5(][)C F1(mode)-2.5 E F0(])A .2
-(The user \214le-creation mask is set to)144 626.4 R F1(mode)2.7 E F0
-5.2(.I).18 G(f)-5.2 E F1(mode)3.08 E F0(be)2.88 E .2
+657.6 Q 2.5(wl)-.25 G(imit.)-2.5 E F1(umask)108 674.4 Q F0([)2.5 E F1
+<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0 2.5(][)C F2(mode)-2.5 E F0(])A .2
+(The user \214le-creation mask is set to)144 686.4 R F2(mode)2.7 E F0
+5.2(.I).18 G(f)-5.2 E F2(mode)3.08 E F0(be)2.88 E .2
(gins with a digit, it is interpreted as an octal)-.15 F .066(number; o\
therwise it is interpreted as a symbolic mode mask similar to that acce\
-pted by)144 638.4 R F1 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
-650.4 Q F1(mode)3.262 E F0 .382(is omitted, the current v)3.062 F .382
-(alue of the mask is printed.)-.25 F(The)5.382 E F3<ad53>2.882 E F0 .382
+pted by)144 698.4 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
+710.4 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+(alue of the mask is printed.)-.25 F(The)5.382 E F1<ad53>2.882 E F0 .382
(option causes the mask to be)2.882 F .547
-(printed in symbolic form; the def)144 662.4 R .547
+(printed in symbolic form; the def)144 722.4 R .547
(ault output is an octal number)-.1 F 5.547(.I)-.55 G 3.047(ft)-5.547 G
-(he)-3.047 E F3<ad70>3.047 E F0 .547(option is supplied, and)3.047 F F1
-(mode)144.38 674.4 Q F0 .551
-(is omitted, the output is in a form that may be reused as input.)3.231
-F .552(The return status is 0 if the)5.552 F(mode w)144 686.4 Q
-(as successfully changed or if no)-.1 E F1(mode)2.5 E F0(ar)2.5 E
-(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E F3
-(unalias)108 703.2 Q F0<5bad>2.5 E F3(a)A F0 2.5(][)C F1(name)-2.5 E F0
-(...])2.5 E(Remo)144 715.2 Q 1.955 -.15(ve e)-.15 H(ach).15 E F1(name)
-4.155 E F0 1.655(from the list of de\214ned aliases.)4.155 F(If)6.655 E
-F3<ad61>4.155 E F0 1.655(is supplied, all alias de\214nitions are)4.155
-F(remo)144 727.2 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
-(alue is true unless a supplied)-.25 E F1(name)2.86 E F0
-(is not a de\214ned alias.)2.68 E(GNU Bash-4.0)72 768 Q(2009 February 7)
-140.96 E(66)190.95 E 0 Cg EP
+(he)-3.047 E F1<ad70>3.047 E F0 .547(option is supplied, and)3.047 F
+(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(66)190.95 E 0 Cg EP
%%Page: 67 67
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Bold@0 SF(unset)108 84 Q F0<5bad>2.5 E F1(fv)A F0 2.5
-(][)C/F2 10/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E -.15(Fo)144 96 S
-3.106(re).15 G(ach)-3.106 E F2(name)3.106 E F0 3.106(,r).18 G(emo)-3.106
-E .906 -.15(ve t)-.15 H .606(he corresponding v).15 F .607
-(ariable or function.)-.25 F .607(If no options are supplied, or the)
-5.607 F F1<ad76>144 108 Q F0 .305(option is gi)2.805 F -.15(ve)-.25 G
-.305(n, each).15 F F2(name)3.165 E F0 .305(refers to a shell v)2.985 F
-2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .304
-(riables may not be unset.).25 F(If)5.304 E F1<ad66>144 120 Q F0 .459
-(is speci\214ed, each)2.959 F F2(name)3.319 E F0 .459
-(refers to a shell function, and the function de\214nition is remo)3.139
-F -.15(ve)-.15 G 2.96(d. Each).15 F .903(unset v)144 132 R .903
+-.35 E/F1 10/Times-Italic@0 SF(mode)144.38 84 Q F0 .552
+(is omitted, the output is in a form that may be reused as input.)3.232
+F .551(The return status is 0 if the)5.551 F(mode w)144 96 Q
+(as successfully changed or if no)-.1 E F1(mode)2.5 E F0(ar)2.5 E
+(gument w)-.18 E(as supplied, and f)-.1 E(alse otherwise.)-.1 E/F2 10
+/Times-Bold@0 SF(unalias)108 112.8 Q F0<5bad>2.5 E F2(a)A F0 2.5(][)C F1
+(name)-2.5 E F0(...])2.5 E(Remo)144 124.8 Q 1.955 -.15(ve e)-.15 H(ach)
+.15 E F1(name)4.155 E F0 1.655(from the list of de\214ned aliases.)4.155
+F(If)6.655 E F2<ad61>4.155 E F0 1.655
+(is supplied, all alias de\214nitions are)4.155 F(remo)144 136.8 Q -.15
+(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
+(alue is true unless a supplied)-.25 E F1(name)2.86 E F0
+(is not a de\214ned alias.)2.68 E F2(unset)108 153.6 Q F0<5bad>2.5 E F2
+(fv)A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E -.15(Fo)144 165.6 S 3.107
+(re).15 G(ach)-3.107 E F1(name)3.107 E F0 3.107(,r).18 G(emo)-3.107 E
+.907 -.15(ve t)-.15 H .607(he corresponding v).15 F .607
+(ariable or function.)-.25 F .606(If no options are supplied, or the)
+5.607 F F2<ad76>144 177.6 Q F0 .304(option is gi)2.804 F -.15(ve)-.25 G
+.304(n, each).15 F F1(name)3.164 E F0 .305(refers to a shell v)2.985 F
+2.805(ariable. Read-only)-.25 F -.25(va)2.805 G .305
+(riables may not be unset.).25 F(If)5.305 E F2<ad66>144 189.6 Q F0 .46
+(is speci\214ed, each)2.96 F F1(name)3.32 E F0 .459
+(refers to a shell function, and the function de\214nition is remo)3.14
+F -.15(ve)-.15 G 2.959(d. Each).15 F .902(unset v)144 201.6 R .902
(ariable or function is remo)-.25 F -.15(ve)-.15 G 3.402(df).15 G .902
-(rom the en)-3.402 F .902(vironment passed to subsequent commands.)-.4 F
-(If)5.902 E(an)144 144 Q 4.284(yo)-.15 G(f)-4.284 E/F3 9/Times-Bold@0 SF
-(RANDOM)4.284 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
+(rom the en)-3.402 F .903(vironment passed to subsequent commands.)-.4 F
+(If)5.903 E(an)144 213.6 Q 4.285(yo)-.15 G(f)-4.285 E/F3 9/Times-Bold@0
+SF(RANDOM)4.285 E/F4 9/Times-Roman@0 SF(,)A F3(SECONDS)4.035 E F4(,)A F3
(LINENO)4.035 E F4(,)A F3(HISTCMD)4.035 E F4(,)A F3(FUNCN)4.035 E(AME)
-.18 E F4(,)A F3(GR)4.035 E(OUPS)-.27 E F4(,)A F0(or)4.035 E F3(DIRST)
-4.285 E -.495(AC)-.81 G(K).495 E F0(are)4.035 E .329(unset, the)144 156
-R 2.829(yl)-.15 G .328(ose their special properties, e)-2.829 F -.15(ve)
--.25 G 2.828(ni).15 G 2.828(ft)-2.828 G(he)-2.828 E 2.828(ya)-.15 G .328
-(re subsequently reset.)-2.828 F .328(The e)5.328 F .328
-(xit status is true)-.15 F(unless a)144 168 Q F2(name)2.86 E F0
-(is readonly)2.68 E(.)-.65 E F1(wait)108 184.8 Q F0([)2.5 E F2 2.5(n.)C
-(..)-2.5 E F0(])A -.8(Wa)144 196.8 S .288
+4.284 E -.495(AC)-.81 G(K).495 E F0(are)4.034 E .328(unset, the)144
+225.6 R 2.828(yl)-.15 G .328(ose their special properties, e)-2.828 F
+-.15(ve)-.25 G 2.828(ni).15 G 2.828(ft)-2.828 G(he)-2.828 E 2.828(ya)
+-.15 G .328(re subsequently reset.)-2.828 F .328(The e)5.328 F .329
+(xit status is true)-.15 F(unless a)144 237.6 Q F1(name)2.86 E F0
+(is readonly)2.68 E(.)-.65 E F2(wait)108 254.4 Q F0([)2.5 E F1 2.5(n.)C
+(..)-2.5 E F0(])A -.8(Wa)144 266.4 S .288
(it for each speci\214ed process and return its termination status.).8 F
-(Each)5.288 E F2(n)3.148 E F0 .288(may be a process ID or a)3.028 F .722
-(job speci\214cation; if a job spec is gi)144 208.8 R -.15(ve)-.25 G
+(Each)5.288 E F1(n)3.148 E F0 .287(may be a process ID or a)3.028 F .722
+(job speci\214cation; if a job spec is gi)144 278.4 R -.15(ve)-.25 G
.722(n, all processes in that job').15 F 3.222(sp)-.55 G .722
(ipeline are w)-3.222 F .722(aited for)-.1 F 5.722(.I)-.55 G(f)-5.722 E
-F2(n)3.582 E F0(is)3.462 E 1.265(not gi)144 220.8 R -.15(ve)-.25 G 1.265
-(n, all currently acti).15 F 1.565 -.15(ve c)-.25 H 1.265
-(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.266
-(nd the return status is zero.)-3.765 F(If)6.266 E F2(n)4.126 E F0 .457
-(speci\214es a non-e)144 232.8 R .457
+F1(n)3.583 E F0(is)3.463 E 1.266(not gi)144 290.4 R -.15(ve)-.25 G 1.266
+(n, all currently acti).15 F 1.566 -.15(ve c)-.25 H 1.265
+(hild processes are w).15 F 1.265(aited for)-.1 F 3.765(,a)-.4 G 1.265
+(nd the return status is zero.)-3.765 F(If)6.265 E F1(n)4.125 E F0 .456
+(speci\214es a non-e)144 302.4 R .457
(xistent process or job, the return status is 127.)-.15 F .457
-(Otherwise, the return status is the)5.457 F -.15(ex)144 244.8 S
+(Otherwise, the return status is the)5.457 F -.15(ex)144 314.4 S
(it status of the last process or job w).15 E(aited for)-.1 E(.)-.55 E
-/F5 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 261.6 Q F0(If)108 273.6 Q
-F1(bash)4.396 E F0 1.896(is started with the name)4.396 F F1(rbash)4.397
-E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F1<ad72>4.397 E F0 1.897
-(option is supplied at in)4.397 F -.2(vo)-.4 G 1.897
-(cation, the shell becomes).2 F 3.446(restricted. A)108 285.6 R .945
-(restricted shell is used to set up an en)3.446 F .945
-(vironment more controlled than the standard shell.)-.4 F(It)5.945 E
-(beha)108 297.6 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F1
+/F5 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72 331.2 Q F0(If)108 343.2 Q
+F2(bash)4.397 E F0 1.897(is started with the name)4.397 F F2(rbash)4.397
+E F0 4.397(,o)C 4.397(rt)-4.397 G(he)-4.397 E F2<ad72>4.397 E F0 1.896
+(option is supplied at in)4.397 F -.2(vo)-.4 G 1.896
+(cation, the shell becomes).2 F 3.445(restricted. A)108 355.2 R .945
+(restricted shell is used to set up an en)3.445 F .946
+(vironment more controlled than the standard shell.)-.4 F(It)5.946 E
+(beha)108 367.2 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E F2
(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E
-(wing are disallo)-.25 E(wed or not performed:)-.25 E 32.5<8363>108
-314.4 S(hanging directories with)-32.5 E F1(cd)2.5 E F0 32.5<8373>108
-331.2 S(etting or unsetting the v)-32.5 E(alues of)-.25 E F1(SHELL)2.5 E
-F0(,)A F1 -.74(PA)2.5 G(TH)-.21 E F0(,)A F1(ENV)2.5 E F0 2.5(,o)C(r)-2.5
-E F1 -.3(BA)2.5 G(SH_ENV).3 E F0 32.5<8373>108 348 S
-(pecifying command names containing)-32.5 E F1(/)2.5 E F0 32.5<8373>108
-364.8 S(pecifying a \214le name containing a)-32.5 E F1(/)2.5 E F0
-(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E F0 -.2(bu)5 G
-(iltin command).2 E 32.5<8353>108 381.6 S .351
+(wing are disallo)-.25 E(wed or not performed:)-.25 E 32.5<8363>108 384
+S(hanging directories with)-32.5 E F2(cd)2.5 E F0 32.5<8373>108 400.8 S
+(etting or unsetting the v)-32.5 E(alues of)-.25 E F2(SHELL)2.5 E F0(,)A
+F2 -.74(PA)2.5 G(TH)-.21 E F0(,)A F2(ENV)2.5 E F0 2.5(,o)C(r)-2.5 E F2
+-.3(BA)2.5 G(SH_ENV).3 E F0 32.5<8373>108 417.6 S
+(pecifying command names containing)-32.5 E F2(/)2.5 E F0 32.5<8373>108
+434.4 S(pecifying a \214le name containing a)-32.5 E F2(/)2.5 E F0
+(as an ar)2.5 E(gument to the)-.18 E F2(.)2.5 E F0 -.2(bu)5 G
+(iltin command).2 E 32.5<8353>108 451.2 S .351
(pecifying a \214lename containing a slash as an ar)-32.5 F .351
-(gument to the)-.18 F F1<ad70>2.851 E F0 .351(option to the)2.851 F F1
-(hash)2.852 E F0 -.2(bu)2.852 G .352(iltin com-).2 F(mand)144 393.6 Q
-32.5<8369>108 410.4 S(mporting function de\214nitions from the shell en)
--32.5 E(vironment at startup)-.4 E 32.5<8370>108 427.2 S(arsing the v)
--32.5 E(alue of)-.25 E F1(SHELLOPTS)2.5 E F0(from the shell en)2.5 E
-(vironment at startup)-.4 E 32.5<8372>108 444 S(edirecting output using\
- the >, >|, <>, >&, &>, and >> redirection operators)-32.5 E 32.5<8375>
-108 460.8 S(sing the)-32.5 E F1(exec)2.5 E F0 -.2(bu)2.5 G
+(gument to the)-.18 F F2<ad70>2.851 E F0 .351(option to the)2.851 F F2
+(hash)2.851 E F0 -.2(bu)2.851 G .351(iltin com-).2 F(mand)144 463.2 Q
+32.5<8369>108 480 S(mporting function de\214nitions from the shell en)
+-32.5 E(vironment at startup)-.4 E 32.5<8370>108 496.8 S(arsing the v)
+-32.5 E(alue of)-.25 E F2(SHELLOPTS)2.5 E F0(from the shell en)2.5 E
+(vironment at startup)-.4 E 32.5<8372>108 513.6 S(edirecting output usi\
+ng the >, >|, <>, >&, &>, and >> redirection operators)-32.5 E 32.5
+<8375>108 530.4 S(sing the)-32.5 E F2(exec)2.5 E F0 -.2(bu)2.5 G
(iltin command to replace the shell with another command).2 E 32.5<8361>
-108 477.6 S(dding or deleting b)-32.5 E(uiltin commands with the)-.2 E
-F1<ad66>2.5 E F0(and)2.5 E F1<ad64>2.5 E F0(options to the)2.5 E F1
-(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8355>108 494.4 S
-(sing the)-32.5 E F1(enable)2.5 E F0 -.2(bu)2.5 G
+108 547.2 S(dding or deleting b)-32.5 E(uiltin commands with the)-.2 E
+F2<ad66>2.5 E F0(and)2.5 E F2<ad64>2.5 E F0(options to the)2.5 E F2
+(enable)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8355>108 564 S
+(sing the)-32.5 E F2(enable)2.5 E F0 -.2(bu)2.5 G
(iltin command to enable disabled shell b).2 E(uiltins)-.2 E 32.5<8373>
-108 511.2 S(pecifying the)-32.5 E F1<ad70>2.5 E F0(option to the)2.5 E
-F1(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8374>108 528 S
-(urning of)-32.5 E 2.5(fr)-.25 G(estricted mode with)-2.5 E F1(set +r)
-2.5 E F0(or)2.5 E F1(set +o r)2.5 E(estricted)-.18 E F0(.)A
-(These restrictions are enforced after an)108 544.8 Q 2.5(ys)-.15 G
+108 580.8 S(pecifying the)-32.5 E F2<ad70>2.5 E F0(option to the)2.5 E
+F2(command)2.5 E F0 -.2(bu)2.5 G(iltin command).2 E 32.5<8374>108 597.6
+S(urning of)-32.5 E 2.5(fr)-.25 G(estricted mode with)-2.5 E F2(set +r)
+2.5 E F0(or)2.5 E F2(set +o r)2.5 E(estricted)-.18 E F0(.)A
+(These restrictions are enforced after an)108 614.4 Q 2.5(ys)-.15 G
(tartup \214les are read.)-2.5 E 1.566
-(When a command that is found to be a shell script is e)108 561.6 R -.15
-(xe)-.15 G 1.566(cuted \(see).15 F F3 1.566(COMMAND EXECUTION)4.066 F F0
-(abo)3.816 E -.15(ve)-.15 G(\),).15 E F1(rbash)108 573.6 Q F0(turns of)
+(When a command that is found to be a shell script is e)108 631.2 R -.15
+(xe)-.15 G 1.567(cuted \(see).15 F F3 1.567(COMMAND EXECUTION)4.067 F F0
+(abo)3.817 E -.15(ve)-.15 G(\),).15 E F2(rbash)108 643.2 Q F0(turns of)
2.5 E 2.5(fa)-.25 G .3 -.15(ny r)-2.5 H(estrictions in the shell spa).15
E(wned to e)-.15 E -.15(xe)-.15 G(cute the script.).15 E F5(SEE ALSO)72
-590.4 Q F2(Bash Refer)108 602.4 Q(ence Manual)-.37 E F0 2.5(,B)C(rian F)
--2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2(The Gnu Readline Libr)108
-614.4 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)
--.15 E F2(The Gnu History Libr)108 626.4 Q(ary)-.15 E F0 2.5(,B)C
-(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2 -.8(Po)108 638.4 S
-(rtable Oper).8 E(ating System Interface \(POSIX\) P)-.15 E
-(art 2: Shell and Utilities)-.8 E F0 2.5(,I)C(EEE)-2.5 E F2(sh)108 650.4
-Q F0(\(1\),)A F2(ksh)2.5 E F0(\(1\),)A F2(csh)2.5 E F0(\(1\))A F2(emacs)
-108 662.4 Q F0(\(1\),)A F2(vi)2.5 E F0(\(1\))A F2 -.37(re)108 674.4 S
-(adline).37 E F0(\(3\))A F5(FILES)72 691.2 Q F2(/bin/bash)109.666 703.2
-Q F0(The)144 715.2 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E
-(GNU Bash-4.0)72 768 Q(2009 February 7)140.96 E(67)190.95 E 0 Cg EP
+660 Q F1(Bash Refer)108 672 Q(ence Manual)-.37 E F0 2.5(,B)C(rian F)-2.5
+E(ox and Chet Rame)-.15 E(y)-.15 E F1(The Gnu Readline Libr)108 684 Q
+(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E
+F1(The Gnu History Libr)108 696 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
+(ox and Chet Rame)-.15 E(y)-.15 E(GNU Bash-4.0)72 768 Q(2009 February 7)
+140.96 E(67)190.95 E 0 Cg EP
%%Page: 68 68
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
--.35 E/F1 10/Times-Italic@0 SF(/etc/pr)109.666 84 Q(o\214le)-.45 E F0
-(The systemwide initialization \214le, e)144 96 Q -.15(xe)-.15 G
-(cuted for login shells).15 E F1(~/.bash_pr)109.666 108 Q(o\214le)-.45 E
-F0(The personal initialization \214le, e)144 120 Q -.15(xe)-.15 G
-(cuted for login shells).15 E F1(~/.bashr)109.666 132 Q(c)-.37 E F0
-(The indi)144 144 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G
-(-shell startup \214le).15 E F1(~/.bash_lo)109.666 156 Q(gout)-.1 E F0
-(The indi)144 168 Q(vidual login shell cleanup \214le, e)-.25 E -.15(xe)
--.15 G(cuted when a login shell e).15 E(xits)-.15 E F1(~/.inputr)109.666
-180 Q(c)-.37 E F0(Indi)144 192 Q(vidual)-.25 E F1 -.37(re)2.5 G(adline)
-.37 E F0(initialization \214le)2.5 E/F2 10.95/Times-Bold@0 SF -.548(AU)
-72 208.8 S(THORS).548 E F0(Brian F)108 220.8 Q(ox, Free Softw)-.15 E
-(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 232.8 Q(g)-.18 E
-(Chet Rame)108 249.6 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)
--.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet.rame)108
-261.6 Q(y@case.edu)-.15 E F2 -.11(BU)72 278.4 S 2.738(GR).11 G(EPOR)
--2.738 E(TS)-.438 E F0 .567(If you \214nd a b)108 290.4 R .568(ug in)-.2
-F/F3 10/Times-Bold@0 SF(bash,)3.068 E F0 .568(you should report it.)
-3.068 F .568(But \214rst, you should mak)5.568 F 3.068(es)-.1 G .568
-(ure that it really is a b)-3.068 F .568(ug, and)-.2 F 5.626
-(that it appears in the latest v)108 302.4 R 5.625(ersion of)-.15 F F3
-(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.625
-(ersion is al)-.15 F -.1(wa)-.1 G 5.625(ys a).1 F -.25(va)-.2 G 5.625
-(ilable from).25 F F1(ftp://ftp.gnu.or)108 314.4 Q(g/pub/bash/)-.37 E F0
-(.)A .41(Once you ha)108 331.2 R .71 -.15(ve d)-.2 H .41
-(etermined that a b).15 F .41(ug actually e)-.2 F .411(xists, use the)
--.15 F F1(bashb)3.181 E(ug)-.2 E F0 .411(command to submit a b)3.131 F
-.411(ug report.)-.2 F(If)5.411 E .595(you ha)108 343.2 R .895 -.15
-(ve a \214)-.2 H .595(x, you are encouraged to mail that as well!).15 F
-.594(Suggestions and `philosophical' b)5.595 F .594(ug reports may)-.2 F
-(be mailed to)108 355.2 Q F1 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0
+-.35 E/F1 10/Times-Italic@0 SF -.8(Po)108 84 S(rtable Oper).8 E
+(ating System Interface \(POSIX\) P)-.15 E(art 2: Shell and Utilities)
+-.8 E F0 2.5(,I)C(EEE)-2.5 E F1(sh)108 96 Q F0(\(1\),)A F1(ksh)2.5 E F0
+(\(1\),)A F1(csh)2.5 E F0(\(1\))A F1(emacs)108 108 Q F0(\(1\),)A F1(vi)
+2.5 E F0(\(1\))A F1 -.37(re)108 120 S(adline).37 E F0(\(3\))A/F2 10.95
+/Times-Bold@0 SF(FILES)72 136.8 Q F1(/bin/bash)109.666 148.8 Q F0(The)
+144 160.8 Q/F3 10/Times-Bold@0 SF(bash)2.5 E F0 -.15(exe)2.5 G(cutable)
+.15 E F1(/etc/pr)109.666 172.8 Q(o\214le)-.45 E F0
+(The systemwide initialization \214le, e)144 184.8 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F1(~/.bash_pr)109.666 196.8 Q(o\214le)-.45
+E F0(The personal initialization \214le, e)144 208.8 Q -.15(xe)-.15 G
+(cuted for login shells).15 E F1(~/.bashr)109.666 220.8 Q(c)-.37 E F0
+(The indi)144 232.8 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G
+(-shell startup \214le).15 E F1(~/.bash_lo)109.666 244.8 Q(gout)-.1 E F0
+(The indi)144 256.8 Q(vidual login shell cleanup \214le, e)-.25 E -.15
+(xe)-.15 G(cuted when a login shell e).15 E(xits)-.15 E F1(~/.inputr)
+109.666 268.8 Q(c)-.37 E F0(Indi)144 280.8 Q(vidual)-.25 E F1 -.37(re)
+2.5 G(adline).37 E F0(initialization \214le)2.5 E F2 -.548(AU)72 297.6 S
+(THORS).548 E F0(Brian F)108 309.6 Q(ox, Free Softw)-.15 E(are F)-.1 E
+(oundation)-.15 E(bfox@gnu.or)108 321.6 Q(g)-.18 E(Chet Rame)108 338.4 Q
+1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)
+-2.5 E -.15(ve)-.25 G(rsity).15 E(chet.rame)108 350.4 Q(y@case.edu)-.15
+E F2 -.11(BU)72 367.2 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .568
+(If you \214nd a b)108 379.2 R .568(ug in)-.2 F F3(bash,)3.068 E F0 .568
+(you should report it.)3.068 F .568(But \214rst, you should mak)5.568 F
+3.068(es)-.1 G .568(ure that it really is a b)-3.068 F .567(ug, and)-.2
+F 5.625(that it appears in the latest v)108 391.2 R 5.625(ersion of)-.15
+F F3(bash)8.125 E F0 10.625(.T)C 5.625(he latest v)-10.625 F 5.626
+(ersion is al)-.15 F -.1(wa)-.1 G 5.626(ys a).1 F -.25(va)-.2 G 5.626
+(ilable from).25 F F1(ftp://ftp.gnu.or)108 403.2 Q(g/pub/bash/)-.37 E F0
+(.)A .411(Once you ha)108 420 R .711 -.15(ve d)-.2 H .411
+(etermined that a b).15 F .411(ug actually e)-.2 F .411(xists, use the)
+-.15 F F1(bashb)3.18 E(ug)-.2 E F0 .41(command to submit a b)3.13 F .41
+(ug report.)-.2 F(If)5.41 E .594(you ha)108 432 R .894 -.15(ve a \214)
+-.2 H .595(x, you are encouraged to mail that as well!).15 F .595
+(Suggestions and `philosophical' b)5.595 F .595(ug reports may)-.2 F
+(be mailed to)108 444 Q F1 -.2(bu)2.5 G(g-bash@gnu.or).2 E(g)-.37 E F0
(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3(gnu.bash.b)2.5 E(ug)
--.2 E F0(.)A(ALL b)108 372 Q(ug reports should include:)-.2 E(The v)108
-388.8 Q(ersion number of)-.15 E F3(bash)2.5 E F0(The hardw)108 400.8 Q
-(are and operating system)-.1 E(The compiler used to compile)108 412.8 Q
-2.5(Ad)108 424.8 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E
-2.5(As)108 436.8 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G
-(rcises the b).15 E(ug)-.2 E F1(bashb)108.27 453.6 Q(ug)-.2 E F0
+-.2 E F0(.)A(ALL b)108 460.8 Q(ug reports should include:)-.2 E(The v)
+108 477.6 Q(ersion number of)-.15 E F3(bash)2.5 E F0(The hardw)108 489.6
+Q(are and operating system)-.1 E(The compiler used to compile)108 501.6
+Q 2.5(Ad)108 513.6 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2
+E 2.5(As)108 525.6 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15
+G(rcises the b).15 E(ug)-.2 E F1(bashb)108.27 542.4 Q(ug)-.2 E F0
(inserts the \214rst three items automatically into the template it pro)
2.72 E(vides for \214ling a b)-.15 E(ug report.)-.2 E(Comments and b)108
-470.4 Q(ug reports concerning this manual page should be directed to)-.2
-E F1 -.15(ch)2.5 G(et@po.cwru.edu).15 E F0(.).25 E F2 -.11(BU)72 487.2 S
-(GS).11 E F0(It')108 499.2 Q 2.5(st)-.55 G(oo big and too slo)-2.5 E
--.65(w.)-.25 G 1.868(There are some subtle dif)108 516 R 1.868
+559.2 Q(ug reports concerning this manual page should be directed to)-.2
+E F1 -.15(ch)2.5 G(et@po.cwru.edu).15 E F0(.).25 E F2 -.11(BU)72 576 S
+(GS).11 E F0(It')108 588 Q 2.5(st)-.55 G(oo big and too slo)-2.5 E -.65
+(w.)-.25 G 1.869(There are some subtle dif)108 604.8 R 1.869
(ferences between)-.25 F F3(bash)4.369 E F0 1.869(and traditional v)
-4.369 F 1.869(ersions of)-.15 F F3(sh)4.369 E F0 4.369(,m)C 1.869
-(ostly because of the)-4.369 F/F4 9/Times-Bold@0 SF(POSIX)108 528 Q F0
-(speci\214cation.)2.25 E(Aliases are confusing in some uses.)108 544.8 Q
-(Shell b)108 561.6 Q
+4.369 F 1.869(ersions of)-.15 F F3(sh)4.368 E F0 4.368(,m)C 1.868
+(ostly because of the)-4.368 F/F4 9/Times-Bold@0 SF(POSIX)108 616.8 Q F0
+(speci\214cation.)2.25 E(Aliases are confusing in some uses.)108 633.6 Q
+(Shell b)108 650.4 Q
(uiltin commands and functions are not stoppable/restartable.)-.2 E
1.315(Compound commands and command sequences of the form `a ; b ; c' a\
-re not handled gracefully when)108 578.4 R .389
-(process suspension is attempted.)108 590.4 R .389
-(When a process is stopped, the shell immediately e)5.389 F -.15(xe)-.15
-G .39(cutes the ne).15 F .39(xt com-)-.15 F .193(mand in the sequence.)
-108 602.4 R .192(It suf)5.193 F .192(\214ces to place the sequence of c\
-ommands between parentheses to force it into a)-.25 F
-(subshell, which may be stopped as a unit.)108 614.4 Q(Array v)108 631.2
-Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E
-(There may be only one acti)108 648 Q .3 -.15(ve c)-.25 H
+re not handled gracefully when)108 667.2 R .39
+(process suspension is attempted.)108 679.2 R .389
+(When a process is stopped, the shell immediately e)5.39 F -.15(xe)-.15
+G .389(cutes the ne).15 F .389(xt com-)-.15 F .192
+(mand in the sequence.)108 691.2 R .192(It suf)5.192 F .192(\214ces to \
+place the sequence of commands between parentheses to force it into a)
+-.25 F(subshell, which may be stopped as a unit.)108 703.2 Q(Array v)108
+720 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E(GNU Bash-4.0)
+72 768 Q(2009 February 7)140.96 E(68)190.95 E 0 Cg EP
+%%Page: 69 69
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 389.54(SH\(1\) B).35 F(ASH\(1\))
+-.35 E(There may be only one acti)108 84 Q .3 -.15(ve c)-.25 H
(oprocess at a time.).15 E(GNU Bash-4.0)72 768 Q(2009 February 7)140.96
-E(68)190.95 E 0 Cg EP
+E(69)190.95 E 0 Cg EP
%%Trailer
end
%%EOF
subject to the following conditions.
The @code{ERR} trap is not executed if the failed command is part of the
command list immediately following an @code{until} or @code{while} keyword,
-part of the test in an @code{if} statement,
+part of the test following the @code{if} or @code{elif} reserved words,
part of a command executed in a @code{&&} or @code{||} list,
or if the command's return
status is being inverted using @code{!}.
@item -e
Exit immediately if a pipeline (@pxref{Pipelines}), which may consist
of a single simple command (@pxref{Simple Commands}),
-a subshell command enclosed in parentheses (@pxref{Grouping Commands}),
+a subshell command enclosed in parentheses (@pxref{Command Grouping}),
or one of the commands executed as part of a command list enclosed
-by braces (@pxref{Grouping Commands})
+by braces (@pxref{Command Grouping})
returns a non-zero status.
The shell does not exit if the command that fails is part of the
command list immediately following a @code{while} or @code{until} keyword,
the template it provides for filing a bug report.
Please send all reports concerning this manual to
-@email{chet.ramey@case.edu}.
+@email{chet.ramey@@case.edu}.
@node Major Differences From The Bourne Shell
@appendix Major Differences From The Bourne Shell
+++ /dev/null
-texinfo.tex.20030205
\ No newline at end of file
--- /dev/null
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2003-02-03.16}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+%
+% This texinfo.tex file 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 texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+% In other words, you are welcome to use, share and improve this program.
+% You are forbidden to forbid anyone else to use, share and improve
+% what you give them. Help stamp out software-hoarding!
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org),
+% and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+%
+% The texinfo.tex in any given Texinfo distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\message{Basics,}
+\chardef\other=12
+
+% We never want plain's outer \+ definition in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some parts of plain tex whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexstar=\*
+\let\ptext=\t
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
+
+% In some macros, we cannot use the `\? notation---the left quote is
+% in some cases the escape char.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dotChar = `\.
+\chardef\equalChar = `\=
+\chardef\exclamChar= `\!
+\chardef\questChar = `\?
+\chardef\semiChar = `\;
+\chardef\spaceChar = `\ %
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% True if #1 is the empty string, i.e., called like `\ifempty{}'.
+%
+\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}%
+\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}%
+
+% Hyphenation fixes.
+\hyphenation{ap-pen-dix}
+\hyphenation{mini-buf-fer mini-buf-fers}
+\hyphenation{eshell}
+\hyphenation{white-space}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\undefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines\maxdimen
+}%
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \escapechar = `\\ % use backslash in output files.
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingxxx.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 2\baselineskip
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \normalturnoffactive
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1 \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg#1{%
+ \let\next = #1%
+ \begingroup
+ \obeylines
+ \futurelet\temp\parseargx
+}
+
+% If the next token is an obeyed space (from an @example environment or
+% the like), remove it and recurse. Otherwise, we're done.
+\def\parseargx{%
+ % \obeyedspace is defined far below, after the definition of \sepspaces.
+ \ifx\obeyedspace\temp
+ \expandafter\parseargdiscardspace
+ \else
+ \expandafter\parseargline
+ \fi
+}
+
+% Remove a single space (as the delimiter token to the macro call).
+{\obeyspaces %
+ \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ %
+ % First remove any @c comment, then any @comment.
+ % Result of each macro is put in \toks0.
+ \argremovec #1\c\relax %
+ \expandafter\argremovecomment \the\toks0 \comment\relax %
+ %
+ % Call the caller's macro, saved as \next in \parsearg.
+ \expandafter\next\expandafter{\the\toks0}%
+ }%
+}
+
+% Since all \c{,omment} does is throw away the argument, we can let TeX
+% do that for us. The \relax here is matched by the \relax in the call
+% in \parseargline; it could be more or less anything, its purpose is
+% just to delimit the argument to the \c.
+\def\argremovec#1\c#2\relax{\toks0 = {#1}}
+\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
+
+% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
+% @end itemize @c foo
+% will have two active spaces as part of the argument with the
+% `itemize'. Here we remove all active spaces from #1, and assign the
+% result to \toks0.
+%
+% This loses if there are any *other* active characters besides spaces
+% in the argument -- _ ^ +, for example -- since they get expanded.
+% Fortunately, Texinfo does not define any such commands. (If it ever
+% does, the catcode of the characters in questionwill have to be changed
+% here.) But this means we cannot call \removeactivespaces as part of
+% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
+% that \parsearg gets might well have any character at all in it.
+%
+\def\removeactivespaces#1{%
+ \begingroup
+ \ignoreactivespaces
+ \edef\temp{#1}%
+ \global\toks0 = \expandafter{\temp}%
+ \endgroup
+}
+
+% Change the active space to expand to nothing.
+%
+\begingroup
+ \obeyspaces
+ \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
+\endgroup
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+%% These are used to keep @begin/@end levels from running away
+%% Call \inENV within environments (after a \begingroup)
+\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
+\def\ENVcheck{%
+\ifENV\errmessage{Still within an environment; press RETURN to continue}
+\endgroup\fi} % This is not perfect, but it should reduce lossage
+
+% @begin foo is the same as @foo, for now.
+\newhelp\EMsimple{Press RETURN to continue.}
+
+\outer\def\begin{\parsearg\beginxxx}
+
+\def\beginxxx #1{%
+\expandafter\ifx\csname #1\endcsname\relax
+{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
+\csname #1\endcsname\fi}
+
+% @end foo executes the definition of \Efoo.
+%
+\def\end{\parsearg\endxxx}
+\def\endxxx #1{%
+ \removeactivespaces{#1}%
+ \edef\endthing{\the\toks0}%
+ %
+ \expandafter\ifx\csname E\endthing\endcsname\relax
+ \expandafter\ifx\csname \endthing\endcsname\relax
+ % There's no \foo, i.e., no ``environment'' foo.
+ \errhelp = \EMsimple
+ \errmessage{Undefined command `@end \endthing'}%
+ \else
+ \unmatchedenderror\endthing
+ \fi
+ \else
+ % Everything's ok; the right environment has been started.
+ \csname E\endthing\endcsname
+ \fi
+}
+
+% There is an environment #1, but it hasn't been started. Give an error.
+%
+\def\unmatchedenderror#1{%
+ \errhelp = \EMsimple
+ \errmessage{This `@end #1' doesn't have a matching `@#1'}%
+}
+
+% Define the control sequence \E#1 to give an unmatched @end error.
+%
+\def\defineunmatchedend#1{%
+ \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
+}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux file.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ptexi
+ \else\ifx\temp\jmacro \j
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=3000 }
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=3000 }
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\def\group{\begingroup
+ \ifnum\catcode13=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ %
+ % The \vtop we start below produces a box with normal height and large
+ % depth; thus, TeX puts \baselineskip glue before it, and (when the
+ % next line of text is done) \lineskip glue after it. (See p.82 of
+ % the TeXbook.) Thus, space below is not quite equal to space
+ % above. But it's pretty close.
+ \def\Egroup{%
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \copy\groupbox
+ \endgroup % End the \group.
+ }%
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % We have to put a strut on the last line in case the @group is in
+ % the midst of an example, rather than completely enclosing it.
+ % Otherwise, the interline space between the last line of the group
+ % and the first line afterwards is too small. But we can't put the
+ % strut in \Egroup, since there it would be on a line by itself.
+ % Hence this just inserts a strut at the beginning of each line.
+ \everypar = {\strut}%
+ %
+ % Since we have a strut on every line, we don't need any of TeX's
+ % normal interline spacing.
+ \offinterlineskip
+ %
+ % OK, but now we have to do something about blank
+ % lines in the input in @example-like environments, which normally
+ % just turn into \lisppar, which will insert no space now that we've
+ % turned off the interline space. Simplest is to make them be an
+ % empty paragraph.
+ \ifx\par\lisppar
+ \edef\par{\leavevmode \par}%
+ %
+ % Reset ^^M's definition to new definition of \par.
+ \obeylines
+ \fi
+ %
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\def\need{\parsearg\needx}
+
+% Old definition--didn't work.
+%\def\needx #1{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\def\needx#1{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break
+
+\let\br = \par
+
+% @dots{} output an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+ \leavevmode
+ \hbox to 1.5em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \leavevmode
+ \hbox to 2em{%
+ \hskip 0pt plus 0.25fil minus 0.25fil
+ .\hss.\hss.\hss.%
+ \hskip 0pt plus 0.5fil minus 0.5fil
+ }%
+ \spacefactor=3000
+}
+
+
+% @page forces the start of a new page
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\def\exdent{\parsearg\exdentyyy}
+\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
+
+% This defn is used inside nofill environments such as @example.
+\def\nofillexdent{\parsearg\nofillexdentyyy}
+\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
+\leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include file insert text of that file as input.
+% Allow normal characters that we make active in the argument (a file name).
+\def\include{\begingroup
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \parsearg\includezzz}
+% Restore active chars for included file.
+\def\includezzz#1{\endgroup\begingroup
+ % Read the included file in a group so nested @include's work.
+ \def\thisfile{#1}%
+ \let\value=\expandablevalue
+ \input\thisfile
+\endgroup}
+
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\def\center{\parsearg\docenter}
+\def\docenter#1{{%
+ \ifhmode \hfil\break \fi
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{\hfil \ignorespaces#1\unskip \hfil}%
+ \ifhmode \break \fi
+}}
+
+% @sp n outputs n lines of vertical space
+
+\def\sp{\parsearg\spxxx}
+\def\spxxx #1{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% We cannot implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\def\paragraphindent{\parsearg\doparagraphindent}
+\def\doparagraphindent#1{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\def\exampleindent{\parsearg\doexampleindent}
+\def\doexampleindent#1{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+% We don't use $'s directly in the definition of \math because we need
+% to set catcodes according to plain TeX first, to allow for subscripts,
+% superscripts, special math chars, etc.
+%
+\let\implicitmath = $%$ font-lock fix
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ within @math be active (mathcode "8000), and distinguish by seeing
+% if the current family is \slfam, which is what @var uses.
+%
+{\catcode\underChar = \active
+\gdef\mathunderscore{%
+ \catcode\underChar=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+}}
+%
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care. Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathcode`\_="8000 \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ \implicitmath\finishmath}
+\def\finishmath#1{#1\implicitmath\Etex}
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an
+% argument to a command which set the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{\implicitmath\ptexbullet\implicitmath}
+\def\minus{\implicitmath-\implicitmath}
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \iflinks
+ \readauxfile
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ % Just to be on the safe side, close the input stream before the \input.
+ \openin 1 texinfo.cnf
+ \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
+ \closein1
+ \temp
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+\ifx\pdfoutput\undefined
+ \pdffalse
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \let\pdfmakeoutlines = \relax
+\else
+ \pdftrue
+ \pdfoutput = 1
+ \input pdfcolor
+ \def\dopdfimage#1#2#3{%
+ \def\imagewidth{#2}%
+ \def\imageheight{#3}%
+ % without \immediate, pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifx\empty\imagewidth\else width \imagewidth \fi
+ \ifx\empty\imageheight\else height \imageheight \fi
+ \ifnum\pdftexversion<13
+ #1.pdf%
+ \else
+ {#1.pdf}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
+ \def\pdfmkpgn#1{#1}
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\pdfendlink}
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ \def\pdfmakeoutlines{{%
+ \openin 1 \jobname.toc
+ \ifeof 1\else\begingroup
+ \closein 1
+ % Thanh's hack / proper braces in bookmarks
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+ %
+ \def\chapentry ##1##2##3{}
+ \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
+ \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
+ \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
+ \let\appendixentry = \chapentry
+ \let\unnumbchapentry = \chapentry
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
+ \input \jobname.toc
+ \def\chapentry ##1##2##3{%
+ \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+ \def\secentry ##1##2##3##4{%
+ \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
+ \def\subsecentry ##1##2##3##4##5{%
+ \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
+ \def\subsubsecentry ##1##2##3##4##5##6{%
+ \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
+ \let\appendixentry = \chapentry
+ \let\unnumbchapentry = \chapentry
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
+ %
+ % Make special characters normal for writing to the pdf file.
+ %
+ \indexnofonts
+ \let\tt=\relax
+ \turnoffactive
+ \input \jobname.toc
+ \endgroup\fi
+ }}
+ \def\makelinks #1,{%
+ \def\params{#1}\def\E{END}%
+ \ifx\params\E
+ \let\nextmakelinks=\relax
+ \else
+ \let\nextmakelinks=\makelinks
+ \ifnum\lnkcount>0,\fi
+ \picknum{#1}%
+ \startlink attr{/Border [0 0 0]}
+ goto name{\pdfmkpgn{\the\pgn}}%
+ \linkcolor #1%
+ \advance\lnkcount by 1%
+ \endlink
+ \fi
+ \nextmakelinks
+ }
+ \def\picknum#1{\expandafter\pn#1}
+ \def\pn#1{%
+ \def\p{#1}%
+ \ifx\p\lbrace
+ \let\nextpn=\ppn
+ \else
+ \let\nextpn=\ppnn
+ \def\first{#1}
+ \fi
+ \nextpn
+ }
+ \def\ppn#1{\pgn=#1\gobble}
+ \def\ppnn{\pgn=\first}
+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ \def\pdfurl#1{%
+ \begingroup
+ \normalturnoffactive\def\@{@}%
+ \let\value=\expandablevalue
+ \leavevmode\Red
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ % #1
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \linkcolor #1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+% Font-change commands.
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf analogous to plain's \rm, etc.
+\newfam\sffam
+\def\sf{\fam=\sffam \tensf}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this one.
+\def\ttsl{\tenttsl}
+
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+\newcount\mainmagstep
+\ifx\bigger\relax
+ % not really supported.
+ \mainmagstep=\magstep1
+ \setfont\textrm\rmshape{12}{1000}
+ \setfont\texttt\ttshape{12}{1000}
+\else
+ \mainmagstep=\magstephalf
+ \setfont\textrm\rmshape{10}{\mainmagstep}
+ \setfont\texttt\ttshape{10}{\mainmagstep}
+\fi
+% Instead of cmb10, you may want to use cmbx10.
+% cmbx10 is a prettier font on its own, but cmb10
+% looks better when embedded in a line with cmr10
+% (in Bob's opinion).
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun, etc.
+\setfont\defbf\bxshape{10}{\magstep1} %was 1314
+\setfont\deftt\ttshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page:
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{\magstep1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
+% but that is not a standard magnification.
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this so that font changes will continue to work
+% in math mode, where it is the current \fam that is relevant in most
+% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam
+% \tenbf}, for example. By redefining \tenbf, we obviate the need to
+% redefine \bf itself.
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \resetmathfonts \setleading{9.5pt}}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \smallerfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+%
+% I wish we used A4 paper on this side of the Atlantic.
+%
+% --karl, 24jan03.
+
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\textfonts
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bxshape{12}{1000}
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+\let\cite=\smartslanted
+
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\frenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ }
+\catcode`@=\other
+
+\def\t#1{%
+ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+}
+\let\ttfont=\t
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+ \vbox{\hrule\kern-0.4pt
+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+ \kern-0.4pt\hrule}%
+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \frenchspacing
+ #1%
+ }%
+ \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in \code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active
+ \catcode`\_=\active
+ %
+ \global\def\code{\begingroup
+ \catcode`\-=\active \let-\codedash
+ \catcode`\_=\active \let_\codeunder
+ \codex
+ }
+ %
+ % If we end up with any active - characters when handling the index,
+ % just treat them as a normal -.
+ \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
+\def\kbdinputstylexxx#1{%
+ \def\arg{#1}%
+ \ifx\arg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\arg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\arg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle `\arg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @url, @env, @command quotes seem unnecessary, so use \code.
+\let\url=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url. Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @acronym downcases the argument and prints in smallcaps.
+\def\acronym#1{{\smallcaps \lowercase{#1}}}
+
+% @pounds{} is a sterling sign.
+\def\pounds{{\it\$}}
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\def\shorttitlepage{\parsearg\shorttitlepagezzz}
+\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\def\titlepage{\begingroup \parindent=0pt \textfonts
+ \let\subtitlerm=\tenrm
+ \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
+ %
+ \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}%
+ %
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ %
+ % Now you can print the title using @title.
+ \def\title{\parsearg\titlezzz}%
+ \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Now you can put text using @subtitle.
+ \def\subtitle{\parsearg\subtitlezzz}%
+ \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
+ %
+ % @author should come last, but may come many times.
+ \def\author{\parsearg\authorzzz}%
+ \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
+ {\authorfont \leftline{##1}}}%
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \oldpage
+ \let\page = \oldpage
+ \hbox{}}%
+% \def\page{\oldpage \hbox{}}
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make Tex use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\everyheading{\parsearg\everyheadingxxx}
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\everyfooting{\parsearg\everyfootingxxx}
+
+{\catcode`\@=0 %
+
+\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
+\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
+\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
+\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
+\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -\baselineskip
+ \global\advance\vsize by -\baselineskip
+}
+
+\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+%
+}% unbind the catcode of @.
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg\settitlezzz}
+\def\settitlezzz #1{\gdef\thistitle{#1}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
+\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
+
+\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
+\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
+
+\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
+ \itemzzz {#1}}
+
+\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
+ \itemzzz {#1}}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemfont{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. (Unfortunately
+ % we can't prevent a possible page break at the following
+ % \baselineskip glue.) However, if what follows is an environment
+ % such as @example, there will be no \parskip glue; then
+ % the negative vskip we just would cause the example and the item to
+ % crash together. So we use this bizarre value of 10001 as a signal
+ % to \aboveenvbreak to insert \parskip glue after all.
+ % (Possibly there are other commands that could be followed by
+ % @example which need the same treatment, but not section titles; or
+ % maybe section titles are the only special case and they should be
+ % penalty 10001...)
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a table}}
+\def\itemx{\errmessage{@itemx while not in a table}}
+\def\kitem{\errmessage{@kitem while not in a table}}
+\def\kitemx{\errmessage{@kitemx while not in a table}}
+\def\xitem{\errmessage{@xitem while not in a table}}
+\def\xitemx{\errmessage{@xitemx while not in a table}}
+
+% Contains a kludge to get @end[description] to work.
+\def\description{\tablez{\dontindex}{1}{}{}{}{}}
+
+% @table, @ftable, @vtable.
+\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
+{\obeylines\obeyspaces%
+\gdef\tablex #1^^M{%
+\tabley\dontindex#1 \endtabley}}
+
+\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
+{\obeylines\obeyspaces%
+\gdef\ftablex #1^^M{%
+\tabley\fnitemindex#1 \endtabley
+\def\Eftable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
+{\obeylines\obeyspaces%
+\gdef\vtablex #1^^M{%
+\tabley\vritemindex#1 \endtabley
+\def\Evtable{\endgraf\afterenvbreak\endgroup}%
+\let\Etable=\relax}}
+
+\def\dontindex #1{}
+\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
+\def\vritemindex #1{\doind {vr}{\code{#1}}}%
+
+{\obeyspaces %
+\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
+\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
+
+\def\tablez #1#2#3#4#5#6{%
+\aboveenvbreak %
+\begingroup %
+\def\Edescription{\Etable}% Necessary kludge.
+\let\itemindex=#1%
+\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
+\ifnum 0#4>0 \tableindent=#4\mil \fi %
+\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
+\def\itemfont{#2}%
+\itemmax=\tableindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \tableindent %
+\exdentamount=\tableindent
+\parindent = 0pt
+\parskip = \smallskipamount
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def\Etable{\endgraf\afterenvbreak\endgroup}%
+\let\item = \internalBitem %
+\let\itemx = \internalBitemx %
+\let\kitem = \internalBkitem %
+\let\kitemx = \internalBkitemx %
+\let\xitem = \internalBxitem %
+\let\xitemx = \internalBxitemx %
+}
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\def\itemize{\parsearg\itemizezzz}
+
+\def\itemizezzz #1{%
+ \begingroup % ended by the @end itemize
+ \itemizey {#1}{\Eitemize}
+}
+
+\def\itemizey #1#2{%
+\aboveenvbreak %
+\itemmax=\itemindent %
+\advance \itemmax by -\itemmargin %
+\advance \leftskip by \itemindent %
+\exdentamount=\itemindent
+\parindent = 0pt %
+\parskip = \smallskipamount %
+\ifdim \parskip=0pt \parskip=2pt \fi%
+\def#2{\endgraf\afterenvbreak\endgroup}%
+\def\itemcontents{#1}%
+\let\item=\itemizeitem}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\def\enumerate{\parsearg\enumeratezzz}
+\def\enumeratezzz #1{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ \begingroup % ended by the @end enumerate
+ %
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call itemizey, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \itemizey{#1.}\Eenumerate\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+% Definition of @item while inside @itemize.
+
+\def\itemizeitem{%
+\advance\itemno by 1
+{\let\par=\endgraf \smallbreak}%
+\ifhmode \errmessage{In hmode at itemizeitem}\fi
+{\parskip=0in \hskip 0pt
+\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
+\vadjust{\penalty 1200}}%
+\flushcr}
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+%
+% For those who want to use more than one line's worth of words in
+% the preamble, break the line within one argument and it
+% will parse correctly, i.e.,
+%
+% @multitable {Column 1 template} {Column 2 template} {Column 3
+% template}
+% Not:
+% @multitable {Column 1 template} {Column 2 template}
+% {Column 3 template}
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab, @multitable or @end multitable do not need to be on their
+% own lines, but it will not hurt if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the part of the @columnfraction before the decimal point, which
+% is presumably either 0 or the empty string (but we don't check, we
+% just throw it away). #2 is the decimal part, which we use as the
+% percent of \hsize for this column.
+\def\pickupwholefraction#1.#2 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% @multitable ... @end multitable definitions:
+%
+\def\multitable{\parsearg\dotable}
+\def\dotable#1{\bgroup
+ \vskip\parskip
+ \let\item=\crcrwithfootnotes
+ % A \tab used to include \hskip1sp. But then the space in a template
+ % line is not enough. That is bad. So let's go back to just & until
+ % we encounter the problem it was intended to solve again. --karl,
+ % nathan@acm.org, 20apr99.
+ \let\tab=&%
+ \let\startfootins=\startsavedfootnote
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ \def\Emultitable{%
+ \global\setpercentfalse
+ \crcrwithfootnotes\crcr
+ \egroup\egroup
+ }%
+ %
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % \everycr will reset column counter, \colcount, at the end of
+ % each line. Every column entry will cause \colcount to advance by one.
+ % The table preamble
+ % looks at the current \colcount to find the correct column width.
+ \everycr{\noalign{%
+ %
+ % \filbreak%% keeps underfull box messages off when table breaks over pages.
+ % Maybe so, but it also creates really weird page breaks when the table
+ % breaks over pages. Wouldn't \vfil be better? Wait until the problem
+ % manifests itself, so it can be fixed for real --karl.
+ \global\colcount=0\relax}}%
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup&\global\advance\colcount by 1\relax
+ \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively marking
+ % characters.
+ \noindent\ignorespaces##\unskip\multistrut}\cr
+}
+
+\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
+% If so, do nothing. If not, give it an appropriate dimension based on
+% current baselineskip.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+%% strut to put in table in case some entry doesn't have descenders,
+%% to keep lines equally spaced
+\let\multistrut = \strut
+\else
+%% FIXME: what is \box0 supposed to be?
+\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
+width0pt\relax} \fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi}
+
+% In case a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is
+% finished. Otherwise, the insertion is lost, it never migrates to the
+% main vertical list. --kasal, 22jan03.
+%
+\newbox\savedfootnotes
+%
+% \dotable \let's \startfootins to this, so that \dofootnote will call
+% it instead of starting the insertion right away.
+\def\startsavedfootnote{%
+ \global\setbox\savedfootnotes = \vbox\bgroup
+ \unvbox\savedfootnotes
+}
+\def\crcrwithfootnotes{%
+ \crcr
+ \ifvoid\savedfootnotes \else
+ \noalign{\insert\footins{\box\savedfootnotes}}%
+ \fi
+}
+
+\message{conditionals,}
+% Prevent errors for section commands.
+% Used in @ignore and in failing conditionals.
+\def\ignoresections{%
+ \let\chapter=\relax
+ \let\unnumbered=\relax
+ \let\top=\relax
+ \let\unnumberedsec=\relax
+ \let\unnumberedsection=\relax
+ \let\unnumberedsubsec=\relax
+ \let\unnumberedsubsection=\relax
+ \let\unnumberedsubsubsec=\relax
+ \let\unnumberedsubsubsection=\relax
+ \let\section=\relax
+ \let\subsec=\relax
+ \let\subsubsec=\relax
+ \let\subsection=\relax
+ \let\subsubsection=\relax
+ \let\appendix=\relax
+ \let\appendixsec=\relax
+ \let\appendixsection=\relax
+ \let\appendixsubsec=\relax
+ \let\appendixsubsection=\relax
+ \let\appendixsubsubsec=\relax
+ \let\appendixsubsubsection=\relax
+ \let\contents=\relax
+ \let\smallbook=\relax
+ \let\titlepage=\relax
+}
+
+% Used in nested conditionals, where we have to parse the Texinfo source
+% and so want to turn off most commands, in case they are used
+% incorrectly.
+%
+% We use \empty instead of \relax for the @def... commands, so that \end
+% doesn't throw an error. For instance:
+% @ignore
+% @deffn ...
+% @end deffn
+% @end ignore
+%
+% The @end deffn is going to get expanded, because we're trying to allow
+% nested conditionals. But we don't want to expand the actual @deffn,
+% since it might be syntactically correct and intended to be ignored.
+% Since \end checks for \relax, using \empty does not cause an error.
+%
+\def\ignoremorecommands{%
+ \let\defcodeindex = \relax
+ \let\defcv = \empty
+ \let\defcvx = \empty
+ \let\Edefcv = \empty
+ \let\deffn = \empty
+ \let\deffnx = \empty
+ \let\Edeffn = \empty
+ \let\defindex = \relax
+ \let\defivar = \empty
+ \let\defivarx = \empty
+ \let\Edefivar = \empty
+ \let\defmac = \empty
+ \let\defmacx = \empty
+ \let\Edefmac = \empty
+ \let\defmethod = \empty
+ \let\defmethodx = \empty
+ \let\Edefmethod = \empty
+ \let\defop = \empty
+ \let\defopx = \empty
+ \let\Edefop = \empty
+ \let\defopt = \empty
+ \let\defoptx = \empty
+ \let\Edefopt = \empty
+ \let\defspec = \empty
+ \let\defspecx = \empty
+ \let\Edefspec = \empty
+ \let\deftp = \empty
+ \let\deftpx = \empty
+ \let\Edeftp = \empty
+ \let\deftypefn = \empty
+ \let\deftypefnx = \empty
+ \let\Edeftypefn = \empty
+ \let\deftypefun = \empty
+ \let\deftypefunx = \empty
+ \let\Edeftypefun = \empty
+ \let\deftypeivar = \empty
+ \let\deftypeivarx = \empty
+ \let\Edeftypeivar = \empty
+ \let\deftypemethod = \empty
+ \let\deftypemethodx = \empty
+ \let\Edeftypemethod = \empty
+ \let\deftypeop = \empty
+ \let\deftypeopx = \empty
+ \let\Edeftypeop = \empty
+ \let\deftypevar = \empty
+ \let\deftypevarx = \empty
+ \let\Edeftypevar = \empty
+ \let\deftypevr = \empty
+ \let\deftypevrx = \empty
+ \let\Edeftypevr = \empty
+ \let\defun = \empty
+ \let\defunx = \empty
+ \let\Edefun = \empty
+ \let\defvar = \empty
+ \let\defvarx = \empty
+ \let\Edefvar = \empty
+ \let\defvr = \empty
+ \let\defvrx = \empty
+ \let\Edefvr = \empty
+ \let\clear = \relax
+ \let\down = \relax
+ \let\evenfooting = \relax
+ \let\evenheading = \relax
+ \let\everyfooting = \relax
+ \let\everyheading = \relax
+ \let\headings = \relax
+ \let\include = \relax
+ \let\item = \relax
+ \let\lowersections = \relax
+ \let\oddfooting = \relax
+ \let\oddheading = \relax
+ \let\printindex = \relax
+ \let\pxref = \relax
+ \let\raisesections = \relax
+ \let\ref = \relax
+ \let\set = \relax
+ \let\setchapternewpage = \relax
+ \let\setchapterstyle = \relax
+ \let\settitle = \relax
+ \let\up = \relax
+ \let\verbatiminclude = \relax
+ \let\xref = \relax
+}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescriptionword{documentdescription}
+\def\documentdescription{\doignore{documentdescription}}
+\def\html{\doignore{html}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory = \comment
+
+% Ignore text until a line `@end #1'.
+%
+\def\doignore#1{\begingroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define a command to swallow text until we reach `@end #1'.
+ % This @ is a catcode 12 token (that is the normal catcode of @ in
+ % this texinfo.tex file). We change the catcode of @ below to match.
+ \long\def\doignoretext##1@end #1{\enddoignore}%
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \catcode\spaceChar = 10
+ %
+ % Ignore braces, too, so mismatched braces don't cause trouble.
+ \catcode`\{ = 9
+ \catcode`\} = 9
+ %
+ % We must not have @c interpreted as a control sequence.
+ \catcode`\@ = 12
+ %
+ \def\ignoreword{#1}%
+ \ifx\ignoreword\documentdescriptionword
+ % The c kludge breaks documentdescription, since
+ % `documentdescription' contains a `c'. Means not everything will
+ % be ignored inside @documentdescription, but oh well...
+ \else
+ % Make the letter c a comment character so that the rest of the line
+ % will be ignored. This way, the document can have (for example)
+ % @c @end ifinfo
+ % and the @end ifinfo will be properly ignored.
+ % (We've just changed @ to catcode 12.)
+ \catcode`\c = 14
+ \fi
+ %
+ % And now expand the command defined above.
+ \doignoretext
+}
+
+% What we do to finish off ignored text.
+%
+\def\enddoignore{\endgroup\ignorespaces}%
+
+\newif\ifwarnedobs\warnedobsfalse
+\def\obstexwarn{%
+ \ifwarnedobs\relax\else
+ % We need to warn folks that they may have trouble with TeX 3.0.
+ % This uses \immediate\write16 rather than \message to get newlines.
+ \immediate\write16{}
+ \immediate\write16{WARNING: for users of Unix TeX 3.0!}
+ \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
+ \immediate\write16{If you are running another version of TeX, relax.}
+ \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
+ \immediate\write16{ Then upgrade your TeX installation if you can.}
+ \immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)}
+ \immediate\write16{If you are stuck with version 3.0, run the}
+ \immediate\write16{ script ``tex3patch'' from the Texinfo distribution}
+ \immediate\write16{ to use a workaround.}
+ \immediate\write16{}
+ \global\warnedobstrue
+ \fi
+}
+
+% **In TeX 3.0, setting text in \nullfont hangs tex. For a
+% workaround (which requires the file ``dummy.tfm'' to be installed),
+% uncomment the following line:
+%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
+
+% Ignore text, except that we keep track of conditional commands for
+% purposes of nesting, up to an `@end #1' command.
+%
+\def\nestedignore#1{%
+ \obstexwarn
+ % We must actually expand the ignored text to look for the @end
+ % command, so that nested ignore constructs work. Thus, we put the
+ % text into a \vbox and then do nothing with the result. To minimize
+ % the chance of memory overflow, we follow the approach outlined on
+ % page 401 of the TeXbook.
+ %
+ \setbox0 = \vbox\bgroup
+ % Don't complain about control sequences we have declared \outer.
+ \ignoresections
+ %
+ % Define `@end #1' to end the box, which will in turn undefine the
+ % @end command again.
+ \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
+ %
+ % We are going to be parsing Texinfo commands. Most cause no
+ % trouble when they are used incorrectly, but some commands do
+ % complicated argument parsing or otherwise get confused, so we
+ % undefine them.
+ %
+ % We can't do anything about stray @-signs, unfortunately;
+ % they'll produce `undefined control sequence' errors.
+ \ignoremorecommands
+ %
+ % Set the current font to be \nullfont, a TeX primitive, and define
+ % all the font commands to also use \nullfont. We don't use
+ % dummy.tfm, as suggested in the TeXbook, because some sites
+ % might not have that installed. Therefore, math mode will still
+ % produce output, but that should be an extremely small amount of
+ % stuff compared to the main input.
+ %
+ \nullfont
+ \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
+ \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
+ \let\tensf=\nullfont
+ % Similarly for index fonts.
+ \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
+ \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
+ \let\smallsf=\nullfont
+ % Similarly for smallexample fonts.
+ \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
+ \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
+ \let\smallersf=\nullfont
+ %
+ % Don't complain when characters are missing from the fonts.
+ \tracinglostchars = 0
+ %
+ % Don't bother to do space factor calculations.
+ \frenchspacing
+ %
+ % Don't report underfull hboxes.
+ \hbadness = 10000
+ %
+ % Do minimal line-breaking.
+ \pretolerance = 10000
+ %
+ % Do not execute instructions in @tex.
+ \def\tex{\doignore{tex}}%
+ % Do not execute macro definitions.
+ % `c' is a comment character, so the word `macro' will get cut off.
+ \def\macro{\doignore{ma}}%
+}
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it. Make sure the catcode of space is correct to avoid
+% losing inside @example, for instance.
+%
+\def\set{\begingroup\catcode` =10
+ \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
+ \parsearg\setxxx}
+\def\setxxx#1{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ \def\temp{#2}%
+ \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
+ \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
+ \fi
+ \endgroup
+}
+% Can't use \xdef to pre-expand #2 and save some time, since \temp or
+% \next or other control sequences that we've defined might get us into
+% an infinite loop. Consider `@set foo @cite{bar}'.
+\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\def\clear{\parsearg\clearxxx}
+\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
+
+% @value{foo} gets the text saved in variable foo.
+{
+ \catcode`\_ = \active
+ %
+ % We might end up with active _ or - characters in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}. So \let any
+ % such active characters to their normal equivalents.
+ \gdef\value{\begingroup
+ \catcode`\-=\other \catcode`\_=\other
+ \indexbreaks \let_\normalunderscore
+ \valuexxx}
+}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we \let\value to this in \indexdummies). Ones
+% whose names contain - or _ still won't work, but we can't do anything
+% about that. The command has to be fully expandable (if the variable
+% is set), since the result winds up in the index file. This means that
+% if the variable's value contains other Texinfo commands, it's almost
+% certain it will fail (although perhaps we could fix that with
+% sufficient work to do a one-level expansion on the result, instead of
+% complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+\def\ifset{\parsearg\doifset}
+\def\doifset#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \let\next=\ifsetfail
+ \else
+ \let\next=\ifsetsucceed
+ \fi
+ \next
+}
+\def\ifsetsucceed{\conditionalsucceed{ifset}}
+\def\ifsetfail{\nestedignore{ifset}}
+\defineunmatchedend{ifset}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+\def\ifclear{\parsearg\doifclear}
+\def\doifclear#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \let\next=\ifclearsucceed
+ \else
+ \let\next=\ifclearfail
+ \fi
+ \next
+}
+\def\ifclearsucceed{\conditionalsucceed{ifclear}}
+\def\ifclearfail{\nestedignore{ifclear}}
+\defineunmatchedend{ifclear}
+
+% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
+% read the text following, through the first @end iftex (etc.). Make
+% `@end iftex' (etc.) valid only after an @iftex.
+%
+\def\iftex{\conditionalsucceed{iftex}}
+\def\ifnothtml{\conditionalsucceed{ifnothtml}}
+\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
+\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
+\defineunmatchedend{iftex}
+\defineunmatchedend{ifnothtml}
+\defineunmatchedend{ifnotinfo}
+\defineunmatchedend{ifnotplaintext}
+
+% True conditional. Since \set globally defines its variables, we can
+% just start and end a group (to keep the @end definition undefined at
+% the outer level).
+%
+\def\conditionalsucceed#1{\begingroup
+ \expandafter\def\csname E#1\endcsname{\endgroup}%
+}
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within \newindex.
+{\catcode`\@=11
+\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname\donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ %
+ % \definedummyword defines \#1 as \realbackslash #1\space, thus
+ % effectively preventing its expansion. This is used only for control
+ % words, not control letters, because the \space would be incorrect
+ % for control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword##1{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
+ }%
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux file, @ is the escape character. So we want to redefine
+% everything using @ instead of \realbackslash. When everything uses
+% @, this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % (See comments in \indexdummies.)
+ \def\definedummyword##1{%
+ \expandafter\def\csname ##1\endcsname{@##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{@##1}%
+ }%
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% Called from \indexdummies and \atdummies. \definedummyword and
+% \definedummyletter must be defined first.
+%
+\def\commondummies{%
+ %
+ \normalturnoffactive
+ %
+ % Control letters and accents.
+ \definedummyletter{_}%
+ \definedummyletter{,}%
+ \definedummyletter{"}%
+ \definedummyletter{`}%
+ \definedummyletter{'}%
+ \definedummyletter{^}%
+ \definedummyletter{~}%
+ \definedummyletter{=}%
+ \definedummyword{u}%
+ \definedummyword{v}%
+ \definedummyword{H}%
+ \definedummyword{dotaccent}%
+ \definedummyword{ringaccent}%
+ \definedummyword{tieaccent}%
+ \definedummyword{ubaraccent}%
+ \definedummyword{udotaccent}%
+ \definedummyword{dotless}%
+ %
+ % Other non-English letters.
+ \definedummyword{AA}%
+ \definedummyword{AE}%
+ \definedummyword{L}%
+ \definedummyword{OE}%
+ \definedummyword{O}%
+ \definedummyword{aa}%
+ \definedummyword{ae}%
+ \definedummyword{l}%
+ \definedummyword{oe}%
+ \definedummyword{o}%
+ \definedummyword{ss}%
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword{bf}%
+ \definedummyword{gtr}%
+ \definedummyword{hat}%
+ \definedummyword{less}%
+ \definedummyword{sf}%
+ \definedummyword{sl}%
+ \definedummyword{tclose}%
+ \definedummyword{tt}%
+ %
+ % Texinfo font commands.
+ \definedummyword{b}%
+ \definedummyword{i}%
+ \definedummyword{r}%
+ \definedummyword{sc}%
+ \definedummyword{t}%
+ %
+ \definedummyword{TeX}%
+ \definedummyword{acronym}%
+ \definedummyword{cite}%
+ \definedummyword{code}%
+ \definedummyword{command}%
+ \definedummyword{dfn}%
+ \definedummyword{dots}%
+ \definedummyword{emph}%
+ \definedummyword{env}%
+ \definedummyword{file}%
+ \definedummyword{kbd}%
+ \definedummyword{key}%
+ \definedummyword{math}%
+ \definedummyword{option}%
+ \definedummyword{samp}%
+ \definedummyword{strong}%
+ \definedummyword{uref}%
+ \definedummyword{url}%
+ \definedummyword{var}%
+ \definedummyword{w}%
+ %
+ % Assorted special characters.
+ \definedummyword{bullet}%
+ \definedummyword{copyright}%
+ \definedummyword{dots}%
+ \definedummyword{enddots}%
+ \definedummyword{equiv}%
+ \definedummyword{error}%
+ \definedummyword{expansion}%
+ \definedummyword{minus}%
+ \definedummyword{pounds}%
+ \definedummyword{point}%
+ \definedummyword{print}%
+ \definedummyword{result}%
+ %
+ % Handle some cases of @value -- where the variable name does not
+ % contain - or _, and the value does not contain any
+ % (non-fully-expandable) commands.
+ \let\value = \expandablevalue
+ %
+ % Normal spaces, not active ones.
+ \unsepspaces
+ %
+ % No macro expansion.
+ \turnoffmacros
+}
+
+% If an index command is used in an @example environment, any spaces
+% therein should become regular spaces in the raw index file, not the
+% expansion of \tie (\leavevmode \penalty \@M \ ).
+{\obeyspaces
+ \gdef\unsepspaces{\obeyspaces\let =\space}}
+
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexdummytex{TeX}
+\def\indexdummydots{...}
+%
+\def\indexnofonts{%
+ \def\ { }%
+ \def\@{@}%
+ % how to handle braces?
+ \def\_{\normalunderscore}%
+ %
+ \let\,=\asis
+ \let\"=\asis
+ \let\`=\asis
+ \let\'=\asis
+ \let\^=\asis
+ \let\~=\asis
+ \let\==\asis
+ \let\u=\asis
+ \let\v=\asis
+ \let\H=\asis
+ \let\dotaccent=\asis
+ \let\ringaccent=\asis
+ \let\tieaccent=\asis
+ \let\ubaraccent=\asis
+ \let\udotaccent=\asis
+ \let\dotless=\asis
+ %
+ % Other non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\o{o}%
+ \def\ss{ss}%
+ \def\exclamdown{!}%
+ \def\questiondown{?}%
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ % Texinfo font commands.
+ \let\b=\asis
+ \let\i=\asis
+ \let\r=\asis
+ \let\sc=\asis
+ \let\t=\asis
+ %
+ \let\TeX=\indexdummytex
+ \let\acronym=\asis
+ \let\cite=\asis
+ \let\code=\asis
+ \let\command=\asis
+ \let\dfn=\asis
+ \let\dots=\indexdummydots
+ \let\emph=\asis
+ \let\env=\asis
+ \let\file=\asis
+ \let\kbd=\asis
+ \let\key=\asis
+ \let\math=\asis
+ \let\option=\asis
+ \let\samp=\asis
+ \let\strong=\asis
+ \let\uref=\asis
+ \let\url=\asis
+ \let\var=\asis
+ \let\w=\asis
+}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% For \ifx comparisons.
+\def\emptymacro{\empty}
+
+% Most index entries go through here, but \dosubind is the general case.
+%
+\def\doind#1#2{\dosubind{#1}{#2}\empty}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% \empty if called from \doind, as we usually are. The main exception
+% is with defuns, which call us directly.
+%
+\def\dosubind#1#2#3{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
+ \fi
+ {%
+ \count255=\lastpenalty
+ {%
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \escapechar=`\\
+ {%
+ \let\folio = 0% We will expand all macros now EXCEPT \folio.
+ \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % The main index entry text.
+ \toks0 = {#2}%
+ %
+ % If third arg is present, precede it with space in sort key.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\emptymacro \else
+ % If the third (subentry) arg is present, add it to the index
+ % line to write.
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\csname#1indfile\endcsname{%
+ \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
+ }%
+ %
+ % If a skip is the last thing on the list now, preserve it
+ % by backing up by \lastskip, doing the \write, then inserting
+ % the skip again. Otherwise, the whatsit generated by the
+ % \write will make \lastskip zero. The result is that sequences
+ % like this:
+ % @end defun
+ % @tindex whatever
+ % @defun ...
+ % will have extra space inserted, because the \medbreak in the
+ % start of the @defun won't see the skip inserted by the @end of
+ % the previous defun.
+ %
+ % But don't do any of this if we're not in vertical mode. We
+ % don't want to do a \vskip and prematurely end a paragraph.
+ %
+ % Avoid page breaks due to these extra skips, too.
+ %
+ \iflinks
+ \ifvmode
+ \skip0 = \lastskip
+ \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi
+ \fi
+ %
+ \temp % do the write
+ %
+ \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
+ \fi
+ }%
+ }%
+ \penalty\count255
+ }%
+}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\def\printindex{\parsearg\doprintindex}
+\def\doprintindex#1{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \indexbreaks
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\rawbackslashxx}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \penalty -300
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ \vskip .33\baselineskip plus .1\baselineskip
+ %
+ % Do our best not to break after the initial.
+ \nobreak
+}}
+
+% This typesets a paragraph consisting of #1, dot leaders, and then #2
+% flush to the right margin. It is used for index and table of contents
+% entries. The paragraph is indented by \leftskip.
+%
+\def\entry#1#2{\begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing columns.
+ \vskip 0pt plus1pt
+ %
+ % Start a ``paragraph'' for the index entry so the line breaking
+ % parameters we've set above will have an effect.
+ \noindent
+ %
+ % Insert the text of the index entry. TeX will do line-breaking on it.
+ #1%
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+ \def\tempb{#2}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd\ \else%
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ \ #2% The page number ends the paragraph.
+ \fi
+ \fi%
+ \par
+\endgroup}
+
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+% \def\appendixletter{\char\the\appendixno}
+% We do the following for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+\def\thischapter{}
+\def\thissection{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raise/lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% Choose a numbered-heading macro
+% #1 is heading level if unmodified by @raisesections or @lowersections
+% #2 is text for heading
+\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \chapterzzz{#2}
+\or
+ \seczzz{#2}
+\or
+ \numberedsubseczzz{#2}
+\or
+ \numberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \chapterzzz{#2}
+ \else
+ \numberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses appendix heading levels
+\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \appendixzzz{#2}
+\or
+ \appendixsectionzzz{#2}
+\or
+ \appendixsubseczzz{#2}
+\or
+ \appendixsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \appendixzzz{#2}
+ \else
+ \appendixsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% like \numhead, but chooses numberless heading levels
+\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
+\ifcase\absseclevel
+ \unnumberedzzz{#2}
+\or
+ \unnumberedseczzz{#2}
+\or
+ \unnumberedsubseczzz{#2}
+\or
+ \unnumberedsubsubseczzz{#2}
+\else
+ \ifnum \absseclevel<0
+ \unnumberedzzz{#2}
+ \else
+ \unnumberedsubsubseczzz{#2}
+ \fi
+\fi
+}
+
+% @chapter, @appendix, @unnumbered.
+\def\thischaptername{No Chapter Title}
+\outer\def\chapter{\parsearg\chapteryyy}
+\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
+ \chapmacro {#1}{\the\chapno}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now.
+ \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
+ \writetocentry{chap}{#1}{{\the\chapno}}
+ \donoderef
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+% we use \chapno to avoid indenting back
+\def\appendixbox#1{%
+ \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
+ \hbox to \wd0{#1\hss}}
+
+\outer\def\appendix{\parsearg\appendixyyy}
+\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ \global\advance \appendixno by 1
+ \message{\putwordAppendix\space \appendixletter}%
+ \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}%
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
+ \writetocentry{appendix}{#1}{{\appendixletter}}
+ \appendixnoderef
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\def\centerchap{\parsearg\centerchapyyy}
+\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
+
+% @top is like @unnumbered.
+\outer\def\top{\parsearg\unnumberedyyy}
+
+\outer\def\unnumbered{\parsearg\unnumberedyyy}
+\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz #1{%
+ \secno=0 \subsecno=0 \subsubsecno=0
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}\message{(\the\toks0)}%
+ %
+ \unnumbchapmacro {#1}%
+ \gdef\thischapter{#1}\gdef\thissection{#1}%
+ \writetocentry{unnumbchap}{#1}{{\the\chapno}}
+ \unnumbnoderef
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% Sections.
+\outer\def\numberedsec{\parsearg\secyyy}
+\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
+\def\seczzz #1{%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
+ \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}}
+ \donoderef
+ \nobreak
+}
+
+\outer\def\appendixsection{\parsearg\appendixsecyyy}
+\outer\def\appendixsec{\parsearg\appendixsecyyy}
+\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz #1{%
+ \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
+ \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
+ \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}}
+ \appendixnoderef
+ \nobreak
+}
+
+\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
+\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz #1{%
+ \plainsecheading {#1}\gdef\thissection{#1}%
+ \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}}
+ \unnumbnoderef
+ \nobreak
+}
+
+% Subsections.
+\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
+\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz #1{%
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
+ \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
+ \donoderef
+ \nobreak
+}
+
+\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
+\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz #1{%
+ \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
+ \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
+ \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}}
+ \appendixnoderef
+ \nobreak
+}
+
+\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
+\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz #1{%
+ \plainsubsecheading {#1}\gdef\thissection{#1}%
+ \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
+ \unnumbnoderef
+ \nobreak
+}
+
+% Subsubsections.
+\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
+\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz #1{%
+ \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+ \subsubsecheading {#1}
+ {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
+ \donoderef
+ \nobreak
+}
+
+\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
+\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz #1{%
+ \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
+ \subsubsecheading {#1}
+ {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
+ \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
+ \appendixnoderef
+ \nobreak
+}
+
+\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
+\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz #1{%
+ \plainsubsubsecheading {#1}\gdef\thissection{#1}%
+ \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
+ \unnumbnoderef
+ \nobreak
+}
+
+% These are variants which are not "outer", so they can appear in @ifinfo.
+% Actually, they should now be obsolete; ordinary section commands should work.
+\def\infotop{\parsearg\unnumberedzzz}
+\def\infounnumbered{\parsearg\unnumberedzzz}
+\def\infounnumberedsec{\parsearg\unnumberedseczzz}
+\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
+\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
+
+\def\infoappendix{\parsearg\appendixzzz}
+\def\infoappendixsec{\parsearg\appendixseczzz}
+\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
+\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
+
+\def\infochapter{\parsearg\chapterzzz}
+\def\infosection{\parsearg\sectionzzz}
+\def\infosubsection{\parsearg\subsectionzzz}
+\def\infosubsubsection{\parsearg\subsubsectionzzz}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\global\let\section = \numberedsec
+\global\let\subsection = \numberedsubsec
+\global\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{\parsearg\majorheadingzzz}
+\def\majorheadingzzz #1{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+\def\chapheading{\parsearg\chapheadingzzz}
+\def\chapheadingzzz #1{\chapbreak %
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\penalty 200}
+
+% @heading, @subheading, @subsubheading.
+\def\heading{\parsearg\plainsecheading}
+\def\subheading{\parsearg\plainsubsecheading}
+\def\subsubheading{\parsearg\plainsubsubsecheading}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+\def\CHAPFplain{
+\global\let\chapmacro=\chfplain
+\global\let\unnumbchapmacro=\unnchfplain
+\global\let\centerchapmacro=\centerchfplain}
+
+% Plain chapter opening.
+% #1 is the text, #2 the chapter number or empty if unnumbered.
+\def\chfplain#1#2{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ \def\chapnum{#2}%
+ \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% Plain opening for unnumbered.
+\def\unnchfplain#1{\chfplain{#1}{}}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerchfplain#1{{%
+ \def\centerparametersmaybe{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+ }%
+ \chfplain{#1}{}%
+}}
+
+\CHAPFplain % The default
+
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\nobreak
+}
+
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+}
+
+\def\CHAPFopen{
+\global\let\chapmacro=\chfopen
+\global\let\unnumbchapmacro=\unnchfopen
+\global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
+\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
+\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
+
+% Subsection titles.
+\newskip \subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
+\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
+\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
+
+% Subsubsection titles.
+\let\subsubsecheadingskip = \subsecheadingskip
+\let\subsubsecheadingbreak = \subsecheadingbreak
+\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
+\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
+
+
+% Print any size section title.
+%
+% #1 is the section type (sec/subsec/subsubsec), #2 is the section
+% number (maybe empty), #3 the text.
+\def\sectionheading#1#2#3{%
+ {%
+ \expandafter\advance\csname #1headingskip\endcsname by \parskip
+ \csname #1headingbreak\endcsname
+ }%
+ {%
+ % Switch to the right set of fonts.
+ \csname #1fonts\endcsname \rm
+ %
+ % Only insert the separating space if we have a section number.
+ \def\secnum{#2}%
+ \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
+ %
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent = \wd0 % zero if no section number
+ \unhbox0 #3}%
+ }%
+ % Add extra space after the heading -- either a line space or a
+ % paragraph space, whichever is more. (Some people like to set
+ % \parskip to large values for some reason.) Don't allow stretch, though.
+ \nobreak
+ \ifdim\parskip>\normalbaselineskip
+ \kern\parskip
+ \else
+ \kern\normalbaselineskip
+ \fi
+ \nobreak
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc. We supply {\folio} at the end of the
+% argument, which will end up as the last argument to the \...entry macro.
+%
+% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}}
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+%
+\newif\iftocfileopened
+\def\writetocentry#1#2#3{%
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ \toks0 = {#2}%
+ \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}%
+ \temp
+ \fi
+ %
+ % Tell \shipout to create a page destination if we're doing pdf, which
+ % will be the target of the links in the table of contents. We can't
+ % just do it on every page because the title pages are numbered 1 and
+ % 2 (the page numbers aren't printed), and so are the first two pages
+ % of the document. Thus, we'd have two destinations named `1', and
+ % two named `2'.
+ \ifpdf \pdfmakepagedesttrue \fi
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Finish up the main text and prepare to read what we've written
+% to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \unnumbchapmacro{#1}\def\thischapter{}%
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ % We can't do this, because then an actual ^ in a section
+ % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
+ %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.toc
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \pdfmakeoutlines
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\chapentry = \shortchapentry
+ \let\appendixentry = \shortappendixentry
+ \let\unnumbchapentry = \shortunnumberedentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\secentry ##1##2##3##4{}
+ \def\subsecentry ##1##2##3##4##5{}
+ \def\subsubsecentry ##1##2##3##4##5##6{}
+ \let\unnumbsecentry = \secentry
+ \let\unnumbsubsecentry = \subsecentry
+ \let\unnumbsubsubsecentry = \subsubsecentry
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.toc
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+\ifpdf
+ \pdfcatalog{/PageMode /UseOutlines}%
+\fi
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
+}
+
+% Appendices, in the main contents.
+\def\appendixentry#1#2#3{%
+ \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
+%
+% Appendices, in the short toc.
+\let\shortappendixentry = \shortchapentry
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
+% We could simplify the code here by writing out an \appendixentry
+% command in the toc file for appendices, instead of using \chapentry
+% for both, but it doesn't seem worth it.
+%
+\newdimen\shortappendixwidth
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ \dimen0 = 1em
+ \hbox to \dimen0{#1\hss}%
+}
+
+% Unnumbered chapters.
+\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}}
+\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}}
+
+% Sections.
+\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
+\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
+\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}}
+
+% And subsubsections.
+\def\subsubsecentry#1#2#3#4#5#6{%
+ \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
+\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}}
+
+% This parameter controls the indentation of the various levels.
+\newdimen\tocindent \tocindent = 3pc
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% Final typesetting of a toc entry; we use the same \entry macro as for
+% the index entries, but we want to suppress hyphenation here. (We
+% can't do that in the \entry macro, since index entries might consist
+% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
+\def\tocentry#1#2{\begingroup
+ \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
+ % Do not use \turnoffactive in these arguments. Since the toc is
+ % typeset in cmr, characters such as _ would come out wrong; we
+ % have to do the usual translation tricks.
+ \entry{#1}{#2}%
+\endgroup}
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\let\subsecentryfonts = \textfonts
+\let\subsubsecentryfonts = \textfonts
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+%
+\global\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\def\tex{\begingroup
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\==\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \escapechar=`\\
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\*=\ptexstar
+ \let\t=\ptext
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+\let\Etex=\endgroup}
+
+% Define @lisp ... @end lisp.
+% @lisp does a \begingroup so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% Make each space character in the input produce a normal interword
+% space in the output. Don't allow a line break at this space, as this
+% is used only in environments like @example, where each line of input
+% should produce a line of output anyway.
+%
+{\obeyspaces %
+\gdef\sepspaces{\obeyspaces\let =\tie}}
+
+% Define \obeyedspace to be our active space, whatever it is. This is
+% for use in \parsearg.
+{\sepspaces%
+\global\let\obeyedspace= }
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty>10000 \else \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\def\cartouche{%
+\par % can't be in the midst of a paragraph.
+\begingroup
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt %we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+% side, and for 6pt waste from
+% each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing=\comment
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \hsize=\cartinner
+ \kern3pt
+ \begingroup
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+\def\Ecartouche{%
+ \endgroup
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+\endgroup
+}}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \inENV % This group ends at the end of the body
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ \parindent = 0pt
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ % @cartouche defines \nonarrowing to inhibit narrowing
+ % at next level down.
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \let\exdent=\nofillexdent
+ \let\nonarrowing=\relax
+ \fi
+}
+
+% Define the \E... control sequence only if we are inside the particular
+% environment, so the error checking in \end will work.
+%
+% To end an @example-like environment, we first end the paragraph (via
+% \afterenvbreak's vertical glue), and then the group. That way we keep
+% the zero \parskip that the environments set -- \parskip glue will be
+% inserted at the beginning of the next paragraph in the document, after
+% the environment.
+%
+\def\nonfillfinish{\afterenvbreak\endgroup}
+
+% @lisp: indented, narrowed, typewriter font.
+\def\lisp{\begingroup
+ \nonfillstart
+ \let\Elisp = \nonfillfinish
+ \tt
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+
+% @example: Same as @lisp.
+\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
+
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+\def\smalllisp{\begingroup
+ \def\Esmalllisp{\nonfillfinish\endgroup}%
+ \def\Esmallexample{\nonfillfinish\endgroup}%
+ \smallexamplefonts
+ \lisp
+}
+\let\smallexample = \smalllisp
+
+
+% @display: same as @lisp except keep current font.
+%
+\def\display{\begingroup
+ \nonfillstart
+ \let\Edisplay = \nonfillfinish
+ \gobble
+}
+%
+% @smalldisplay: @display plus smaller fonts.
+%
+\def\smalldisplay{\begingroup
+ \def\Esmalldisplay{\nonfillfinish\endgroup}%
+ \smallexamplefonts \rm
+ \display
+}
+
+% @format: same as @display except don't narrow margins.
+%
+\def\format{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eformat = \nonfillfinish
+ \gobble
+}
+%
+% @smallformat: @format plus smaller fonts.
+%
+\def\smallformat{\begingroup
+ \def\Esmallformat{\nonfillfinish\endgroup}%
+ \smallexamplefonts \rm
+ \format
+}
+
+% @flushleft (same as @format).
+%
+\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
+
+% @flushright.
+%
+\def\flushright{\begingroup
+ \let\nonarrowing = t
+ \nonfillstart
+ \let\Eflushright = \nonfillfinish
+ \advance\leftskip by 0pt plus 1fill
+ \gobble
+}
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.
+%
+\def\quotation{%
+ \begingroup\inENV %This group ends at the end of the @quotation body
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ % We have retained a nonzero parskip for the environment, since we're
+ % doing normal filling. So to avoid extra space below the environment...
+ \def\Equotation{\parskip = 0pt \nonfillfinish}%
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \let\nonarrowing = \relax
+ \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=12}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+ \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \catcode`\`=\active
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen0=\wd0 % the width so far, or since the previous tab
+ \divide\dimen0 by\tabw
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
+ \wd0=\dimen0 \box0 \starttabbox
+ }%
+ }
+\endgroup
+\def\setupverbatim{%
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%% Include LaTeX hack for completeness -- never know
+%% \begingroup
+%% \catcode`|=0 \catcode`[=1
+%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
+%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
+%% #1|endgroup|def|Everbatim[]|end[verbatim]]
+%% |endgroup
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}%
+\endgroup
+%
+\def\verbatim{%
+ \def\Everbatim{\nonfillfinish\endgroup}%
+ \begingroup
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ \begingroup\setupverbatim\doverbatim
+}
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+% Allow normal characters that we make active in the argument (a file name).
+\def\verbatiminclude{%
+ \begingroup
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \parsearg\doverbatiminclude
+}
+\def\setupverbatiminclude{%
+ \begingroup
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ \begingroup\setupverbatim
+}
+%
+\def\doverbatiminclude#1{%
+ % Restore active chars for included file.
+ \endgroup
+ \begingroup
+ \let\value=\expandablevalue
+ \def\thisfile{#1}%
+ \expandafter\expandafter\setupverbatiminclude\input\thisfile
+ \endgroup
+ \nonfillfinish
+ \endgroup
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later. Many commands won't be
+% allowed in this context, but that's ok.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\begingroup
+ % Define a command to swallow text until we reach `@end copying'.
+ % \ is the escape char in this texinfo.tex file, so it is the
+ % delimiter for the command; @ will be the escape char when we read
+ % it, but that doesn't matter.
+ \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}%
+ %
+ % We must preserve ^^M's in the input file; see \insertcopying below.
+ \catcode`\^^M = \active
+ \docopying
+}
+
+% What we do to finish off the copying text.
+%
+\def\enddocopying{\endgroup\ignorespaces}
+
+% @insertcopying. Here we must play games with ^^M's. On the one hand,
+% we need them to delimit commands such as `@end quotation', so they
+% must be active. On the other hand, we certainly don't want every
+% end-of-line to be a \par, as would happen with the normal active
+% definition of ^^M. On the third hand, two ^^M's in a row should still
+% generate a \par.
+%
+% Our approach is to make ^^M insert a space and a penalty1 normally;
+% then it can also check if \lastpenalty=1. If it does, then manually
+% do \par.
+%
+% This messes up the normal definitions of @c[omment], so we redefine
+% it. Similarly for @ignore. (These commands are used in the gcc
+% manual for man page generation.)
+%
+% Seems pretty fragile, most line-oriented commands will presumably
+% fail, but for the limited use of getting the copying text (which
+% should be quite simple) inserted, we can hope it's ok.
+%
+{\catcode`\^^M=\active %
+\gdef\insertcopying{\begingroup %
+ \parindent = 0pt % looks wrong on title page
+ \def^^M{%
+ \ifnum \lastpenalty=1 %
+ \par %
+ \else %
+ \space \penalty 1 %
+ \fi %
+ }%
+ %
+ % Fix @c[omment] for catcode 13 ^^M's.
+ \def\c##1^^M{\ignorespaces}%
+ \let\comment = \c %
+ %
+ % Don't bother jumping through all the hoops that \doignore does, it
+ % would be very hard since the catcodes are already set.
+ \long\def\ignore##1\end ignore{\ignorespaces}%
+ %
+ \copyingtext %
+\endgroup}%
+}
+
+\message{defuns,}
+% @defun etc.
+
+% Allow user to change definition object font (\df) internally
+\def\setdeffont#1 {\csname DEF#1\endcsname}
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+\newcount\parencount
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\&=\active
+ \catcode`\[=\active \catcode`\]=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+\global\let(=\lparen \global\let)=\rparen
+\global\let[=\lbrack \global\let]=\rbrack
+
+\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
+\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+% This is used to turn on special parens
+% but make & act ordinary (given that it's active).
+\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
+
+% Definitions of (, ) and & used in args for functions.
+% This is the definition of ( outside of all parentheses.
+\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
+ \global\advance\parencount by 1
+}
+%
+% This is the definition of ( when already inside a level of parens.
+\gdef\opnested{\char`\(\global\advance\parencount by 1 }
+%
+\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
+ % also in that case restore the outer-level definition of (.
+ \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
+ \global\advance \parencount by -1 }
+% If we encounter &foo, then turn on ()-hacking afterwards
+\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ }
+%
+\gdef\normalparens{\boldbrax\let&=\ampnr}
+} % End of definition inside \activeparens
+%% These parens (in \boldbrax) actually are a little bolder than the
+%% contained text. This is especially needed for [ and ]
+\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
+\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
+\let\ampnr = \&
+\def\lbrb{{\bf\char`\[}}
+\def\rbrb{{\bf\char`\]}}
+
+% Active &'s sneak into the index arguments, so make sure it's defined.
+{
+ \catcode`& = \active
+ \global\let& = \ampnr
+}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the function name.
+% #2 is the type of definition, such as "Function".
+%
+\def\defname#1#2{%
+ % How we'll output the type name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \ifempty{#2}%
+ \def\defnametype{}%
+ \else
+ \def\defnametype{[\rm #2]}%
+ \fi
+ %
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \dimen2=\leftskip
+ \advance\dimen2 by -\defbodyindent
+ %
+ % Figure out values for the paragraph shape.
+ \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}%
+ \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line
+ \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations
+ \parshape 2 0in \dimen0 \defargsindent \dimen1
+ %
+ % Output arg 2 ("Function" or some such) but stuck inside a box of
+ % width 0 so it does not interfere with linebreaking.
+ \noindent
+ %
+ {% Adjust \hsize to exclude the ambient margins,
+ % so that \rightline will obey them.
+ \advance \hsize by -\dimen2
+ \dimen3 = 0pt % was -1.25pc
+ \rlap{\rightline{\defnametype\kern\dimen3}}%
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \advance\leftskip by -\defbodyindent
+ \exdentamount=\defbodyindent
+ {\df #1}\enskip % output function name
+ % \defunargs will be called next to output the arguments, if any.
+}
+
+% Common pieces to start any @def...
+% #1 is the \E... control sequence to end the definition (which we define).
+% #2 is the \...x control sequence (which our caller defines).
+% #3 is the control sequence to process the header, such as \defunheader.
+%
+\def\parsebodycommon#1#2#3{%
+ \begingroup\inENV
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we want to allow a
+ % break after all. Check for penalty 10002 (inserted by
+ % \defargscommonending) instead of 10000, since the sectioning
+ % commands insert a \penalty10000, and we don't want to allow a break
+ % between a section heading and a defun.
+ \ifnum\lastpenalty=10002 \penalty0 \fi
+ \medbreak
+ %
+ % Define the \E... end token that this defining construct specifies
+ % so that it will exit this group.
+ \def#1{\endgraf\endgroup\medbreak}%
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+% Common part of the \...x definitions.
+%
+\def\defxbodycommon{%
+ % As with \parsebodycommon above, allow line break if we have multiple
+ % x headers in a row. It's not a great place, though.
+ \ifnum\lastpenalty=10000 \penalty1000 \fi
+ %
+ \begingroup\obeylines
+}
+
+% Process body of @defun, @deffn, @defmac, etc.
+%
+\def\defparsebody#1#2#3{%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2{\defxbodycommon \activeparens \spacesplit#3}%
+ \catcode\equalChar=\active
+ \begingroup\obeylines\activeparens
+ \spacesplit#3%
+}
+
+% #1, #2, #3 are the common arguments (see \parsebodycommon above).
+% #4, delimited by the space, is the class name.
+%
+\def\defmethparsebody#1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}%
+ \begingroup\obeylines\activeparens
+ % The \empty here prevents misinterpretation of a construct such as
+ % @deffn {whatever} {Enharmonic comma}
+ % See comments at \deftpparsebody, although in our case we don't have
+ % to remove the \empty afterwards, since it is empty.
+ \spacesplit{#3{#4}}\empty
+}
+
+% Used for @deftypemethod and @deftypeivar.
+% #1, #2, #3 are the common arguments (see \defparsebody).
+% #4, delimited by a space, is the class name.
+% #5 is the method's return type.
+%
+\def\deftypemethparsebody#1#2#3#4 #5 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}%
+ \begingroup\obeylines\activeparens
+ \spacesplit{#3{#4}{#5}}%
+}
+
+% Used for @deftypeop. The change from \deftypemethparsebody is an
+% extra argument at the beginning which is the `category', instead of it
+% being the hardwired string `Method' or `Instance Variable'. We have
+% to account for this both in the \...x definition and in parsing the
+% input at hand. Thus also need a control sequence (passed as #5) for
+% the \E... definition to assign the category name to.
+%
+\def\deftypeopparsebody#1#2#3#4#5 #6 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 ##2 ##3 {\def#4{##1}%
+ \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}%
+ \begingroup\obeylines\activeparens
+ \spacesplit{#3{#5}{#6}}%
+}
+
+% For @defop.
+\def\defopparsebody #1#2#3#4#5 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 ##2 {\def#4{##1}%
+ \defxbodycommon \activeparens \spacesplit{#3{##2}}}%
+ \begingroup\obeylines\activeparens
+ \spacesplit{#3{#5}}%
+}
+
+% These parsing functions are similar to the preceding ones
+% except that they do not make parens into active characters.
+% These are used for "variables" since they have no arguments.
+%
+\def\defvarparsebody #1#2#3{%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2{\defxbodycommon \spacesplit#3}%
+ \catcode\equalChar=\active
+ \begingroup\obeylines
+ \spacesplit#3%
+}
+
+% @defopvar.
+\def\defopvarparsebody #1#2#3#4#5 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 ##2 {\def#4{##1}%
+ \defxbodycommon \spacesplit{#3{##2}}}%
+ \begingroup\obeylines
+ \spacesplit{#3{#5}}%
+}
+
+\def\defvrparsebody#1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
+ \begingroup\obeylines
+ \spacesplit{#3{#4}}%
+}
+
+% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
+% type is just `struct', because we lose the braces in `{struct
+% termios}' when \spacesplit reads its undelimited argument. Sigh.
+% \let\deftpparsebody=\defvrparsebody
+%
+% So, to get around this, we put \empty in with the type name. That
+% way, TeX won't find exactly `{...}' as an undelimited argument, and
+% won't strip off the braces.
+%
+\def\deftpparsebody #1#2#3#4 {%
+ \parsebodycommon{#1}{#2}{#3}%
+ \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
+ \begingroup\obeylines
+ \spacesplit{\parsetpheaderline{#3{#4}}}\empty
+}
+
+% Fine, but then we have to eventually remove the \empty *and* the
+% braces (if any). That's what this does.
+%
+\def\removeemptybraces\empty#1\relax{#1}
+
+% After \spacesplit has done its work, this is called -- #1 is the final
+% thing to call, #2 the type name (which starts with \empty), and #3
+% (which might be empty) the arguments.
+%
+\def\parsetpheaderline#1#2#3{%
+ #1{\removeemptybraces#2\relax}{#3}%
+}%
+
+% Split up #2 (the rest of the input line) at the first space token.
+% call #1 with two arguments:
+% the first is all of #2 before the space token,
+% the second is all of #2 after that space token.
+% If #2 contains no space token, all of it is passed as the first arg
+% and the second is passed as empty.
+%
+{\obeylines %
+ \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}%
+ \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{%
+ \ifx\relax #3%
+ #1{#2}{}%
+ \else %
+ #1{#2}{#3#4}%
+ \fi}%
+}
+
+% Define @defun.
+
+% This is called to end the arguments processing for all the @def... commands.
+%
+\def\defargscommonending{%
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty 10002 % signal to \parsebodycommon.
+}
+
+% This expands the args and terminates the paragraph they comprise.
+%
+\def\defunargs#1{\functionparens \sl
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+% Set the font temporarily and use \font in case \setfont made \tensl a macro.
+{\tensl\hyphenchar\font=0}%
+#1%
+{\tensl\hyphenchar\font=45}%
+\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
+ \defargscommonending
+}
+
+\def\deftypefunargs #1{%
+% Expand, preventing hyphenation at `-' chars.
+% Note that groups don't affect changes in \hyphenchar.
+% Use \boldbraxnoamp, not \functionparens, so that & is not special.
+\boldbraxnoamp
+\tclose{#1}% avoid \code because of side effects on active chars
+ \defargscommonending
+}
+
+% Do complete processing of one @defun or @defunx line already parsed.
+
+% @deffn Command forward-char nchars
+
+\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
+
+\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @defun == @deffn Function
+
+\def\defun{\defparsebody\Edefun\defunx\defunheader}
+
+\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDeffunc}%
+\defunargs {#2}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefun int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
+
+% #1 is the data type. #2 is the name and args.
+\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
+% #1 is the data type, #2 the name, #3 the args.
+\def\deftypefunheaderx #1#2 #3\relax{%
+\doind {fn}{\code{#2}}% Make entry in function index
+\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
+\deftypefunargs {#3}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
+
+\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
+
+% \defheaderxcond#1\relax$.$
+% puts #1 in @code, followed by a space, but does nothing if #1 is null.
+\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
+
+% #1 is the classification. #2 is the data type. #3 is the name and args.
+\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
+% #1 is the classification, #2 the data type, #3 the name, #4 the args.
+\def\deftypefnheaderx #1#2#3 #4\relax{%
+\doind {fn}{\code{#3}}% Make entry in function index
+\begingroup
+\normalparens % notably, turn off `&' magic, which prevents
+% at least some C++ text from working
+\defname {\defheaderxcond#2\relax$.$#3}{#1}%
+\deftypefunargs {#4}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @defmac == @deffn Macro
+
+\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
+
+\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDefmac}%
+\defunargs {#2}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @defspec == @deffn Special Form
+
+\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
+
+\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
+\begingroup\defname {#1}{\putwordDefspec}%
+\defunargs {#2}\endgroup %
+\catcode\equalChar=\other % Turn off change made in \defparsebody
+}
+
+% @defop CATEGORY CLASS OPERATION ARG...
+%
+\def\defop #1 {\def\defoptype{#1}%
+\defopparsebody\Edefop\defopx\defopheader\defoptype}
+%
+\def\defopheader#1#2#3{%
+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry
+ \begingroup
+ \defname{#2}{\defoptype\ \putwordon\ #1}%
+ \defunargs{#3}%
+ \endgroup
+}
+
+% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
+%
+\def\deftypeop #1 {\def\deftypeopcategory{#1}%
+ \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
+ \deftypeopcategory}
+%
+% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
+\def\deftypeopheader#1#2#3#4{%
+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$.$#3}
+ {\deftypeopcategory\ \putwordon\ \code{#1}}%
+ \deftypefunargs{#4}%
+ \endgroup
+}
+
+% @deftypemethod CLASS TYPE METHOD ARG...
+%
+\def\deftypemethod{%
+ \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
+%
+% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
+\def\deftypemethodheader#1#2#3#4{%
+ \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
+ \deftypefunargs{#4}%
+ \endgroup
+}
+
+% @deftypeivar CLASS TYPE VARNAME
+%
+\def\deftypeivar{%
+ \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
+%
+% #1 is the class name, #2 the data type, #3 the variable name.
+\def\deftypeivarheader#1#2#3{%
+ \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
+ \begingroup
+ \defname{\defheaderxcond#2\relax$.$#3}
+ {\putwordInstanceVariableof\ \code{#1}}%
+ \defvarargs{#3}%
+ \endgroup
+}
+
+% @defmethod == @defop Method
+%
+\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
+%
+% #1 is the class name, #2 the method name, #3 the args.
+\def\defmethodheader#1#2#3{%
+ \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
+ \begingroup
+ \defname{#2}{\putwordMethodon\ \code{#1}}%
+ \defunargs{#3}%
+ \endgroup
+}
+
+% @defcv {Class Option} foo-class foo-flag
+
+\def\defcv #1 {\def\defcvtype{#1}%
+\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
+
+\def\defcvarheader #1#2#3{%
+ \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry
+ \begingroup
+ \defname{#2}{\defcvtype\ \putwordof\ #1}%
+ \defvarargs{#3}%
+ \endgroup
+}
+
+% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
+%
+\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
+%
+\def\defivarheader#1#2#3{%
+ \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index
+ \begingroup
+ \defname{#2}{\putwordInstanceVariableof\ #1}%
+ \defvarargs{#3}%
+ \endgroup
+}
+
+% @defvar
+% First, define the processing that is wanted for arguments of @defvar.
+% This is actually simple: just print them in roman.
+% This must expand the args and terminate the paragraph they make up
+\def\defvarargs #1{\normalparens #1%
+ \defargscommonending
+}
+
+% @defvr Counter foo-count
+
+\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
+
+\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
+\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
+
+% @defvar == @defvr Variable
+
+\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
+
+\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{\putwordDefvar}%
+\defvarargs {#2}\endgroup %
+}
+
+% @defopt == @defvr {User Option}
+
+\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
+
+\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
+\begingroup\defname {#1}{\putwordDefopt}%
+\defvarargs {#2}\endgroup %
+}
+
+% @deftypevar int foobar
+
+\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
+
+% #1 is the data type. #2 is the name, perhaps followed by text that
+% is actually part of the data type, which should not be put into the index.
+\def\deftypevarheader #1#2{%
+\dovarind#2 \relax% Make entry in variables index
+\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
+ \defargscommonending
+\endgroup}
+\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
+
+% @deftypevr {Global Flag} int enable
+
+\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
+
+\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
+\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
+ \defargscommonending
+\endgroup}
+
+% Now define @deftp
+% Args are printed in bold, a slight difference from @defvar.
+
+\def\deftpargs #1{\bf \defvarargs{#1}}
+
+% @deftp Class window height width ...
+
+\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
+
+\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
+\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
+
+% These definitions are used if you use @defunx (etc.)
+% anywhere other than immediately after a @defun or @defunx.
+%
+\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
+\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
+\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
+\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
+\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
+\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
+\def\defopx#1 {\errmessage{@defopx in invalid context}}
+\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
+\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
+\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
+\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
+\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
+\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
+\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
+\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
+\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
+\def\defunx#1 {\errmessage{@defunx in invalid context}}
+\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
+\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scanmacro#1{%
+ \begingroup \newlinechar`\^^M
+ % Undo catcode changes of \startcontents and \doprintindex
+ \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
+ % Append \endinput to make sure that TeX does not see the ending newline.
+ \toks0={#1\endinput}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \let\xeatspaces\eatspaces
+ \input \jobname.tmp
+ \endgroup
+}
+\else
+\def\scanmacro#1{%
+\begingroup \newlinechar`\^^M
+% Undo catcode changes of \startcontents and \doprintindex
+\catcode`\@=0 \catcode`\\=\other \escapechar=`\@
+\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
+\fi
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+\def\macrolist{} % List of all defined macros in the form
+ % \do\macro1\do\macro2...
+
+% Utility routines.
+% Thisdoes \let #1 = #2, except with \csnames.
+\def\cslet#1#2{%
+\expandafter\expandafter
+\expandafter\let
+\expandafter\expandafter
+\csname#1\endcsname
+\csname#2\endcsname}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\macrobodyctxt{%
+ \catcode`\~=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\+=\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\@=\other
+ \catcode`\^^M=\other
+ \usembodybackslash}
+
+\def\macroargctxt{%
+ \catcode`\~=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\+=\other
+ \catcode`\@=\other
+ \catcode`\\=\other}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0%
+ \else
+ \expandafter\parsemargdef \argl;%
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ % Add the macroname to \macrolist
+ \toks0 = \expandafter{\macrolist\do}%
+ \xdef\macrolist{\the\toks0
+ \expandafter\noexpand\csname\the\macname\endcsname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\def\unmacro{\parsearg\dounmacro}
+\def\dounmacro#1{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\do\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx#1\relax
+ % remove this
+ \else
+ \noexpand\do \noexpand #1%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1%
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \fi
+ \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \next}
+
+% We mant to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Just make them active and then expand them all to nothing.
+\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{\ignoreactivespaces
+\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
+ \expandafter\noexpand\csname#2\endcsname}%
+\expandafter\endgroup\next}
+
+
+\message{cross references,}
+% @xref etc.
+
+\newwrite\auxfile
+
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's job is to define \lastnode.
+\def\node{\ENVcheck\parsearg\nodezzz}
+\def\nodezzz#1{\nodexxx [#1,]}
+\def\nodexxx[#1,#2]{\gdef\lastnode{#1}}
+\let\nwnode=\node
+\let\lastnode=\relax
+
+% The sectioning commands (@chapter, etc.) call these.
+\def\donoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}%
+ {Ysectionnumberandtype}%
+ \global\let\lastnode=\relax
+ \fi
+}
+\def\unnumbnoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
+ \global\let\lastnode=\relax
+ \fi
+}
+\def\appendixnoderef{%
+ \ifx\lastnode\relax\else
+ \expandafter\expandafter\expandafter\setref{\lastnode}%
+ {Yappendixletterandtype}%
+ \global\let\lastnode=\relax
+ \fi
+}
+
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), namely NAME-title (the corresponding @chapter/etc. name),
+% NAME-pg (the page number), and NAME-snt (section number and type).
+% Called from \foonoderef.
+%
+% We have to set \indexdummies so commands such as @code in a section
+% title aren't expanded. It would be nicer not to expand the titles in
+% the first place, but there's so many layers that that is hard to do.
+%
+% Likewise, use \turnoffactive so that punctuation chars such as underscore
+% and backslash work in node names.
+%
+\def\setref#1#2{{%
+ \atdummies
+ \pdfmkdest{#1}%
+ %
+ \turnoffactive
+ \dosetq{#1-title}{Ytitle}%
+ \dosetq{#1-pg}{Ypagenumber}%
+ \dosetq{#1-snt}{#2}%
+}}
+
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printednodename{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual}%
+ \setbox0=\hbox{\printednodename}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1 > 0pt
+ % It is in another manual, so we don't have it.
+ \def\printednodename{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+ \def\printednodename{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printednodename{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+ % insert empty discretionaries after hyphens, which means that it will
+ % not find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens, this
+ % is a loss. Therefore, we give the text of the node name again, so it
+ % is as if TeX is seeing it for the first time.
+ \ifpdf
+ \leavevmode
+ \getfilename{#4}%
+ {\turnoffactive \otherbackslash
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{#1}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{#1}%
+ \fi
+ }%
+ \linkcolor
+ \fi
+ %
+ \ifdim \wd1 > 0pt
+ \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
+ \else
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive \otherbackslash
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % [mynode],
+ [\printednodename],\space
+ % page 3
+ \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
+ \fi
+ \endlink
+\endgroup}
+
+% \dosetq is called from \setref to do the actual \write (\iflinks).
+%
+\def\dosetq#1#2{%
+ {\let\folio=0%
+ \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
+ \iflinks \next \fi
+ }%
+}
+
+% \internalsetq{foo}{page} expands into
+% CHARACTERS @xrdef{foo}{...expansion of \page...}
+\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}}
+
+% Things to be expanded by \internalsetq.
+%
+\def\Ypagenumber{\folio}
+\def\Ytitle{\thissection}
+\def\Ynothing{}
+\def\Ysectionnumberandtype{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+\def\Yappendixletterandtype{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{\the\inputlineno:\space}
+\fi
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname X#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file.
+%
+\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname}
+
+% Read the last existing aux file, if any. No error if none exists.
+\def\readauxfile{\begingroup
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % Make the characters 128-255 be printing characters
+ {%
+ \count 1=128
+ \def\loop{%
+ \catcode\count 1=\other
+ \advance\count 1 by 1
+ \ifnum \count 1<256 \loop \fi
+ }%
+ }%
+ %
+ % Turn off \ as an escape so we do not lose on
+ % entries which were dumped with control sequences in their names.
+ % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^
+ % Reference to such entries still does not work the way one would wish,
+ % but at least they do not bomb out when the aux file is read in.
+ \catcode`\\=\other
+ %
+ % @ is our escape character in .aux files.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+ %
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \closein 1
+ \input \jobname.aux
+ \global\havexrefstrue
+ \global\warnedobstrue
+ \fi
+ % Open the new aux file. TeX will close it automatically at exit.
+ \openout\auxfile=\jobname.aux
+\endgroup}
+
+
+% Footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+\let\ptexfootnote=\footnote
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset and anything else that uses
+% \parseargline fail inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+% The start of the footnote looks usually like this:
+\gdef\startfootins{\insert\footins\bgroup}
+%
+% ... but this macro is redefined inside @multitable.
+%
+\gdef\dofootnote{%
+ \startfootins
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ \closein 1
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\undefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \nobreak\bigskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \line\bgroup\hss
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
+\endgroup}
+
+
+\message{localization,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\def\documentlanguage{\parsearg\dodocumentlanguage}
+\def\dodocumentlanguage#1{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \let\temp = \relax
+ \else
+ \def\temp{\input txi-#1.tex }%
+ \fi
+ \temp
+ \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? In the current directory
+should work if nowhere else does.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
+% physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{51\baselineskip}{160mm}
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\def\pagesizes{\parsearg\pagesizesxxx}
+\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in ttfont
+% where it can probably just be output, and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% Set up an active definition for =, but don't enable it most of the time.
+{\catcode`\==\active
+\global\def={{\tt \char 61}}}
+
+\catcode`+=\active
+\catcode`\_=\active
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+\catcode`\@=0
+
+% \rawbackslashxx outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\rawbackslashxx=`\\
+
+% \rawbackslash defines an active \ to do \rawbackslashxx.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+{\catcode`\\=\active
+ @gdef@rawbackslash{@let\=@rawbackslashxx}
+ @gdef@otherbackslash{@let\=@realbackslash}
+}
+
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\rawbackslashxx}}
+
+\catcode`\\=\active
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+@def@turnoffactive{%
+ @let"=@normaldoublequote
+ @let\=@realbackslash
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar %$ font-lock fix
+}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'. (Thus, \ is not expandable when this is in
+% effect.)
+%
+@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\{ in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also back turn on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active
+ @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+@c Set initial fonts.
+@textfonts
+@rm
+
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+++ /dev/null
-../../COPYING
\ No newline at end of file
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+++ /dev/null
-../../include/ansi_stdlib.h
\ No newline at end of file
--- /dev/null
+/* ansi_stdlib.h -- An ANSI Standard stdlib.h. */
+/* A minimal stdlib.h containing extern declarations for those functions
+ that bash uses. */
+
+/* Copyright (C) 1993 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#if !defined (_STDLIB_H_)
+#define _STDLIB_H_ 1
+
+/* String conversion functions. */
+extern int atoi ();
+
+extern double atof ();
+extern double strtod ();
+
+/* Memory allocation functions. */
+/* Generic pointer type. */
+#ifndef PTR_T
+
+#if defined (__STDC__)
+# define PTR_T void *
+#else
+# define PTR_T char *
+#endif
+
+#endif /* PTR_T */
+
+extern PTR_T malloc ();
+extern PTR_T realloc ();
+extern void free ();
+
+/* Other miscellaneous functions. */
+extern void abort ();
+extern void exit ();
+extern char *getenv ();
+extern void qsort ();
+
+#endif /* _STDLIB_H */
+++ /dev/null
-../../../doc/fdl.texi
\ No newline at end of file
--- /dev/null
+@c The GNU Free Documentation License.
+@center Version 1.2, November 2002
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
+++ /dev/null
-../../include/posixdir.h
\ No newline at end of file
--- /dev/null
+/* posixdir.h -- Posix directory reading includes and defines. */
+
+/* Copyright (C) 1987,1991 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* This file should be included instead of <dirent.h> or <sys/dir.h>. */
+
+#if !defined (_POSIXDIR_H_)
+#define _POSIXDIR_H_
+
+#if defined (HAVE_DIRENT_H)
+# include <dirent.h>
+# if defined (HAVE_STRUCT_DIRENT_D_NAMLEN)
+# define D_NAMLEN(d) ((d)->d_namlen)
+# else
+# define D_NAMLEN(d) (strlen ((d)->d_name))
+# endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */
+#else
+# if defined (HAVE_SYS_NDIR_H)
+# include <sys/ndir.h>
+# endif
+# if defined (HAVE_SYS_DIR_H)
+# include <sys/dir.h>
+# endif
+# if defined (HAVE_NDIR_H)
+# include <ndir.h>
+# endif
+# if !defined (dirent)
+# define dirent direct
+# endif /* !dirent */
+# define D_NAMLEN(d) ((d)->d_namlen)
+#endif /* !HAVE_DIRENT_H */
+
+#if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO)
+# define d_fileno d_ino
+#endif
+
+#if defined (_POSIX_SOURCE) && (!defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO))
+/* Posix does not require that the d_ino field be present, and some
+ systems do not provide it. */
+# define REAL_DIR_ENTRY(dp) 1
+#else
+# define REAL_DIR_ENTRY(dp) (dp->d_ino != 0)
+#endif /* _POSIX_SOURCE */
+
+#endif /* !_POSIXDIR_H_ */
+++ /dev/null
-../../include/posixjmp.h
\ No newline at end of file
--- /dev/null
+/* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */
+
+/* Copyright (C) 1987,1991 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _POSIXJMP_H_
+#define _POSIXJMP_H_
+
+#include <setjmp.h>
+
+/* This *must* be included *after* config.h */
+
+#if defined (HAVE_POSIX_SIGSETJMP)
+# define procenv_t sigjmp_buf
+# if !defined (__OPENNT)
+# undef setjmp
+# define setjmp(x) sigsetjmp((x), 1)
+# undef longjmp
+# define longjmp(x, n) siglongjmp((x), (n))
+# endif /* !__OPENNT */
+#else
+# define procenv_t jmp_buf
+#endif
+
+#endif /* _POSIXJMP_H_ */
+++ /dev/null
-../../include/posixstat.h
\ No newline at end of file
--- /dev/null
+/* posixstat.h -- Posix stat(2) definitions for systems that
+ don't have them. */
+
+/* Copyright (C) 1987,1991 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* This file should be included instead of <sys/stat.h>.
+ It relies on the local sys/stat.h to work though. */
+#if !defined (_POSIXSTAT_H_)
+#define _POSIXSTAT_H_
+
+#include <sys/stat.h>
+
+#if defined (STAT_MACROS_BROKEN)
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISREG
+# undef S_ISLNK
+#endif /* STAT_MACROS_BROKEN */
+
+/* These are guaranteed to work only on isc386 */
+#if !defined (S_IFDIR) && !defined (S_ISDIR)
+# define S_IFDIR 0040000
+#endif /* !S_IFDIR && !S_ISDIR */
+#if !defined (S_IFMT)
+# define S_IFMT 0170000
+#endif /* !S_IFMT */
+
+/* Posix 1003.1 5.6.1.1 <sys/stat.h> file types */
+
+/* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but
+ do not provide the S_IS* macros that Posix requires. */
+
+#if defined (_S_IFMT) && !defined (S_IFMT)
+#define S_IFMT _S_IFMT
+#endif
+#if defined (_S_IFIFO) && !defined (S_IFIFO)
+#define S_IFIFO _S_IFIFO
+#endif
+#if defined (_S_IFCHR) && !defined (S_IFCHR)
+#define S_IFCHR _S_IFCHR
+#endif
+#if defined (_S_IFDIR) && !defined (S_IFDIR)
+#define S_IFDIR _S_IFDIR
+#endif
+#if defined (_S_IFBLK) && !defined (S_IFBLK)
+#define S_IFBLK _S_IFBLK
+#endif
+#if defined (_S_IFREG) && !defined (S_IFREG)
+#define S_IFREG _S_IFREG
+#endif
+#if defined (_S_IFLNK) && !defined (S_IFLNK)
+#define S_IFLNK _S_IFLNK
+#endif
+#if defined (_S_IFSOCK) && !defined (S_IFSOCK)
+#define S_IFSOCK _S_IFSOCK
+#endif
+
+/* Test for each symbol individually and define the ones necessary (some
+ systems claiming Posix compatibility define some but not all). */
+
+#if defined (S_IFBLK) && !defined (S_ISBLK)
+#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */
+#endif
+
+#if defined (S_IFCHR) && !defined (S_ISCHR)
+#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */
+#endif
+
+#if defined (S_IFDIR) && !defined (S_ISDIR)
+#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */
+#endif
+
+#if defined (S_IFREG) && !defined (S_ISREG)
+#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */
+#endif
+
+#if defined (S_IFIFO) && !defined (S_ISFIFO)
+#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */
+#endif
+
+#if defined (S_IFLNK) && !defined (S_ISLNK)
+#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */
+#endif
+
+#if defined (S_IFSOCK) && !defined (S_ISSOCK)
+#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */
+#endif
+
+/*
+ * POSIX 1003.1 5.6.1.2 <sys/stat.h> File Modes
+ */
+
+#if !defined (S_IRWXU)
+# if !defined (S_IREAD)
+# define S_IREAD 00400
+# define S_IWRITE 00200
+# define S_IEXEC 00100
+# endif /* S_IREAD */
+
+# if !defined (S_IRUSR)
+# define S_IRUSR S_IREAD /* read, owner */
+# define S_IWUSR S_IWRITE /* write, owner */
+# define S_IXUSR S_IEXEC /* execute, owner */
+
+# define S_IRGRP (S_IREAD >> 3) /* read, group */
+# define S_IWGRP (S_IWRITE >> 3) /* write, group */
+# define S_IXGRP (S_IEXEC >> 3) /* execute, group */
+
+# define S_IROTH (S_IREAD >> 6) /* read, other */
+# define S_IWOTH (S_IWRITE >> 6) /* write, other */
+# define S_IXOTH (S_IEXEC >> 6) /* execute, other */
+# endif /* !S_IRUSR */
+
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif /* !S_IRWXU */
+
+/* These are non-standard, but are used in builtins.c$symbolic_umask() */
+#define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH)
+#define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH)
+#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+
+#endif /* _POSIXSTAT_H_ */
+++ /dev/null
-../tilde/tilde.c
\ No newline at end of file
--- /dev/null
+/* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */
+
+/* Copyright (C) 1988-2009 Free Software Foundation, Inc.
+
+ This file is part of the GNU Readline Library (Readline), a library
+ for reading lines of text with interactive input and history editing.
+
+ Readline 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 3 of the License, or
+ (at your option) any later version.
+
+ Readline 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 Readline. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#if defined (HAVE_CONFIG_H)
+# include <config.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+# ifdef _MINIX
+# include <sys/types.h>
+# endif
+# include <unistd.h>
+#endif
+
+#if defined (HAVE_STRING_H)
+# include <string.h>
+#else /* !HAVE_STRING_H */
+# include <strings.h>
+#endif /* !HAVE_STRING_H */
+
+#if defined (HAVE_STDLIB_H)
+# include <stdlib.h>
+#else
+# include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#include <sys/types.h>
+#if defined (HAVE_PWD_H)
+#include <pwd.h>
+#endif
+
+#include "tilde.h"
+
+#if defined (TEST) || defined (STATIC_MALLOC)
+static void *xmalloc (), *xrealloc ();
+#else
+# include "xmalloc.h"
+#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)
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
+#endif /* !savestring */
+
+#if !defined (NULL)
+# if defined (__STDC__)
+# define NULL ((void *) 0)
+# else
+# define NULL 0x0
+# endif /* !__STDC__ */
+#endif /* !NULL */
+
+/* If being compiled as part of bash, these will be satisfied from
+ variables.o. If being compiled as part of readline, they will
+ be satisfied from shell.o. */
+extern char *sh_get_home_dir PARAMS((void));
+extern char *sh_get_env_value PARAMS((const char *));
+
+/* The default value of tilde_additional_prefixes. This is set to
+ whitespace preceding a tilde so that simple programs which do not
+ perform any word separation get desired behaviour. */
+static const char *default_prefixes[] =
+ { " ~", "\t~", (const char *)NULL };
+
+/* The default value of tilde_additional_suffixes. This is set to
+ whitespace or newline so that simple programs which do not
+ perform any word separation get desired behaviour. */
+static const char *default_suffixes[] =
+ { " ", "\n", (const char *)NULL };
+
+/* If non-null, this contains the address of a function that the application
+ wants called before trying the standard tilde expansions. The function
+ is called with the text sans tilde, and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if the expansion fails. */
+tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL;
+
+/* If non-null, this contains the address of a function to call if the
+ standard meaning for expanding a tilde fails. The function is called
+ with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if there is no expansion. */
+tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL;
+
+/* When non-null, this is a NULL terminated array of strings which
+ are duplicates for a tilde prefix. Bash uses this to expand
+ `=~' and `:~'. */
+char **tilde_additional_prefixes = (char **)default_prefixes;
+
+/* When non-null, this is a NULL terminated array of strings which match
+ the end of a username, instead of just "/". Bash sets this to
+ `:' and `=~'. */
+char **tilde_additional_suffixes = (char **)default_suffixes;
+
+static int tilde_find_prefix PARAMS((const char *, int *));
+static int tilde_find_suffix PARAMS((const char *));
+static char *isolate_tilde_prefix PARAMS((const char *, int *));
+static char *glue_prefix_and_suffix PARAMS((char *, const char *, int));
+
+/* Find the start of a tilde expansion in STRING, and return the index of
+ the tilde which starts the expansion. Place the length of the text
+ which identified this tilde starter in LEN, excluding the tilde itself. */
+static int
+tilde_find_prefix (string, len)
+ const char *string;
+ int *len;
+{
+ register int i, j, string_len;
+ register char **prefixes;
+
+ prefixes = tilde_additional_prefixes;
+
+ string_len = strlen (string);
+ *len = 0;
+
+ if (*string == '\0' || *string == '~')
+ return (0);
+
+ if (prefixes)
+ {
+ for (i = 0; i < string_len; i++)
+ {
+ for (j = 0; prefixes[j]; j++)
+ {
+ if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0)
+ {
+ *len = strlen (prefixes[j]) - 1;
+ return (i + *len);
+ }
+ }
+ }
+ }
+ return (string_len);
+}
+
+/* Find the end of a tilde expansion in STRING, and return the index of
+ the character which ends the tilde definition. */
+static int
+tilde_find_suffix (string)
+ const char *string;
+{
+ register int i, j, string_len;
+ register char **suffixes;
+
+ suffixes = tilde_additional_suffixes;
+ string_len = strlen (string);
+
+ for (i = 0; i < string_len; i++)
+ {
+#if defined (__MSDOS__)
+ if (string[i] == '/' || string[i] == '\\' /* || !string[i] */)
+#else
+ if (string[i] == '/' /* || !string[i] */)
+#endif
+ break;
+
+ for (j = 0; suffixes && suffixes[j]; j++)
+ {
+ if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0)
+ return (i);
+ }
+ }
+ return (i);
+}
+
+/* Return a new string which is the result of tilde expanding STRING. */
+char *
+tilde_expand (string)
+ const char *string;
+{
+ char *result;
+ int result_size, result_index;
+
+ result_index = result_size = 0;
+ if (result = strchr (string, '~'))
+ result = (char *)xmalloc (result_size = (strlen (string) + 16));
+ else
+ result = (char *)xmalloc (result_size = (strlen (string) + 1));
+
+ /* Scan through STRING expanding tildes as we come to them. */
+ while (1)
+ {
+ register int start, end;
+ char *tilde_word, *expansion;
+ int len;
+
+ /* Make START point to the tilde which starts the expansion. */
+ start = tilde_find_prefix (string, &len);
+
+ /* Copy the skipped text into the result. */
+ if ((result_index + start + 1) > result_size)
+ result = (char *)xrealloc (result, 1 + (result_size += (start + 20)));
+
+ strncpy (result + result_index, string, start);
+ result_index += start;
+
+ /* Advance STRING to the starting tilde. */
+ string += start;
+
+ /* Make END be the index of one after the last character of the
+ username. */
+ end = tilde_find_suffix (string);
+
+ /* If both START and END are zero, we are all done. */
+ if (!start && !end)
+ break;
+
+ /* Expand the entire tilde word, and copy it into RESULT. */
+ tilde_word = (char *)xmalloc (1 + end);
+ strncpy (tilde_word, string, end);
+ tilde_word[end] = '\0';
+ string += end;
+
+ expansion = tilde_expand_word (tilde_word);
+ xfree (tilde_word);
+
+ len = strlen (expansion);
+#ifdef __CYGWIN__
+ /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when
+ $HOME for `user' is /. On cygwin, // denotes a network drive. */
+ if (len > 1 || *expansion != '/' || *string != '/')
+#endif
+ {
+ if ((result_index + len + 1) > result_size)
+ result = (char *)xrealloc (result, 1 + (result_size += (len + 20)));
+
+ strcpy (result + result_index, expansion);
+ result_index += len;
+ }
+ xfree (expansion);
+ }
+
+ result[result_index] = '\0';
+
+ return (result);
+}
+
+/* Take FNAME and return the tilde prefix we want expanded. If LENP is
+ non-null, the index of the end of the prefix into FNAME is returned in
+ the location it points to. */
+static char *
+isolate_tilde_prefix (fname, lenp)
+ const char *fname;
+ int *lenp;
+{
+ char *ret;
+ int i;
+
+ ret = (char *)xmalloc (strlen (fname));
+#if defined (__MSDOS__)
+ for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
+#else
+ for (i = 1; fname[i] && fname[i] != '/'; i++)
+#endif
+ ret[i - 1] = fname[i];
+ ret[i - 1] = '\0';
+ if (lenp)
+ *lenp = i;
+ 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 *
+glue_prefix_and_suffix (prefix, suffix, suffind)
+ char *prefix;
+ const char *suffix;
+ int suffind;
+{
+ char *ret;
+ int plen, slen;
+
+ plen = (prefix && *prefix) ? strlen (prefix) : 0;
+ slen = strlen (suffix + suffind);
+ ret = (char *)xmalloc (plen + slen + 1);
+ if (plen)
+ strcpy (ret, prefix);
+ strcpy (ret + plen, suffix + suffind);
+ return ret;
+}
+
+/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
+ tilde. If there is no expansion, call tilde_expansion_failure_hook.
+ This always returns a newly-allocated string, never static storage. */
+char *
+tilde_expand_word (filename)
+ const char *filename;
+{
+ char *dirname, *expansion, *username;
+ int user_len;
+ struct passwd *user_entry;
+
+ if (filename == 0)
+ return ((char *)NULL);
+
+ if (*filename != '~')
+ return (savestring (filename));
+
+ /* A leading `~/' or a bare `~' is *always* translated to the value of
+ $HOME or the home directory of the current user, regardless of any
+ preexpansion hook. */
+ if (filename[1] == '\0' || filename[1] == '/')
+ {
+ /* Prefix $HOME to the rest of the string. */
+ expansion = sh_get_env_value ("HOME");
+
+ /* If there is no HOME variable, look up the directory in
+ the password database. */
+ if (expansion == 0)
+ expansion = sh_get_home_dir ();
+
+ return (glue_prefix_and_suffix (expansion, filename, 1));
+ }
+
+ username = isolate_tilde_prefix (filename, &user_len);
+
+ if (tilde_expansion_preexpansion_hook)
+ {
+ expansion = (*tilde_expansion_preexpansion_hook) (username);
+ if (expansion)
+ {
+ dirname = glue_prefix_and_suffix (expansion, filename, user_len);
+ xfree (username);
+ free (expansion);
+ return (dirname);
+ }
+ }
+
+ /* 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,
+ and we couldn't find a standard expansion, then let them try. */
+ if (tilde_expansion_failure_hook)
+ {
+ expansion = (*tilde_expansion_failure_hook) (username);
+ if (expansion)
+ {
+ dirname = glue_prefix_and_suffix (expansion, filename, user_len);
+ free (expansion);
+ }
+ }
+ /* If we don't have a failure hook, or if the failure hook did not
+ expand the tilde, return a copy of what we were passed. */
+ if (dirname == 0)
+ dirname = savestring (filename);
+ }
+#if defined (HAVE_GETPWENT)
+ else
+ dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len);
+#endif
+
+ xfree (username);
+#if defined (HAVE_GETPWENT)
+ endpwent ();
+#endif
+ return (dirname);
+}
+
+\f
+#if defined (TEST)
+#undef NULL
+#include <stdio.h>
+
+main (argc, argv)
+ int argc;
+ char **argv;
+{
+ char *result, line[512];
+ int done = 0;
+
+ while (!done)
+ {
+ printf ("~expand: ");
+ fflush (stdout);
+
+ if (!gets (line))
+ strcpy (line, "done");
+
+ if ((strcmp (line, "done") == 0) ||
+ (strcmp (line, "quit") == 0) ||
+ (strcmp (line, "exit") == 0))
+ {
+ done = 1;
+ break;
+ }
+
+ result = tilde_expand (line);
+ printf (" --> %s\n", result);
+ free (result);
+ }
+ exit (0);
+}
+
+static void memory_error_and_abort ();
+
+static void *
+xmalloc (bytes)
+ size_t bytes;
+{
+ void *temp = (char *)malloc (bytes);
+
+ if (!temp)
+ memory_error_and_abort ();
+ return (temp);
+}
+
+static void *
+xrealloc (pointer, bytes)
+ void *pointer;
+ int bytes;
+{
+ void *temp;
+
+ if (!pointer)
+ temp = malloc (bytes);
+ else
+ temp = realloc (pointer, bytes);
+
+ if (!temp)
+ memory_error_and_abort ();
+
+ return (temp);
+}
+
+static void
+memory_error_and_abort ()
+{
+ fprintf (stderr, "readline: out of virtual memory\n");
+ abort ();
+}
+
+/*
+ * Local variables:
+ * compile-command: "gcc -g -DTEST -o tilde tilde.c"
+ * end:
+ */
+#endif /* TEST */
+++ /dev/null
-../tilde/tilde.h
\ No newline at end of file
--- /dev/null
+/* tilde.h: Externally available variables and function in libtilde.a. */
+
+/* Copyright (C) 1992-2009 Free Software Foundation, Inc.
+
+ This file contains the Readline Library (Readline), a set of
+ routines for providing Emacs style line input to programs that ask
+ for it.
+
+ Readline 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 3 of the License, or
+ (at your option) any later version.
+
+ Readline 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 Readline. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#if !defined (_TILDE_H_)
+# define _TILDE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* A function can be defined using prototypes and compile on both ANSI C
+ and traditional C compilers with something like this:
+ extern char *func PARAMS((char *, char *, int)); */
+
+#if !defined (PARAMS)
+# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
+# define PARAMS(protos) protos
+# else
+# define PARAMS(protos) ()
+# endif
+#endif
+
+typedef char *tilde_hook_func_t PARAMS((char *));
+
+/* If non-null, this contains the address of a function that the application
+ wants called before trying the standard tilde expansions. The function
+ is called with the text sans tilde, and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if the expansion fails. */
+extern tilde_hook_func_t *tilde_expansion_preexpansion_hook;
+
+/* If non-null, this contains the address of a function to call if the
+ standard meaning for expanding a tilde fails. The function is called
+ with the text (sans tilde, as in "foo"), and returns a malloc()'ed string
+ which is the expansion, or a NULL pointer if there is no expansion. */
+extern tilde_hook_func_t *tilde_expansion_failure_hook;
+
+/* When non-null, this is a NULL terminated array of strings which
+ are duplicates for a tilde prefix. Bash uses this to expand
+ `=~' and `:~'. */
+extern char **tilde_additional_prefixes;
+
+/* When non-null, this is a NULL terminated array of strings which match
+ the end of a username, instead of just "/". Bash sets this to
+ `:' and `=~'. */
+extern char **tilde_additional_suffixes;
+
+/* Return a new string which is the result of tilde expanding STRING. */
+extern char *tilde_expand PARAMS((const char *));
+
+/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
+ 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
+
+#endif /* _TILDE_H_ */
msgstr ""
"Project-Id-Version: bash 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2004-03-17 13:48+0200\n"
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: kan nie %s skep nie"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: leesalleen-funksie"
msgid "%s: cannot delete: %s"
msgstr "%s: kan nie %s skep nie"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: kan nie 'n binêre lêer uitvoer nie"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "pypfout: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: bevel nie gevind nie"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: is 'n gids"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "kan nie fd %d na fd 0 dupliseer nie: %s"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr ""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\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"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr ""
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr ""
msgid "%s: cannot delete: %s"
msgstr ""
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr ""
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr ""
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr ""
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr ""
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr ""
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr ""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2007-07-26 07:18+0300\n"
"Last-Translator: Alexander Shopov <ash@contact.bg>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: не може да се създаде: %s"
msgid "cannot use `-f' to make functions"
msgstr "„-f“ не може да се използва за създаването на функции"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: функция с права само за четене"
msgid "%s: cannot delete: %s"
msgstr "%s: не може да се изтрие: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: файлът е прекалено голям"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: двоичният файл не може да бъде изпълнен"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "стандартният вход от /dev/null не може да бъде пренасочен: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "в променливата $TIMEFORMAT: „%c“: грешен форматиращ знак"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "грешка при запис: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
"%s: ограничение: в имената на командите не може да присъства знакът „/“"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: командата не е открита"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: лош интерпретатор"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "файловият дескриптор %d не може да се дублира като дескриптор %d"
msgstr ""
"вмъкване на завършване на команда: %s указване на команда, което е NULL"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "команда за печат: лош конектор „%d“"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "отпечатване: „%c“: неправилен форматиращ знак"
msgstr ""
"Project-Id-Version: bash-2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2003-12-28 19:59+0100\n"
"Last-Translator: Montxo Vicente i Sempere <montxo@alacant.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: no es pot crear: %s"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funci? nom?s de lectura"
msgid "%s: cannot delete: %s"
msgstr "%s: no es pot crear: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: no es pot executar el fitxer binari"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "error del conducte: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: restringit: no es pot especificar '/' en noms d'ordres"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: no s'ha trobat l'ordre"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: ?s un directori"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr ""
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: el connector '%d' ?s incorrecte"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-09-07 13:09+0200\n"
"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: při přiřazovaní asociativního pole se musí použít podprogram"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nelze vytvořit: %s"
msgid "cannot use `-f' to make functions"
msgstr "„-f“ nezle použít na výrobu funkce"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funkce jen pro čtení"
msgid "%s: cannot delete: %s"
msgstr "%s: nelze smazat: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: soubor je příliš velký"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: binární soubor nelze spustit"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "standardní vstup nelze přesměrovat z /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: „%c“: chybný formátovací znak"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "chyba v rouře"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: omezeno: v názvu příkazu nesmí být „/“"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: příkaz nenalezen"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: chybný interpretr"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "deskriptor souboru %d nelze duplikovat na deskriptor %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULLOVÝ COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: chybná propojka „%d“"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: „%c“: chybný formátovací znak"
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-12-20 16:56+0100\n"
"Last-Translator: Nils Naumann <nnau@gmx.net>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: Kann die Datei %s nicht erzeugen."
msgid "cannot use `-f' to make functions"
msgstr "Mit `-f' können keine Funktionen erzeugt werden."
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: Schreibgeschützte Funktion."
msgid "%s: cannot delete: %s"
msgstr "%s: Kann nicht löschen: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: Die Datei ist zu groß."
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: Kann die Datei nicht ausführen."
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "Kann nicht die Standardeingabe von /dev/null umleiten: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: `%c': Ungültiges Formatzeichen."
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "Pipe-Fehler"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: Verboten: `/' ist in Kommandonamen unzulässig."
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: Kommando nicht gefunden."
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: ist ein Verzeichnis."
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "Kann fd %d nicht auf fd 0 verdoppeln: %s"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: Falsches Verbindungszeichen `%d'."
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: GNU bash 4.0-release\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
-"PO-Revision-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
+"PO-Revision-Date: 2009-02-19 14:53-0500\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: must use subscript when assigning associative array"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: cannot create: %s"
msgid "cannot use `-f' to make functions"
msgstr "cannot use ‘\e[1m-f\e[0m’ to make functions"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: readonly function"
msgid "%s: cannot delete: %s"
msgstr "%s: cannot delete: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: file is too large"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: cannot execute binary file"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "cannot redirect standard input from /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: ‘\e[1m%c\e[0m’: invalid format character"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "pipe error"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, 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:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: command not found"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: bad interpreter"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "cannot duplicate fd %d to fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: bad connector ‘\e[1m%d\e[0m’"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: ‘\e[1m%c\e[0m’: invalid format character"
msgstr ""
"Project-Id-Version: GNU bash 4.0-release\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
-"PO-Revision-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
+"PO-Revision-Date: 2009-02-19 14:53-0500\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: must use subscript when assigning associative array"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: cannot create: %s"
msgid "cannot use `-f' to make functions"
msgstr "cannot use ‘-f’ to make functions"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: readonly function"
msgid "%s: cannot delete: %s"
msgstr "%s: cannot delete: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: file is too large"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: cannot execute binary file"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "cannot redirect standard input from /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: ‘%c’: invalid format character"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "pipe error"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: restricted: cannot specify ‘/’ in command names"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: command not found"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: bad interpreter"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "cannot duplicate fd %d to fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: bad connector ‘%d’"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: ‘%c’: invalid format character"
msgstr ""
"Project-Id-Version: GNU bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2006-11-24 09:19+0600\n"
"Last-Translator: Sergio Pokrovskij <sergio.pokrovskij@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: Ne prosperis krei: %s"
msgid "cannot use `-f' to make functions"
msgstr "„-f‟ ne estas uzebla por fari funkciojn"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: Nurlega funkcio"
msgid "%s: cannot delete: %s"
msgstr "%s: Ne eblas forigi: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: Tro granda dosiero"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: Neplenumebla duuma dosiero"
msgstr "Fiaskis provo nomumi la disponaĵon «/dev/null» ĉefenigujo: %s"
# XXX: internal error:
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: „%c‟: Misa formatsigno"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "Eraro ĉe skribo: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: Malpermesitas uzi „/‟ en komandonomoj"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: Komando ne trovita"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: Misa interpretilo"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "Ne eblas kunnomumi al dosiernumero %d la dosiernumeron %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: Misa stir-operacio „%d‟"
# XXX: programming_error
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: „%c‟: Misa formatsigno"
msgstr ""
"Project-Id-Version: GNU bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2006-10-31 23:36-0600\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@itam.mx>\n"
"Language-Team: Spanish <es@li.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: no se puede crear: %s"
msgid "cannot use `-f' to make functions"
msgstr "no se puede usar `-f' para hacer funciones"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: función de sólo lectura"
msgid "%s: cannot delete: %s"
msgstr "%s: no se puede borrar: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
# file=fichero. archive=archivo. Si no, es imposible traducir tar. sv
# De acuerdo. Corregido en todo el fichero. cfuga
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: no se puede ejecutar el fichero binario"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "no se puede redirigir la salida estándard de /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: `%c': carácter de formato inválido"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "error de escritura: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: restringido: no se puede especificar `/' en nombres de órdenes"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: no se encontró la orden"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: intérprete erróneo"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "no se puede duplicar el df %d al df %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: COMPSPEC nulo"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: conector erróneo `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: `%c': carácter de formato inválido"
msgstr ""
"Project-Id-Version: bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2006-11-11 16:38+0200\n"
"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
"Language-Team: Estonian <et@li.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: ei saa luua: %s"
msgid "cannot use `-f' to make functions"
msgstr "võtit `-f' ei saa funktsiooni loomiseks kasutada"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funktsioon ei ole muudetav"
msgid "%s: cannot delete: %s"
msgstr "%s: ei saa kustutada: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: fail on liiga suur"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: kahendfaili ei õnnestu käivitada"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "kirjutamise viga: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: piiratud: käskudes ei saa kasutada sümboleid `/'"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: käsku ei ole"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: halb interpretaator"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr ""
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr ""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-03-13 13:10+0100\n"
"Last-Translator: Christophe Combelles <ccomb@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s : impossible de créer : %s"
msgid "cannot use `-f' to make functions"
msgstr "« -f » ne peut pas être utilisé pour fabriquer des fonctions"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s : fonction en lecture seule"
msgid "%s: cannot delete: %s"
msgstr "%s : impossible d'effacer : %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s : le fichier est trop grand"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s : fichier binaire impossible à lancer"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "l'entrée standard ne peut pas être redirigée depuis /dev/null : %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT : « %c » : caractère de format non valable"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "erreur d'écriture : %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
"%s : restriction : « / » ne peut pas être spécifié dans un nom de commande"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s : commande introuvable"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s : %s : mauvais interpréteur"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "Impossible de dupliquer le fd %d vers le fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert : %s : NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command : mauvais connecteur « %d »"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf : « %c » : caractère de format invalide"
msgstr ""
"Project-Id-Version: bash 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2002-06-14 09:49GMT\n"
"Last-Translator: Gábor István <stive@mezobereny.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nem lehet létrehozni: %s"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s Csak olvasható funkció"
msgid "%s: cannot delete: %s"
msgstr "%s: nem lehet létrehozni: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: nem futtatható bináris fájl"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "Csõ (pipe)hiba %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: fenntartva: parancs nem tartalmazhat '/' karaktert"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: parancs nem található"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: egy könyvtár"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "nem másolható a fd %d fd 0: %s-re"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: rossz csatlakozás `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-09-06 17:41+0700\n"
"Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: harus menggunakan subscript ketika memberikan assosiasi array"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: tidak dapat membuat: %s"
msgid "cannot use `-f' to make functions"
msgstr "tidak dapat menggunakan `-f' untuk membuat fungsi"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: fungsi baca-saja"
msgid "%s: cannot delete: %s"
msgstr "%s: tidak dapat menghapus: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: file terlalu besar"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: tidak dapat menjalankan berkas binary"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "tidak dapat menyalurkan masukan standar dari /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: `%c': karakter format tidak valid"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "pipe error"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
"%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: perintah tidak ditemukan"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: interpreter buruk"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "tidak dapat menduplikasikan fd %d ke fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: konektor buruk `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: '%c': format karakter tidak valid"
msgstr ""
"Project-Id-Version: GNU bash 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2000-03-21 19:30+0900\n"
"Last-Translator: Kyoichi Ozaki <k@afromania.org>\n"
"Language-Team: Japanese <ja@li.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: ÆÉ¤ß¹þ¤ß¤Î¤ß¤Î´Ø¿ô"
msgid "%s: cannot delete: %s"
msgstr "%s: %s ¤òºîÀ®¤Ç¤¤Þ¤»¤ó"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: ¥Ð¥¤¥Ê¥ê¥Õ¥¡¥¤¥ë¤ò¼Â¹Ô¤Ç¤¤Þ¤»¤ó"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "¥Ñ¥¤¥×¥¨¥é¡¼: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: À©¸Â: `/' ¤ò¥³¥Þ¥ó¥É̾¤Ëµ½Ò¤Ç¤¤Þ¤»¤ó"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: ¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "fd %d ¤ò fd 0 ¤ËÊ£À½¤Ç¤¤Þ¤»¤ó: %s"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: °¤¤Àܳ `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash-4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-25 11:13-0400\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2009-02-13 16:28+0200\n"
"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
-#: arrayfunc.c:49
+#: arrayfunc.c:50
msgid "bad array subscript"
msgstr "blogas masyvo indeksas"
-#: arrayfunc.c:312 builtins/declare.def:467
+#: arrayfunc.c:313 builtins/declare.def:474
#, c-format
msgid "%s: cannot convert indexed to associative array"
msgstr ""
-#: arrayfunc.c:478
+#: arrayfunc.c:479
#, fuzzy, c-format
msgid "%s: invalid associative array key"
msgstr "%s: netaisyklingas veiksmo pavadinimas"
-#: arrayfunc.c:480
+#: arrayfunc.c:481
#, c-format
msgid "%s: cannot assign to non-numeric index"
msgstr "%s: nepavyko priskirti prie neskaitinio indekso"
-#: arrayfunc.c:516
+#: arrayfunc.c:517
#, c-format
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:382
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nepavyko sukurti: %s"
-#: bashline.c:3190
+#: bashline.c:3413
msgid "bash_execute_unix_command: cannot find keymap for command"
msgstr "bash_execute_unix_command: nepavyko rasti keymapo komandai"
-#: bashline.c:3268
+#: bashline.c:3491
#, c-format
msgid "%s: first non-whitespace character is not `\"'"
msgstr "%s: pirmas ne tarpo simbolis nėra „\"“"
-#: bashline.c:3297
+#: bashline.c:3520
#, c-format
msgid "no closing `%c' in %s"
msgstr "nėra uždarančiojo „%c“ %s"
-#: bashline.c:3331
+#: bashline.c:3554
#, c-format
msgid "%s: missing colon separator"
msgstr "%s: trūksta dvitaškio skirtuko"
-#: builtins/bind.def:199
+#: builtins/bind.def:120 builtins/bind.def:123
+msgid "line editing not enabled"
+msgstr ""
+
+#: builtins/bind.def:206
#, c-format
msgid "`%s': invalid keymap name"
msgstr "„%s“: netaisyklingas keymap'o pavadinimas"
-#: builtins/bind.def:238
+#: builtins/bind.def:245
#, c-format
msgid "%s: cannot read: %s"
msgstr "%s: nepavyko perskaityti: %s"
-#: builtins/bind.def:253
+#: builtins/bind.def:260
#, c-format
msgid "`%s': cannot unbind"
msgstr "„%s“: nepavyko atjungti (unbind)"
-#: builtins/bind.def:288 builtins/bind.def:318
+#: builtins/bind.def:295 builtins/bind.def:325
#, c-format
msgid "`%s': unknown function name"
msgstr "„%s“: nežinomas funkcijos pavadinimas"
-#: builtins/bind.def:296
+#: builtins/bind.def:303
#, c-format
msgid "%s is not bound to any keys.\n"
msgstr "%s nėra priskirtas jokiam klavišui.\n"
-#: builtins/bind.def:300
+#: builtins/bind.def:307
#, c-format
msgid "%s can be invoked via "
msgstr "%s gali būti iškviestas su "
msgid "only meaningful in a `for', `while', or `until' loop"
msgstr "prasminga tik „for“, „while“ arba „until“ cikle"
+#: builtins/caller.def:133
+#, fuzzy
+msgid ""
+"Returns the context of the current subroutine call.\n"
+" \n"
+" Without EXPR, returns "
+msgstr "Grąžina esamos procedūros kontekstą."
+
#: builtins/cd.def:215
msgid "HOME not set"
msgstr "HOME nenustatytas"
msgid "OLDPWD not set"
msgstr "OLDPWD nenustatytas"
-#: builtins/common.c:107
+#: builtins/common.c:101
#, c-format
msgid "line %d: "
msgstr ""
-#: builtins/common.c:124
+#: builtins/common.c:139 error.c:260
+#, c-format
+msgid "warning: "
+msgstr "įspėjimas: "
+
+#: builtins/common.c:153
#, c-format
msgid "%s: usage: "
msgstr "%s: naudojimas: "
-#: builtins/common.c:137 test.c:822
+#: builtins/common.c:166 test.c:822
msgid "too many arguments"
msgstr "per daug argumentų"
-#: builtins/common.c:162 shell.c:493 shell.c:774
+#: builtins/common.c:191 shell.c:493 shell.c:774
#, c-format
msgid "%s: option requires an argument"
msgstr "%s: parametrui reikia argumento"
-#: builtins/common.c:169
+#: builtins/common.c:198
#, c-format
msgid "%s: numeric argument required"
msgstr "%s: reikia skaitinio argumento"
-#: builtins/common.c:176
+#: builtins/common.c:205
#, c-format
msgid "%s: not found"
msgstr "%s: nerasta"
-#: builtins/common.c:185 shell.c:787
+#: builtins/common.c:214 shell.c:787
#, c-format
msgid "%s: invalid option"
msgstr "%s: negalimas parametras"
-#: builtins/common.c:192
+#: builtins/common.c:221
#, c-format
msgid "%s: invalid option name"
msgstr "%s: netaisyklingas parametro vardas"
-#: builtins/common.c:199 general.c:231 general.c:236
+#: builtins/common.c:228 general.c:231 general.c:236
#, c-format
msgid "`%s': not a valid identifier"
msgstr "`%s': netaisyklingas identifikatorius"
-#: builtins/common.c:209
+#: builtins/common.c:238
msgid "invalid octal number"
msgstr "netaisyklingas aštuonetainis skaičius"
-#: builtins/common.c:211
+#: builtins/common.c:240
msgid "invalid hex number"
msgstr "netaisyklingas šešioliktainis skaičius"
-#: builtins/common.c:213 expr.c:1255
+#: builtins/common.c:242 expr.c:1255
msgid "invalid number"
msgstr "netaisyklingas skaičius"
-#: builtins/common.c:221
+#: builtins/common.c:250
#, c-format
msgid "%s: invalid signal specification"
msgstr "%s: netaisyklinga signalo specifikacija"
-#: builtins/common.c:228
+#: builtins/common.c:257
#, c-format
msgid "`%s': not a pid or valid job spec"
msgstr "„%s“: ne pid'as ar taisyklinga darbo specifikacija"
-#: builtins/common.c:235 error.c:453
+#: builtins/common.c:264 error.c:453
#, c-format
msgid "%s: readonly variable"
msgstr "%s: kintamasis tik skaitymui"
-#: builtins/common.c:243
+#: builtins/common.c:272
#, c-format
msgid "%s: %s out of range"
msgstr "%s: %s išėjo už ribų"
-#: builtins/common.c:243 builtins/common.c:245
+#: builtins/common.c:272 builtins/common.c:274
msgid "argument"
msgstr "argumentas"
-#: builtins/common.c:245
+#: builtins/common.c:274
#, c-format
msgid "%s out of range"
msgstr "%s už ribų"
-#: builtins/common.c:253
+#: builtins/common.c:282
#, c-format
msgid "%s: no such job"
msgstr "%s: nėra tokio darbo"
-#: builtins/common.c:261
+#: builtins/common.c:290
#, c-format
msgid "%s: no job control"
msgstr "%s: nėra darbų valdymo"
-#: builtins/common.c:263
+#: builtins/common.c:292
msgid "no job control"
msgstr "nėra darbų valdymo"
-#: builtins/common.c:273
+#: builtins/common.c:302
#, c-format
msgid "%s: restricted"
msgstr "%s: apribota"
-#: builtins/common.c:275
+#: builtins/common.c:304
msgid "restricted"
msgstr "apribota"
-#: builtins/common.c:283
+#: builtins/common.c:312
#, c-format
msgid "%s: not a shell builtin"
msgstr "%s: ne vidinė aplinkos komanda"
-#: builtins/common.c:292
+#: builtins/common.c:321
#, c-format
msgid "write error: %s"
msgstr "rašymo klaida: %s"
-#: builtins/common.c:523
+#: builtins/common.c:329
+#, c-format
+msgid "error setting terminal attributes: %s"
+msgstr ""
+
+#: builtins/common.c:331
+#, c-format
+msgid "error getting terminal attributes: %s"
+msgstr ""
+
+#: builtins/common.c:563
#, c-format
msgid "%s: error retrieving current directory: %s: %s\n"
msgstr "%s: klaida skaitant esamą aplanką: %s: %s\n"
-#: builtins/common.c:589 builtins/common.c:591
+#: builtins/common.c:629 builtins/common.c:631
#, c-format
msgid "%s: ambiguous job spec"
msgstr "%s: dviprasmis darbo aprašymas"
msgid "cannot use `-f' to make functions"
msgstr "negalima naudoti „-f“ funkcijoms kurti"
-#: builtins/declare.def:365 execute_cmd.c:4696
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funkcija tik skaitymui"
-#: builtins/declare.def:454
+#: builtins/declare.def:461
#, c-format
msgid "%s: cannot destroy array variables in this way"
msgstr "%s: negalima tokiu būdu sunaikinti masyvų kintamųjų"
-#: builtins/declare.def:461
+#: builtins/declare.def:468
#, c-format
msgid "%s: cannot convert associative to indexed array"
msgstr ""
msgid "%s: cannot delete: %s"
msgstr "%s: nepavyko ištrinti: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4553
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: failas per didelis"
-#: builtins/evalfile.c:185 execute_cmd.c:4623 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: negalima vykdyti dvejetainių failų"
#: builtins/help.def:168
#, c-format
-msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'."
-msgstr "nėra žinyno temų, atitinkančių „%s“. Bandykite „help help“, „man -k %s“ arba „info %s“."
+msgid ""
+"no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'."
+msgstr ""
+"nėra žinyno temų, atitinkančių „%s“. Bandykite „help help“, „man -k %s“ arba "
+"„info %s“."
#: builtins/help.def:185
#, c-format
"A star (*) next to a name means that the command is disabled.\n"
"\n"
msgstr ""
-"Šios aplinkos komandos vidinės. Jei norite pamatyti šį sąrašą, įveskite „help“.\n"
+"Šios aplinkos komandos vidinės. Jei norite pamatyti šį sąrašą, įveskite "
+"„help“.\n"
"Įveskite „help fn“, jei norite sužinoti daugiau apie funkciją „fn“.\n"
"Įveskite „info bash“, jei norite daugiau sužinoti apie aplinką apskritai.\n"
-"Naudokite „man -k“ ir „info“, jei norite sužinoti daugiau apie komandas, nesančiasšiame sąraše.\n"
+"Naudokite „man -k“ ir „info“, jei norite sužinoti daugiau apie komandas, "
+"nesančiasšiame sąraše.\n"
"\n"
"Žvaigždutė (*) prie vardo reiškia, kad komanda išjungta.\n"
"\n"
msgid "history position"
msgstr "istorijos pozicija"
-#: builtins/history.def:366
+#: builtins/history.def:365
#, c-format
msgid "%s: history expansion failed"
msgstr "%s: istorijos išskleidimas nesėkmingas"
msgid "expression expected"
msgstr "tikėtasi išraiškos"
-#: builtins/mapfile.def:215 builtins/read.def:271
+#: builtins/mapfile.def:241 builtins/read.def:272
#, c-format
msgid "%s: invalid file descriptor specification"
msgstr "%s: netaisyklinga failo deskriptoriaus specifikacija"
-#: builtins/mapfile.def:223 builtins/read.def:278
+#: builtins/mapfile.def:249 builtins/read.def:279
#, c-format
msgid "%d: invalid file descriptor: %s"
msgstr "%d: netaisyklingas failo deskriptorius: %s"
-#: builtins/mapfile.def:232 builtins/mapfile.def:270
+#: builtins/mapfile.def:258 builtins/mapfile.def:296
#, fuzzy, c-format
msgid "%s: invalid line count"
msgstr "%s: nesamas parametras"
-#: builtins/mapfile.def:243
+#: builtins/mapfile.def:269
#, fuzzy, c-format
msgid "%s: invalid array origin"
msgstr "%s: nesamas parametras"
-#: builtins/mapfile.def:260
+#: builtins/mapfile.def:286
#, fuzzy, c-format
msgid "%s: invalid callback quantum"
msgstr "%s: netaisyklingas veiksmo pavadinimas"
-#: builtins/mapfile.def:292
+#: builtins/mapfile.def:318
#, fuzzy
msgid "empty array variable name"
msgstr "%s: ne masyvo kintamasis"
-#: builtins/mapfile.def:313
+#: builtins/mapfile.def:339
msgid "array variable support required"
msgstr ""
-#: builtins/printf.def:364
+#: builtins/printf.def:367
#, c-format
msgid "`%s': missing format character"
msgstr "„%s“: trūksta formato simbolio"
-#: builtins/printf.def:541
+#: builtins/printf.def:544
#, c-format
msgid "`%c': invalid format character"
msgstr "„%c“: netaisyklingas formato simbolis"
-#: builtins/printf.def:568
+#: builtins/printf.def:571
#, c-format
msgid "warning: %s: %s"
msgstr "įspėjimas: %s: %s"
-#: builtins/printf.def:747
+#: builtins/printf.def:750
msgid "missing hex digit for \\x"
msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x"
" \twith its position in the stack\n"
" \n"
" Arguments:\n"
-" +N\tDisplays the Nth entry counting from the left of the list shown by\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"
+" -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
"\tdirs when invoked without options, starting with zero."
msgstr ""
" The `dirs' builtin displays the directory stack."
msgstr ""
-#: builtins/read.def:247
+#: builtins/read.def:248
#, c-format
msgid "%s: invalid timeout specification"
msgstr "%s: klaidinga laiko ribos (timeout) specifikacija"
-#: builtins/read.def:569
+#: builtins/read.def:574
#, c-format
msgid "read error: %d: %s"
msgstr "skaitymo klaida: %d: %s"
-#: builtins/return.def:68
+#: builtins/return.def:73
msgid "can only `return' from a function or sourced script"
msgstr "galima grįžti (return) tik iš funkcijos ar scenarijaus"
msgid "shift count"
msgstr "postūmių skaičius"
-#: builtins/shopt.def:250
+#: builtins/shopt.def:254
msgid "cannot set and unset shell options simultaneously"
msgstr "negalima aplinkos nuostatos vienu metu įjungti ir išjungti"
-#: builtins/shopt.def:315
+#: builtins/shopt.def:319
#, c-format
msgid "%s: invalid shell option name"
msgstr "%s: netaisyklingas aplinkos nuostatos pavadinimas"
msgid "Aborting..."
msgstr "Nutraukiama..."
-#: error.c:260
-#, c-format
-msgid "warning: "
-msgstr "įspėjimas: "
-
#: error.c:405
msgid "unknown command error"
msgstr "nežinoma komandos klaida"
msgid "\atimed out waiting for input: auto-logout\n"
msgstr "\alaukiant įvedimo baigėsi laikas: automatiškai atsijungta\n"
-#: execute_cmd.c:483
+#: execute_cmd.c:491
#, c-format
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "nepavyko peradresuoti standartinio įvedimo iš /dev/null: %s"
-#: execute_cmd.c:1079
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: „%c“: netaisyklingas formato simbolis"
-#: execute_cmd.c:1930
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "rašymo klaida: %s"
-#: execute_cmd.c:4243
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: apribota: negalima naudoti „/“ komandų pavadinimuose"
-#: execute_cmd.c:4334
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: komanda nerasta"
-#: execute_cmd.c:4586
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: blogas interpretatorius"
-#: execute_cmd.c:4735
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "nepavyko dublikuoti fd %d į fd %d"
#: expr.c:826
msgid "identifier expected after pre-increment or pre-decrement"
-msgstr "po prieš-didinimo ar prieš-mažinimo operatoriaus tikėtasi identifikatoriaus"
+msgstr ""
+"po prieš-didinimo ar prieš-mažinimo operatoriaus tikėtasi identifikatoriaus"
#: expr.c:854
msgid "missing `)'"
msgid "getcwd: cannot access parent directories"
msgstr "getcwd: nepavyko pasiekti aukštesnių aplankų"
-#: input.c:94 subst.c:4551
+#: input.c:94 subst.c:4559
#, fuzzy, c-format
msgid "cannot reset nodelay mode for fd %d"
msgstr "nepavyko dublikuoti fd %d į fd %d"
msgid "save_bash_input: buffer already exists for new fd %d"
msgstr "save_bash_input: naujam fd %d buferis jau egzistuoja"
-#: jobs.c:464
+#: jobs.c:466
msgid "start_pipeline: pgrp pipe"
msgstr ""
-#: jobs.c:879
+#: jobs.c:887
#, c-format
msgid "forked pid %d appears in running job %d"
msgstr ""
-#: jobs.c:997
+#: jobs.c:1005
#, c-format
msgid "deleting stopped job %d with process group %ld"
msgstr "trinamas sustabdytas darbas %d procesų grupėje %ld"
-#: jobs.c:1102
+#: jobs.c:1110
#, c-format
msgid "add_process: process %5ld (%s) in the_pipeline"
msgstr ""
-#: jobs.c:1105
+#: jobs.c:1113
#, c-format
msgid "add_process: pid %5ld (%s) marked as still alive"
msgstr ""
-#: jobs.c:1393
+#: jobs.c:1401
#, c-format
msgid "describe_pid: %ld: no such pid"
msgstr "describe_pid: %ld: tokio pid nėra"
-#: jobs.c:1408
+#: jobs.c:1416
#, c-format
msgid "Signal %d"
msgstr ""
-#: jobs.c:1422 jobs.c:1447
+#: jobs.c:1430 jobs.c:1455
msgid "Done"
msgstr ""
-#: jobs.c:1427 siglist.c:122
+#: jobs.c:1435 siglist.c:122
msgid "Stopped"
msgstr ""
-#: jobs.c:1431
+#: jobs.c:1439
#, c-format
msgid "Stopped(%s)"
msgstr ""
-#: jobs.c:1435
+#: jobs.c:1443
msgid "Running"
msgstr ""
-#: jobs.c:1449
+#: jobs.c:1457
#, c-format
msgid "Done(%d)"
msgstr ""
-#: jobs.c:1451
+#: jobs.c:1459
#, c-format
msgid "Exit %d"
msgstr ""
-#: jobs.c:1454
+#: jobs.c:1462
msgid "Unknown status"
msgstr ""
-#: jobs.c:1541
+#: jobs.c:1549
#, c-format
msgid "(core dumped) "
msgstr ""
-#: jobs.c:1560
+#: jobs.c:1568
#, c-format
msgid " (wd: %s)"
msgstr ""
-#: jobs.c:1761
+#: jobs.c:1771
#, c-format
msgid "child setpgid (%ld to %ld)"
msgstr ""
-#: jobs.c:2089 nojobs.c:576
+#: jobs.c:2099 nojobs.c:585
#, c-format
msgid "wait: pid %ld is not a child of this shell"
msgstr "wait: pid %ld nėra šios aplinkos dukterinis procesas"
-#: jobs.c:2316
+#: jobs.c:2326
#, c-format
msgid "wait_for: No record of process %ld"
msgstr "wait_for: nėra proceso %ld įrašo"
-#: jobs.c:2588
+#: jobs.c:2598
#, c-format
msgid "wait_for_job: job %d is stopped"
msgstr "wait_for_job: darbas %d yra sustabdytas"
-#: jobs.c:2810
+#: jobs.c:2820
#, c-format
msgid "%s: job has terminated"
msgstr "%s: darbas užsibaigė"
-#: jobs.c:2819
+#: jobs.c:2829
#, c-format
msgid "%s: job %d already in background"
msgstr "%s: darbas %d jau fone"
-#: jobs.c:3482
+#: jobs.c:3492
#, c-format
msgid "%s: line %d: "
msgstr "%s: %d eilutė: "
-#: jobs.c:3496 nojobs.c:805
+#: jobs.c:3506 nojobs.c:814
#, c-format
msgid " (core dumped)"
msgstr ""
-#: jobs.c:3508 jobs.c:3521
+#: jobs.c:3518 jobs.c:3531
#, c-format
msgid "(wd now: %s)\n"
msgstr ""
-#: jobs.c:3553
+#: jobs.c:3563
msgid "initialize_job_control: getpgrp failed"
msgstr ""
-#: jobs.c:3613
+#: jobs.c:3623
msgid "initialize_job_control: line discipline"
msgstr ""
-#: jobs.c:3623
+#: jobs.c:3633
msgid "initialize_job_control: setpgid"
msgstr ""
-#: jobs.c:3651
+#: jobs.c:3661
#, c-format
msgid "cannot set terminal process group (%d)"
msgstr ""
-#: jobs.c:3656
+#: jobs.c:3666
msgid "no job control in this shell"
msgstr "šioje aplinkoje nėra darbų valdymo"
msgid "make_redirection: redirection instruction `%d' out of range"
msgstr "make_redirection: nukreipimo instrukcija „%d“ už ribų"
-#: parse.y:2982 parse.y:3204
+#: parse.y:2986 parse.y:3218
#, c-format
msgid "unexpected EOF while looking for matching `%c'"
msgstr "netikėta failo pabaiga ieškant atitinkamo „%c“"
-#: parse.y:3708
+#: parse.y:3722
msgid "unexpected EOF while looking for `]]'"
msgstr "netikėta failo pabaiga ieškant „]]“"
-#: parse.y:3713
+#: parse.y:3727
#, c-format
msgid "syntax error in conditional expression: unexpected token `%s'"
msgstr "sintaksės klaida sąlygos išraiškoje: netikėta leksema „%s“"
-#: parse.y:3717
+#: parse.y:3731
msgid "syntax error in conditional expression"
msgstr "sintaksės klaida sąlygos išraiškoje"
-#: parse.y:3795
+#: parse.y:3809
#, c-format
msgid "unexpected token `%s', expected `)'"
msgstr "netikėta leksema „%s“, tikėtasi „)“"
-#: parse.y:3799
+#: parse.y:3813
msgid "expected `)'"
msgstr "tikėtasi „)“"
-#: parse.y:3827
+#: parse.y:3841
#, c-format
msgid "unexpected argument `%s' to conditional unary operator"
msgstr "netikėtas argumentas „%s“ sąlygos unariniam operatoriui"
-#: parse.y:3831
+#: parse.y:3845
msgid "unexpected argument to conditional unary operator"
msgstr "netikėtas argumentas sąlygos unariniam operatoriui"
-#: parse.y:3871
+#: parse.y:3885
#, c-format
msgid "unexpected token `%s', conditional binary operator expected"
msgstr "netikėta leksema „%s“, tikėtasi sąlyginio binarinio operatoriaus"
-#: parse.y:3875
+#: parse.y:3889
msgid "conditional binary operator expected"
msgstr "tikėtasi sąlygos binarinio operatoriaus"
-#: parse.y:3892
+#: parse.y:3906
#, c-format
msgid "unexpected argument `%s' to conditional binary operator"
msgstr "netikėtas argumentas „%s“ sąlygos binariniam operatoriui"
-#: parse.y:3896
+#: parse.y:3910
msgid "unexpected argument to conditional binary operator"
msgstr "netikėtas argumentas sąlygos binariniam operatoriui"
-#: parse.y:3907
+#: parse.y:3921
#, c-format
msgid "unexpected token `%c' in conditional command"
msgstr "netikėta leksema „%c“ sąlygos komandoje"
-#: parse.y:3910
+#: parse.y:3924
#, c-format
msgid "unexpected token `%s' in conditional command"
msgstr "netikėta leksema „%s“ sąlygos komandoje"
-#: parse.y:3914
+#: parse.y:3928
#, c-format
msgid "unexpected token %d in conditional command"
msgstr "netikėta leksema %d sąlygos komandoje"
-#: parse.y:5181
+#: parse.y:5195
#, c-format
msgid "syntax error near unexpected token `%s'"
msgstr "sintaksės klaida prie netikėtos leksemos: „%s“"
-#: parse.y:5199
+#: parse.y:5213
#, c-format
msgid "syntax error near `%s'"
msgstr "sintaksės klaida prie „%s“"
-#: parse.y:5209
+#: parse.y:5223
msgid "syntax error: unexpected end of file"
msgstr "sintaksės klaida: netikėta failo pabaiga"
-#: parse.y:5209
+#: parse.y:5223
msgid "syntax error"
msgstr "sintaksės klaida"
-#: parse.y:5271
+#: parse.y:5285
#, c-format
msgid "Use \"%s\" to leave the shell.\n"
msgstr "Naudokite „%s“, jei norite išeiti iš ap.\n"
-#: parse.y:5433
+#: parse.y:5447
msgid "unexpected EOF while looking for matching `)'"
msgstr "netikėta failo pabaiga ieškant atitinkamo „)“"
-#: pcomplete.c:1016
+#: pcomplete.c:1018
#, c-format
msgid "completion: function `%s' not found"
msgstr "completion: funkcija „%s“ nerasta"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: blogas jungtukas „%d“"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: „%c“: netaisyklingas formato simbolis"
-#: redir.c:104
+#: redir.c:105
msgid "file descriptor out of range"
msgstr "failo deskriptorius už ribų"
-#: redir.c:146
+#: redir.c:148
#, c-format
msgid "%s: ambiguous redirect"
msgstr "%s: ambiguous redirect"
-#: redir.c:150
+#: redir.c:152
#, c-format
msgid "%s: cannot overwrite existing file"
msgstr "%s: negalima perrašyti egzistuojančio failo"
-#: redir.c:155
+#: redir.c:157
#, c-format
msgid "%s: restricted: cannot redirect output"
msgstr "%s: apribota: negalima peradresuoti išvedimo"
-#: redir.c:160
+#: redir.c:162
#, fuzzy, c-format
msgid "cannot create temp file for here-document: %s"
msgstr "nepavyko sukurti laikino failo „here“ dokumentui: %s"
-#: redir.c:515
+#: redir.c:517
msgid "/dev/(tcp|udp)/host/port not supported without networking"
msgstr "/dev/(tcp|udp)/serveris/prievadas nepalaikoma be tinklo"
-#: redir.c:992
+#: redir.c:1023
msgid "redirection error: cannot duplicate fd"
msgstr "nukreipimo klaida: nepavyko dublikuoti fd"
msgid "%c%c: invalid option"
msgstr "%c%c: netaisyklingas parametras"
-#: shell.c:1637
+#: shell.c:1638
msgid "I have no name!"
msgstr "Neturiu vardo!"
-#: shell.c:1777
+#: shell.c:1778
#, c-format
msgid "GNU bash, version %s-(%s)\n"
msgstr ""
-#: shell.c:1778
+#: shell.c:1779
#, c-format
msgid ""
"Usage:\t%s [GNU long option] [option] ...\n"
"Naudojimas:\t%s [GNU ilgas parametras] [parametras] ...\n"
"\t%s [GNU ilgas parametras] [parametras] scenarijaus-failas ...\n"
-#: shell.c:1780
+#: shell.c:1781
msgid "GNU long options:\n"
msgstr "GNU ilgi parametrai:\n"
-#: shell.c:1784
+#: shell.c:1785
msgid "Shell options:\n"
msgstr "Aplinkos parametrai:\n"
-#: shell.c:1785
+#: shell.c:1786
msgid "\t-irsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-irsD arba -c komanda arba -O shopt_nustatymas\t\t(tik iškvietimui)\n"
+msgstr ""
+"\t-irsD arba -c komanda arba -O shopt_nustatymas\t\t(tik iškvietimui)\n"
-#: shell.c:1800
+#: shell.c:1801
#, c-format
msgid "\t-%s or -o option\n"
msgstr "\t-%s arba -o nustatymas\n"
-#: shell.c:1806
+#: shell.c:1807
#, fuzzy, c-format
msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr "Bandykite „%s --help“ arba „%s --usage“, jei norite gauti daugiau informacijos.\n"
+msgstr ""
+"Bandykite „%s --help“ arba „%s --usage“, jei norite gauti daugiau "
+"informacijos.\n"
-#: shell.c:1807
+#: shell.c:1808
#, fuzzy, c-format
msgid "Type `%s -c help' for more information about shell builtin commands.\n"
msgstr "Bandykite „ldd --help“, jei norite daugiau informacijos."
-#: shell.c:1808
+#: shell.c:1809
#, c-format
msgid "Use the `bashbug' command to report bugs.\n"
msgstr "Naudokite komandą „bashbug“ klaidoms pranešti.\n"
-#: sig.c:576
+#: sig.c:583
#, c-format
msgid "sigprocmask: %d: invalid operation"
msgstr "sigprocmask: %d: netaisyklinga operacija"
msgid "Unknown Signal #%d"
msgstr ""
-#: subst.c:1177 subst.c:1298
+#: subst.c:1181 subst.c:1302
#, c-format
msgid "bad substitution: no closing `%s' in %s"
msgstr "blogas keitinys: trūksta „%s“ %s"
-#: subst.c:2450
+#: subst.c:2458
#, c-format
msgid "%s: cannot assign list to array member"
msgstr "%s: negalima priskirti sąrašo masyvo elementui"
-#: subst.c:4448 subst.c:4464
+#: subst.c:4456 subst.c:4472
msgid "cannot make pipe for process substitution"
msgstr ""
-#: subst.c:4496
+#: subst.c:4504
msgid "cannot make child for process substitution"
msgstr ""
-#: subst.c:4541
+#: subst.c:4549
#, c-format
msgid "cannot open named pipe %s for reading"
msgstr ""
-#: subst.c:4543
+#: subst.c:4551
#, c-format
msgid "cannot open named pipe %s for writing"
msgstr ""
-#: subst.c:4561
+#: subst.c:4569
#, c-format
msgid "cannot duplicate named pipe %s as fd %d"
msgstr ""
-#: subst.c:4757
+#: subst.c:4765
msgid "cannot make pipe for command substitution"
msgstr ""
-#: subst.c:4791
+#: subst.c:4799
msgid "cannot make child for command substitution"
msgstr ""
-#: subst.c:4808
+#: subst.c:4816
msgid "command_substitute: cannot duplicate pipe as fd 1"
msgstr ""
-#: subst.c:5310
+#: subst.c:5318
#, c-format
msgid "%s: parameter null or not set"
msgstr "%s: parametras tuščias arba nenustatytas"
-#: subst.c:5600
+#: subst.c:5608
#, c-format
msgid "%s: substring expression < 0"
msgstr "%s: posekio išraiška < 0"
-#: subst.c:6646
+#: subst.c:6660
#, c-format
msgid "%s: bad substitution"
msgstr "%s: blogas keitinys"
-#: subst.c:6722
+#: subst.c:6740
#, c-format
msgid "$%s: cannot assign in this way"
msgstr "$%s: negalima tokiu būdu priskirti"
-#: subst.c:7441
+#: subst.c:7499
#, fuzzy, c-format
msgid "bad substitution: no closing \"`\" in %s"
msgstr "blogas keitinys: trūksta „%s“ %s"
-#: subst.c:8314
+#: subst.c:8375
#, c-format
msgid "no match: %s"
msgstr "nėra atitikmenų: %s"
msgid "missing `]'"
msgstr "trūksta „]“"
-#: trap.c:200
+#: trap.c:201
msgid "invalid signal number"
msgstr "netaisyklingas signalo numeris"
-#: trap.c:323
+#: trap.c:324
#, c-format
msgid "run_pending_traps: bad value in trap_list[%d]: %p"
msgstr "run_pending_traps: bloga trap_list[%d] reikšmė: %p"
-#: trap.c:327
+#: trap.c:328
#, c-format
-msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
msgstr "run_pending_traps: signalo doroklė yra SIG_DFL, siunčiamas %d (%s) sau"
-#: trap.c:371
+#: trap.c:372
#, c-format
msgid "trap_handler: bad signal %d"
msgstr "trap_handler: blogas signalas %d"
-#: variables.c:354
+#: variables.c:358
#, c-format
msgid "error importing function definition for `%s'"
msgstr "klaida importuojant funkcijos apibrėžimą „%s“"
-#: variables.c:732
+#: variables.c:736
#, c-format
msgid "shell level (%d) too high, resetting to 1"
msgstr "aplinkos lygmuo (%d) per aukštas, nustatoma į 1"
-#: variables.c:1891
+#: variables.c:1898
msgid "make_local_variable: no function context at current scope"
msgstr ""
-#: variables.c:3120
+#: variables.c:3127
msgid "all_local_variables: no function context at current scope"
msgstr ""
-#: variables.c:3337 variables.c:3346
+#: variables.c:3344 variables.c:3353
#, c-format
msgid "invalid character %d in exportstr for %s"
msgstr "netaisyklingas simbolis %d %s exportstr'e"
-#: variables.c:3352
+#: variables.c:3359
#, c-format
msgid "no `=' in exportstr for %s"
msgstr "%s exportstr'e trūksta „=“"
-#: variables.c:3787
+#: variables.c:3794
msgid "pop_var_context: head of shell_variables not a function context"
msgstr ""
-#: variables.c:3800
+#: variables.c:3807
msgid "pop_var_context: no global_variables context"
msgstr "pop_var_context: nėra global_variables konteksto"
-#: variables.c:3874
+#: variables.c:3881
msgid "pop_scope: head of shell_variables not a temporary environment scope"
msgstr ""
#: version.c:46
-msgid "Copyright (C) 2008 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2009 Free Software Foundation, Inc."
msgstr "Autorinės teisės (C) 2008 Free Software Foundation, Inc."
#: version.c:47
-msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
msgstr ""
#: version.c:86
msgstr ""
#: builtins.c:51
-msgid "bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgid ""
+"bind [-lpvsPVS] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
+"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
msgstr ""
#: builtins.c:54
msgstr ""
#: builtins.c:121
-msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgid ""
+"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
+"[arg...]"
msgstr ""
#: builtins.c:125
msgstr ""
#: builtins.c:132
-msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgid ""
+"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
+"[sigspec]"
msgstr ""
#: builtins.c:134
msgstr ""
#: builtins.c:136
-msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgid ""
+"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-p prompt] [-t "
+"timeout] [-u fd] [name ...]"
msgstr ""
#: builtins.c:138
msgstr ""
#: builtins.c:192
-msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgid ""
+"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
+"COMMANDS; ] fi"
msgstr ""
#: builtins.c:194
msgstr ""
#: builtins.c:198
-msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
+msgid "coproc [NAME] command [redirections]"
msgstr ""
#: builtins.c:200
-msgid "{ COMMANDS ; }"
+msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
msgstr ""
#: builtins.c:202
-msgid "job_spec [&]"
+msgid "{ COMMANDS ; }"
msgstr ""
#: builtins.c:204
+msgid "job_spec [&]"
+msgstr ""
+
+#: builtins.c:206
msgid "(( expression ))"
msgstr "(( išraiška ))"
-#: builtins.c:206
+#: builtins.c:208
msgid "[[ expression ]]"
msgstr "[[ išraiška ]]"
-#: builtins.c:208
+#: builtins.c:210
msgid "variables - Names and meanings of some shell variables"
msgstr ""
-#: builtins.c:211
+#: builtins.c:213
msgid "pushd [-n] [+N | -N | dir]"
msgstr ""
-#: builtins.c:215
+#: builtins.c:217
msgid "popd [-n] [+N | -N]"
msgstr ""
-#: builtins.c:219
+#: builtins.c:221
msgid "dirs [-clpv] [+N] [-N]"
msgstr ""
-#: builtins.c:222
+#: builtins.c:224
msgid "shopt [-pqsu] [-o] [optname ...]"
msgstr ""
-#: builtins.c:224
+#: builtins.c:226
msgid "printf [-v var] format [arguments]"
msgstr ""
-#: builtins.c:227
-msgid "complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+#: builtins.c:229
+msgid ""
+"complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W "
+"wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] "
+"[name ...]"
msgstr ""
-#: builtins.c:231
-msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+#: builtins.c:233
+msgid ""
+"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] "
+"[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
msgstr ""
-#: builtins.c:235
+#: builtins.c:237
msgid "compopt [-o|+o option] [name ...]"
msgstr ""
-#: builtins.c:238
-msgid "mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+#: builtins.c:240
+msgid ""
+"mapfile [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
+"quantum] [array]"
+msgstr ""
+
+#: builtins.c:242
+msgid ""
+"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c "
+"quantum] [array]"
msgstr ""
-#: builtins.c:250
+#: builtins.c:254
#, fuzzy
msgid ""
"Define or display aliases.\n"
" -p\tPrint all defined aliases in a reusable format\n"
" \n"
" Exit Status:\n"
-" alias returns true unless a NAME is supplied for which no alias has been\n"
+" alias returns true unless a NAME is supplied for which no alias has "
+"been\n"
" defined."
msgstr ""
"„alias“ be argumentų arba su -p nuostata išspausdina alternatyviųjų\n"
" išskleidžiamas. „alias“ grąžina „true“, nebent duotas VARDAS, kuriam\n"
" neaprašytas joks alternatyvusis vardas."
-#: builtins.c:272
+#: builtins.c:276
#, fuzzy
msgid ""
"Remove each NAME from the list of defined aliases.\n"
"Pašalinti VARDUS iš aprašytų alternatyviųjų vardų sąrašo. Jei nurodyta\n"
" nuostata -a, pašalinti visus alternatyviuosius vardus."
-#: builtins.c:285
+#: builtins.c:289
msgid ""
"Set Readline key bindings and variables.\n"
" \n"
" 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"
+" 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"
-" -S List key sequences that invoke macros and their values\n"
-" -s List key sequences that invoke macros and their values\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.\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"
" -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"
+" -u function-name Unbind all keys which are bound to the named "
+"function.\n"
" -r keyseq Remove the binding for KEYSEQ.\n"
" -f filename Read key bindings from FILENAME.\n"
" -x keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
" bind returns 0 unless an unrecognized option is given or an error occurs."
msgstr ""
-#: builtins.c:322
+#: builtins.c:326
msgid ""
"Exit for, while, or until loops.\n"
" \n"
" The exit status is 0 unless N is not greater than or equal to 1."
msgstr ""
-#: builtins.c:334
+#: builtins.c:338
#, fuzzy
msgid ""
"Resume for, while, or until loops.\n"
"Tęsti kitą FOR, WHILE arba UNTIL ciklo iteraciją.\n"
" Jei N nurodytas, tęsti ciklą, esantį N lygmenų virš esamo."
-#: builtins.c:346
+#: builtins.c:350
msgid ""
"Execute shell builtins.\n"
" \n"
" Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
" lookup. This is useful when you wish to reimplement a shell builtin\n"
-" as a shell function, but need to execute the builtin within the function.\n"
+" as a shell function, but need to execute the builtin within the "
+"function.\n"
" \n"
" Exit Status:\n"
" Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
" not a shell builtin.."
msgstr ""
-#: builtins.c:361
+#: builtins.c:365
#, fuzzy
msgid ""
"Return the context of the current subroutine call.\n"
" IŠRAIŠKOS reikšmė nurodo, per kiek kvietimo freimų grįžti nuo\n"
" esamo; viršutinis freimas yra 0."
-#: builtins.c:379
+#: builtins.c:383
#, fuzzy
msgid ""
"Change the shell working directory.\n"
" \n"
-" Change the current directory to DIR. The default DIR is the value of the\n"
+" Change the current directory to DIR. The default DIR is the value of "
+"the\n"
" HOME shell variable.\n"
" \n"
-" The variable CDPATH defines the search path for the directory containing\n"
-" DIR. Alternative directory names in CDPATH are separated by a colon (:).\n"
-" A null directory name is the same as the current directory. If DIR begins\n"
+" The variable CDPATH defines the search path for the directory "
+"containing\n"
+" DIR. Alternative directory names in CDPATH are separated by a colon "
+"(:).\n"
+" A null directory name is the same as the current directory. If DIR "
+"begins\n"
" with a slash (/), then CDPATH is not used.\n"
" \n"
-" If the directory is not found, and the shell option `cdable_vars' is set,\n"
-" the word is assumed to be a variable name. If that variable has a value,\n"
+" If the directory is not found, and the shell option `cdable_vars' is "
+"set,\n"
+" the word is assumed to be a variable name. If that variable has a "
+"value,\n"
" its value is used for DIR.\n"
" \n"
" Options:\n"
" užuot sekus simbolines nuorodas; parametras -L nurodo, kad turi būti\n"
" sekama simbolinėmis nuorodomis."
-#: builtins.c:407
+#: builtins.c:411
msgid ""
"Print the name of the current working directory.\n"
" \n"
" cannot be read."
msgstr ""
-#: builtins.c:424
+#: builtins.c:428
#, fuzzy
msgid ""
"Null command.\n"
" Always succeeds."
msgstr "Jokio efekto; komanda nieko nedaro. Grąžinamas klaidos kodas 0."
-#: builtins.c:435
+#: builtins.c:439
msgid ""
"Return a successful result.\n"
" \n"
" Always succeeds."
msgstr ""
-#: builtins.c:444
+#: builtins.c:448
#, fuzzy
msgid ""
"Return an unsuccessful result.\n"
" Always fails."
msgstr "Grąžinti nesėkmingą rezultatą."
-#: builtins.c:453
+#: builtins.c:457
msgid ""
"Execute a simple command or display information about commands.\n"
" \n"
" Runs COMMAND with ARGS suppressing shell function lookup, or display\n"
-" information about the specified COMMANDs. Can be used to invoke commands\n"
+" information about the specified COMMANDs. Can be used to invoke "
+"commands\n"
" on disk when a function with the same name exists.\n"
" \n"
" Options:\n"
" Returns exit status of COMMAND, or failure if COMMAND is not found."
msgstr ""
-#: builtins.c:472
+#: builtins.c:476
msgid ""
"Set variable values and attributes.\n"
" \n"
" Variables with the integer attribute have arithmetic evaluation (see\n"
" the `let' command) performed when the variable is assigned a value.\n"
" \n"
-" When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+" When used in a function, `declare' makes NAMEs local, as with the "
+"`local'\n"
" command.\n"
" \n"
" Exit Status:\n"
" Returns success unless an invalid option is supplied or an error occurs."
msgstr ""
-#: builtins.c:508
+#: builtins.c:512
msgid ""
"Set variable values and attributes.\n"
" \n"
" Obsolete. See `help declare'."
msgstr ""
-#: builtins.c:516
+#: builtins.c:520
msgid ""
"Define local variables.\n"
" \n"
" or the shell is not executing a function."
msgstr ""
-#: builtins.c:533
+#: builtins.c:537
msgid ""
"Write arguments to the standard output.\n"
" \n"
" Returns success unless a write error occurs."
msgstr ""
-#: builtins.c:567
+#: builtins.c:571
msgid ""
"Write arguments to the standard output.\n"
" \n"
" Returns success unless a write error occurs."
msgstr ""
-#: builtins.c:582
+#: builtins.c:586
msgid ""
"Enable and disable shell builtins.\n"
" \n"
" Returns success unless NAME is not a shell builtin or an error occurs."
msgstr ""
-#: builtins.c:610
+#: builtins.c:614
msgid ""
"Execute arguments as a shell command.\n"
" \n"
-" Combine ARGs into a single string, use the result as input to the shell,\n"
+" Combine ARGs into a single string, use the result as input to the "
+"shell,\n"
" and execute the resulting commands.\n"
" \n"
" Exit Status:\n"
" Returns exit status of command or success if command is null."
msgstr ""
-#: builtins.c:622
+#: builtins.c:626
msgid ""
"Parse option arguments.\n"
" \n"
" encountered or an error occurs."
msgstr ""
-#: builtins.c:664
+#: builtins.c:668
msgid ""
"Replace the shell with the given command.\n"
" \n"
" Execute COMMAND, replacing this shell with the specified program.\n"
-" ARGUMENTS become the arguments to COMMAND. If COMMAND is not specified,\n"
+" ARGUMENTS become the arguments to COMMAND. If COMMAND is not "
+"specified,\n"
" any redirections take effect in the current shell.\n"
" \n"
" Options:\n"
" -c\t\texecute COMMAND with an empty environment\n"
" -l\t\tplace a dash in the zeroth argument to COMMAND\n"
" \n"
-" If the command cannot be executed, a non-interactive shell exits, unless\n"
+" If the command cannot be executed, a non-interactive shell exits, "
+"unless\n"
" the shell option `execfail' is set.\n"
" \n"
" Exit Status:\n"
-" Returns success unless COMMAND is not found or a redirection error occurs."
+" Returns success unless COMMAND is not found or a redirection error "
+"occurs."
msgstr ""
-#: builtins.c:685
+#: builtins.c:689
#, fuzzy
msgid ""
"Exit the shell.\n"
" Exits the shell with a status of N. If N is omitted, the exit status\n"
" is that of the last command executed."
msgstr ""
-"Išeiti iš aplinkos su klaidos kodu N. Jei N nenurodytas, išeinant nustatomas\n"
+"Išeiti iš aplinkos su klaidos kodu N. Jei N nenurodytas, išeinant "
+"nustatomas\n"
" paskutinės vykdytos komandos klaidos kodas."
-#: builtins.c:694
+#: builtins.c:698
msgid ""
"Exit a login shell.\n"
" \n"
-" Exits a login shell with exit status N. Returns an error if not executed\n"
+" Exits a login shell with exit status N. Returns an error if not "
+"executed\n"
" in a login shell."
msgstr ""
-#: builtins.c:704
+#: builtins.c:708
msgid ""
"Display or execute commands from the history list.\n"
" \n"
-" fc is used to list or edit and re-execute commands from the history list.\n"
+" 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"
" Options:\n"
-" -e ENAME\tselect which editor to use. Default is FCEDIT, then EDITOR,\n"
+" -e ENAME\tselect which editor to use. Default is FCEDIT, then "
+"EDITOR,\n"
" \t\tthen vi\n"
" -l \tlist lines instead of editing\n"
" -n\tomit line numbers when listing\n"
" the last command.\n"
" \n"
" Exit Status:\n"
-" Returns success or status of executed command; non-zero if an error occurs."
+" Returns success or status of executed command; non-zero if an error "
+"occurs."
msgstr ""
-#: builtins.c:734
+#: builtins.c:738
msgid ""
"Move job to the foreground.\n"
" \n"
" Status of command placed in foreground, or failure if an error occurs."
msgstr ""
-#: builtins.c:749
+#: builtins.c:753
msgid ""
"Move jobs to the background.\n"
" \n"
-" Place the jobs identified by each JOB_SPEC in the background, as if they\n"
-" had been started with `&'. If JOB_SPEC is not present, the shell's notion\n"
+" Place the jobs identified by each JOB_SPEC in the background, as if "
+"they\n"
+" had been started with `&'. If JOB_SPEC is not present, the shell's "
+"notion\n"
" of the current job is used.\n"
" \n"
" Exit Status:\n"
" Returns success unless job control is not enabled or an error occurs."
msgstr ""
-#: builtins.c:763
+#: builtins.c:767
msgid ""
"Remember or display program locations.\n"
" \n"
" Determine and remember the full pathname of each command NAME. If\n"
-" no arguments are given, information about remembered commands is displayed.\n"
+" no arguments are given, information about remembered commands is "
+"displayed.\n"
" \n"
" Options:\n"
" -d\t\tforget the remembered location of each NAME\n"
" Returns success unless NAME is not found or an invalid option is given."
msgstr ""
-#: builtins.c:788
+#: builtins.c:792
msgid ""
"Display information about builtin commands.\n"
" \n"
" PATTERN\tPattern specifiying a help topic\n"
" \n"
" Exit Status:\n"
-" Returns success unless PATTERN is not found or an invalid option is given."
+" Returns success unless PATTERN is not found or an invalid option is "
+"given."
msgstr ""
-#: builtins.c:812
+#: builtins.c:816
msgid ""
"Display or manipulate the history list.\n"
" \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.\n"
+" with each displayed history entry. No time stamps are printed "
+"otherwise.\n"
" \n"
" Exit Status:\n"
" Returns success unless an invalid option is given or an error occurs."
msgstr ""
-#: builtins.c:848
+#: builtins.c:852
msgid ""
"Display status of jobs.\n"
" \n"
" If -x is used, returns the exit status of COMMAND."
msgstr ""
-#: builtins.c:875
+#: builtins.c:879
msgid ""
"Remove jobs from current shell.\n"
" \n"
" Returns success unless an invalid option or JOBSPEC is given."
msgstr ""
-#: builtins.c:894
+#: builtins.c:898
msgid ""
"Send a signal to a job.\n"
" \n"
" Returns success unless an invalid option is given or an error occurs."
msgstr ""
-#: builtins.c:917
+#: builtins.c:921
msgid ""
"Evaluate arithmetic expressions.\n"
" \n"
" Evaluate each ARG as an arithmetic expression. Evaluation is done in\n"
" fixed-width integers with no check for overflow, though division by 0\n"
" is trapped and flagged as an error. The following list of operators is\n"
-" grouped into levels of equal-precedence operators. The levels are listed\n"
+" grouped into levels of equal-precedence operators. The levels are "
+"listed\n"
" in order of decreasing precedence.\n"
" \n"
" \tid++, id--\tvariable post-increment, post-decrement\n"
" If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.."
msgstr ""
-#: builtins.c:962
+#: builtins.c:966
msgid ""
"Read a line from the standard input and split it into fields.\n"
" \n"
" Reads a single line from the standard input, or from file descriptor FD\n"
-" if the -u option is supplied. The line is split into fields as with word\n"
+" if the -u option is supplied. The line is split into fields as with "
+"word\n"
" splitting, and the first word is assigned to the first NAME, the second\n"
" word to the second NAME, and so on, with any leftover words assigned to\n"
-" the last NAME. Only the characters found in $IFS are recognized as word\n"
+" the last NAME. Only the characters found in $IFS are recognized as "
+"word\n"
" delimiters.\n"
" \n"
-" If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
+" If no NAMEs are supplied, the line read is stored in the REPLY "
+"variable.\n"
" \n"
" Options:\n"
" -a array\tassign the words read to sequential indices of the array\n"
" \t\tattempting to read\n"
" -r\t\tdo not allow backslashes to escape any characters\n"
" -s\t\tdo not echo input coming from a terminal\n"
-" -t timeout\ttime out and return failure if a complete line of input is\n"
+" -t timeout\ttime out and return failure if a complete line of input "
+"is\n"
" \t\tnot read withint TIMEOUT seconds. The value of the TMOUT\n"
" \t\tvariable is the default timeout. TIMEOUT may be a\n"
-" \t\tfractional number. The exit status is greater than 128 if\n"
-" \t\tthe timeout is exceeded\n"
+" \t\tfractional number. If TIMEOUT is 0, read returns success only\n"
+" \t\tif input is available on the specified file descriptor. The\n"
+" \t\texit status is greater than 128 if the timeout is exceeded\n"
" -u fd\t\tread from file descriptor FD instead of the standard input\n"
" \n"
" Exit Status:\n"
-" The return code is zero, unless end-of-file is encountered, read times out,\n"
+" The return code is zero, unless end-of-file is encountered, read times "
+"out,\n"
" or an invalid file descriptor is supplied as the argument to -u."
msgstr ""
-#: builtins.c:1001
+#: builtins.c:1006
msgid ""
"Return from a shell function.\n"
" \n"
" Returns N, or failure if the shell is not executing a function or script."
msgstr ""
-#: builtins.c:1014
+#: builtins.c:1019
msgid ""
"Set or unset values of shell options and positional parameters.\n"
" \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"
+" 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 Posix standard to\n"
" match the standard\n"
" Returns success unless an invalid option is given."
msgstr ""
-#: builtins.c:1096
+#: builtins.c:1101
msgid ""
"Unset values and attributes of shell variables and functions.\n"
" \n"
" -f\ttreat each NAME as a shell function\n"
" -v\ttreat each NAME as a shell variable\n"
" \n"
-" Without options, unset first tries to unset a variable, and if that fails,\n"
+" Without options, unset first tries to unset a variable, and if that "
+"fails,\n"
" tries to unset a function.\n"
" \n"
" Some variables cannot be unset; also see `readonly'.\n"
" Returns success unless an invalid option is given or a NAME is read-only."
msgstr ""
-#: builtins.c:1116
+#: builtins.c:1121
msgid ""
"Set export attribute for shell variables.\n"
" \n"
" Marks each NAME for automatic export to the environment of subsequently\n"
-" executed commands. If VALUE is supplied, assign VALUE before exporting.\n"
+" executed commands. If VALUE is supplied, assign VALUE before "
+"exporting.\n"
" \n"
" Options:\n"
" -f\trefer to shell functions\n"
" Returns success unless an invalid option is given or NAME is invalid."
msgstr ""
-#: builtins.c:1135
+#: builtins.c:1140
msgid ""
"Mark shell variables as unchangeable.\n"
" \n"
" Returns success unless an invalid option is given or NAME is invalid."
msgstr ""
-#: builtins.c:1156
+#: builtins.c:1161
msgid ""
"Shift positional parameters.\n"
" \n"
" Returns success unless N is negative or greater than $#."
msgstr ""
-#: builtins.c:1168 builtins.c:1183
+#: builtins.c:1173 builtins.c:1188
#, fuzzy
msgid ""
"Execute commands from a file in the current shell.\n"
" Jei nurodyta ARGUMENTŲ, jie tampa poziciniais parametrais iškvietus\n"
" FAILĄ."
-#: builtins.c:1199
+#: builtins.c:1204
msgid ""
"Suspend shell execution.\n"
" \n"
" Returns success unless job control is not enabled or an error occurs."
msgstr ""
-#: builtins.c:1215
+#: builtins.c:1220
msgid ""
"Evaluate conditional expression.\n"
" \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 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"
" STRING1 != STRING2\n"
" True if the strings are not equal.\n"
" STRING1 < STRING2\n"
-" True if STRING1 sorts before STRING2 lexicographically.\n"
+" True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
" STRING1 > STRING2\n"
" True if STRING1 sorts after STRING2 lexicographically.\n"
" \n"
" false or an invalid argument is given."
msgstr ""
-#: builtins.c:1291
+#: builtins.c:1296
msgid ""
"Evaluate conditional expression.\n"
" \n"
" be a literal `]', to match the opening `['."
msgstr ""
-#: builtins.c:1300
+#: builtins.c:1305
msgid ""
"Display process times.\n"
" \n"
-" Prints the accumulated user and system times for the shell and all of its\n"
+" Prints the accumulated user and system times for the shell and all of "
+"its\n"
" child processes.\n"
" \n"
" Exit Status:\n"
" Always succeeds."
msgstr ""
-#: builtins.c:1312
+#: builtins.c:1317
msgid ""
"Trap signals and other events.\n"
" \n"
-" Defines and activates handlers to be run when the shell receives signals\n"
+" Defines and activates handlers to be run when the shell receives "
+"signals\n"
" or other conditions.\n"
" \n"
" ARG is a command to be read and executed when the shell receives the\n"
" value. If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
" shell and by the commands it invokes.\n"
" \n"
-" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If\n"
+" If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. "
+"If\n"
" a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.\n"
" \n"
-" If no arguments are supplied, trap prints the list of commands associated\n"
+" If no arguments are supplied, trap prints the list of commands "
+"associated\n"
" with each signal.\n"
" \n"
" Options:\n"
" -l\tprint a list of signal names and their corresponding numbers\n"
" -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
" \n"
-" Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
+" Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
+"number.\n"
" Signal names are case insensitive and the SIG prefix is optional. A\n"
" signal may be sent to the shell with \"kill -signal $$\".\n"
" \n"
" Exit Status:\n"
-" Returns success unless a SIGSPEC is invalid or an invalid option is given."
+" Returns success unless a SIGSPEC is invalid or an invalid option is "
+"given."
msgstr ""
-#: builtins.c:1344
+#: builtins.c:1349
msgid ""
"Display information about command type.\n"
" \n"
" NAME\tCommand name to be interpreted.\n"
" \n"
" Exit Status:\n"
-" Returns success if all of the NAMEs are found; fails if any are not found."
+" Returns success if all of the NAMEs are found; fails if any are not "
+"found."
msgstr ""
-#: builtins.c:1375
+#: builtins.c:1380
msgid ""
"Modify shell resource limits.\n"
" \n"
-" Provides control over the resources available to the shell and processes\n"
+" Provides control over the resources available to the shell and "
+"processes\n"
" it creates, on systems that allow such control.\n"
" \n"
" Options:\n"
" Returns success unless an invalid option is supplied or an error occurs."
msgstr ""
-#: builtins.c:1420
+#: builtins.c:1425
msgid ""
"Display or set file mode mask.\n"
" \n"
" Returns success unless MODE is invalid or an invalid option is given."
msgstr ""
-#: builtins.c:1440
+#: builtins.c:1445
msgid ""
"Wait for job completion and return exit status.\n"
" \n"
" Waits for the process identified by ID, which may be a process ID or a\n"
" job specification, and reports its termination status. If ID is not\n"
" given, waits for all currently active child processes, and the return\n"
-" status is zero. If ID is a a job specification, waits for all processes\n"
+" status is zero. If ID is a a job specification, waits for all "
+"processes\n"
" in the job's pipeline.\n"
" \n"
" Exit Status:\n"
-" Returns the status of ID; fails if ID is invalid or an invalid option is\n"
+" Returns the status of ID; fails if ID is invalid or an invalid option "
+"is\n"
" given."
msgstr ""
-#: builtins.c:1458
+#: builtins.c:1463
msgid ""
"Wait for process completion and return exit status.\n"
" \n"
" and the return code is zero. PID must be a process ID.\n"
" \n"
" Exit Status:\n"
-" Returns the status of ID; fails if ID is invalid or an invalid option is\n"
+" Returns the status of ID; fails if ID is invalid or an invalid option "
+"is\n"
" given."
msgstr ""
-#: builtins.c:1473
+#: builtins.c:1478
msgid ""
"Execute commands for each member in a list.\n"
" \n"
" Returns the status of the last command executed."
msgstr ""
-#: builtins.c:1487
+#: builtins.c:1492
msgid ""
"Arithmetic for loop.\n"
" \n"
" Returns the status of the last command executed."
msgstr ""
-#: builtins.c:1505
+#: builtins.c:1510
msgid ""
"Select words from a list and execute commands.\n"
" \n"
" Returns the status of the last command executed."
msgstr ""
-#: builtins.c:1526
+#: builtins.c:1531
msgid ""
"Report time consumed by pipeline's execution.\n"
" \n"
" The return status is the return status of PIPELINE."
msgstr ""
-#: builtins.c:1543
+#: builtins.c:1548
msgid ""
"Execute commands based on pattern matching.\n"
" \n"
" Returns the status of the last command executed."
msgstr ""
-#: builtins.c:1555
+#: builtins.c:1560
msgid ""
"Execute commands based on conditional.\n"
" \n"
-" 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"
+" 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"
+" `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.\n"
" \n"
" Exit Status:\n"
" Returns the status of the last command executed."
msgstr ""
-#: builtins.c:1572
+#: builtins.c:1577
#, fuzzy
msgid ""
"Execute commands as long as a test succeeds.\n"
"Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n"
" „while“ komandų grąžina klaidos kodą 0."
-#: builtins.c:1584
+#: builtins.c:1589
#, fuzzy
msgid ""
"Execute commands as long as a test does not succeed.\n"
"Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n"
" „until“ komandų grąžina klaidos kodą, nelygų 0."
-#: builtins.c:1596
+#: builtins.c:1601
+msgid ""
+"Create a coprocess named NAME.\n"
+" \n"
+" Execute COMMAND asynchronously, with the standard output and standard\n"
+" input of the command connected via a pipe to file descriptors assigned\n"
+" to indices 0 and 1 of an array variable NAME in the executing shell.\n"
+" The default NAME is \"COPROC\".\n"
+" \n"
+" Exit Status:\n"
+" Returns the exit status of COMMAND."
+msgstr ""
+
+#: builtins.c:1615
msgid ""
"Define shell function.\n"
" \n"
" Create a shell function named NAME. When invoked as a simple command,\n"
-" NAME runs COMMANDs in the calling shell's context. When NAME is invoked,\n"
+" NAME runs COMMANDs in the calling shell's context. When NAME is "
+"invoked,\n"
" the arguments are passed to the function as $1...$n, and the function's\n"
" name is in $FUNCNAME.\n"
" \n"
" Returns success unless NAME is readonly."
msgstr ""
-#: builtins.c:1610
+#: builtins.c:1629
#, fuzzy
msgid ""
"Group commands as a unit.\n"
"Vykdyti eilę komandų grupėje. Tai yra vienas iš būdų nukreipti\n"
" visos eilės komandų įvedimą/išvedimą."
-#: builtins.c:1622
+#: builtins.c:1641
msgid ""
"Resume job in foreground.\n"
" \n"
" Returns the status of the resumed job."
msgstr ""
-#: builtins.c:1637
+#: builtins.c:1656
msgid ""
"Evaluate arithmetic expression.\n"
" \n"
" Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
msgstr ""
-#: builtins.c:1649
+#: builtins.c:1668
msgid ""
"Execute conditional command.\n"
" \n"
-" 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"
+" 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"
" ( EXPRESSION )\tReturns the value of EXPRESSION\n"
" ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
" 0 or 1 depending on value of EXPRESSION."
msgstr ""
-#: builtins.c:1675
+#: builtins.c:1694
msgid ""
"Common shell variable names and usage.\n"
" \n"
" \t\tcommands should be saved on the history list.\n"
msgstr ""
-#: builtins.c:1732
+#: builtins.c:1751
msgid ""
"Add directories to stack.\n"
" \n"
" change fails."
msgstr ""
-#: builtins.c:1766
+#: builtins.c:1785
msgid ""
"Remove directories from stack.\n"
" \n"
" change fails."
msgstr ""
-#: builtins.c:1796
+#: builtins.c:1815
msgid ""
"Display directory stack.\n"
" \n"
" \twith its position in the stack\n"
" \n"
" Arguments:\n"
-" +N\tDisplays the Nth entry counting from the left of the list shown by\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"
+" -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
" \tdirs when invoked without options, starting with zero.\n"
" \n"
" Exit Status:\n"
" Returns success unless an invalid option is supplied or an error occurs."
msgstr ""
-#: builtins.c:1825
+#: builtins.c:1844
msgid ""
"Set and unset shell options.\n"
" \n"
" Change the setting of each shell option OPTNAME. Without any option\n"
-" arguments, list all shell options with an indication of whether or not each\n"
+" arguments, list all shell options with an indication of whether or not "
+"each\n"
" is set.\n"
" \n"
" Options:\n"
" given or OPTNAME is disabled."
msgstr ""
-#: builtins.c:1846
+#: builtins.c:1865
#, fuzzy
msgid ""
"Formats and prints ARGUMENTS under control of the FORMAT.\n"
" -v var\tassign the output to shell variable VAR rather than\n"
" \t\tdisplay it on the standard output\n"
" \n"
-" FORMAT is a character string which contains three types of objects: plain\n"
-" characters, which are simply copied to standard output; character escape\n"
+" FORMAT 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"
+" format specifications, each of which causes printing of the next "
+"successive\n"
" argument.\n"
" \n"
-" In addition to the standard format specifications described in printf(1)\n"
+" In addition to the standard format specifications described in printf"
+"(1)\n"
" and printf(3), printf interprets:\n"
" \n"
" %b\texpand backslash escape sequences in the corresponding argument\n"
" %q\tquote the argument in a way that can be reused as shell input\n"
" \n"
" Exit Status:\n"
-" Returns success unless an invalid option is given or a write or assignment\n"
+" Returns success unless an invalid option is given or a write or "
+"assignment\n"
" error occurs."
msgstr ""
"printf formatuoja ir spausdina ARGUMENTUS nurodytu FORMATU. FORMATAS\n"
" Jei pateiktas parametras -v, išvedimas įrašomas į aplinkos kintamąjį\n"
" KINT, užuot spausdinus į standartinį išvedimą."
-#: builtins.c:1873
+#: builtins.c:1892
msgid ""
"Specify how arguments are to be completed by Readline.\n"
" \n"
-" For each NAME, specify how arguments are to be completed. If no options\n"
-" are supplied, existing completion specifications are printed in a way that\n"
+" For each NAME, specify how arguments are to be completed. If no "
+"options\n"
+" are supplied, existing completion specifications are printed in a way "
+"that\n"
" allows them to be reused as input.\n"
" \n"
" Options:\n"
" Returns success unless an invalid option is supplied or an error occurs."
msgstr ""
-#: builtins.c:1896
+#: builtins.c:1915
#, fuzzy
msgid ""
"Display possible completions depending on the options.\n"
" \n"
" Intended to be used from within a shell function generating possible\n"
-" completions. If the optional WORD argument is supplied, matches against\n"
+" completions. If the optional WORD argument is supplied, matches "
+"against\n"
" WORD are generated.\n"
" \n"
" Exit Status:\n"
" Jei pateiktas nebūtinasis ŽODŽIO argumentas, išvedami įrašai,\n"
" atitinkantys ŽODĮ."
-#: builtins.c:1911
+#: builtins.c:1930
msgid ""
"Modify or display completion options.\n"
" \n"
-" Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-" the completion currently begin executed. If no OPTIONs are givenm, print\n"
-" the completion options for each NAME or the current completion specification.\n"
+" Modify the completion options for each NAME, or, if no NAMEs are "
+"supplied,\n"
+" the completion currently begin executed. If no OPTIONs are givenm, "
+"print\n"
+" the completion options for each NAME or the current completion "
+"specification.\n"
" \n"
" Options:\n"
" \t-o option\tSet completion option OPTION for each NAME\n"
" have a completion specification defined."
msgstr ""
-#: builtins.c:1939
+#: builtins.c:1958
msgid ""
-"Read lines from a file into an array variable.\n"
+"Read lines from the standard input into an array variable.\n"
" \n"
-" Read lines from the standard input into the array variable ARRAY, or from\n"
-" file descriptor FD if the -u option is supplied. The variable MAPFILE is\n"
+" Read lines from the standard input into the array variable ARRAY, or "
+"from\n"
+" file descriptor FD if the -u option is supplied. The variable MAPFILE "
+"is\n"
" the default ARRAY.\n"
" \n"
" Options:\n"
-" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are copied.\n"
-" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default index is 0.\n"
+" -n count\tCopy at most COUNT lines. If COUNT is 0, all lines are "
+"copied.\n"
+" -O origin\tBegin assigning to ARRAY at index ORIGIN. The default "
+"index is 0.\n"
" -s count \tDiscard the first COUNT lines read.\n"
" -t\t\tRemove a trailing newline from each line read.\n"
-" -u fd\t\tRead lines from file descriptor FD instead of the standard input.\n"
+" -u fd\t\tRead lines from file descriptor FD instead of the standard "
+"input.\n"
" -C callback\tEvaluate CALLBACK each time QUANTUM lines are read.\n"
-" -c quantum\tSpecify the number of lines read between each call to CALLBACK.\n"
+" -c quantum\tSpecify the number of lines read between each call to "
+"CALLBACK.\n"
" \n"
" Arguments:\n"
" ARRAY\t\tArray variable name to use for file data.\n"
" \n"
-" If -C is supplied without -c, the default quantum is 5000.\n"
+" If -C is supplied without -c, the default quantum is 5000. When\n"
+" CALLBACK is evaluated, it is supplied the index of the next array\n"
+" element to be assigned as an additional argument.\n"
" \n"
-" If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
+" If not supplied with an explicit origin, mapfile will clear ARRAY "
+"before\n"
" assigning to it.\n"
" \n"
" Exit Status:\n"
-" Returns success unless an invald option is given or ARRAY is readonly."
+" Returns success unless an invalid option is given or ARRAY is readonly."
msgstr ""
-#~ msgid "Returns the context of the current subroutine call."
-#~ msgstr "Grąžina esamos procedūros kontekstą."
+#: builtins.c:1990
+msgid ""
+"Read lines from a file into an array variable.\n"
+" \n"
+" A synonym for `mapfile'."
+msgstr ""
#~ msgid " "
#~ msgstr " "
#~ msgid "can be used used to provide a stack trace."
#~ msgstr "gali būti panaudota generuojant steko išrašą (stack trace)."
-#~ msgid "The value of EXPR indicates how many call frames to go back before the"
+#~ msgid ""
+#~ "The value of EXPR indicates how many call frames to go back before the"
#~ msgstr "EXPR reikšmė nurodo, per kiek kvietimo freimų eiti atgal prieš"
#~ msgid "current one; the top frame is frame 0."
#~ msgid "back up through the list with the `popd' command."
#~ msgstr "sąrašu su „popd“ komanda."
-#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions"
+#~ msgid ""
+#~ "The -l flag specifies that `dirs' should not print shorthand versions"
#~ msgstr "Parametras -l nurodo, kad „dirs“ neturėtų spausdinti sutrumpintų"
-#~ msgid "of directories which are relative to your home directory. This means"
+#~ msgid ""
+#~ "of directories which are relative to your home directory. This means"
#~ msgstr "aplankų, santykinių namų aplinkui, pavadinimų. Tai reiškia, kad"
#, fuzzy
#~ msgid "causes `dirs' to print the directory stack with one entry per line,"
#~ msgstr "„dirs“ išveda aplankų steką po vieną pavadinimą eilutėje,"
-#~ msgid "prepending the directory name with its position in the stack. The -p"
+#~ msgid ""
+#~ "prepending the directory name with its position in the stack. The -p"
#~ msgstr "prieš pavadinimą prirašoma aplanko pozicija steke. Parametras -p"
#~ msgid "flag does the same thing, but the stack position is not prepended."
#~ msgstr "turi tokį patį efektą, tačiau pozicija steke neišvedama."
-#~ msgid "The -c flag clears the directory stack by deleting all of the elements."
+#~ msgid ""
+#~ "The -c flag clears the directory stack by deleting all of the elements."
#~ msgstr "Parametras -c išvalo aplankų steką."
-#~ msgid "+N displays the Nth entry counting from the left of the list shown by"
+#~ msgid ""
+#~ "+N displays the Nth entry counting from the left of the list shown by"
#~ msgstr "+N rodo N-tąjį įrašą skaičiuojant iš kairės sąraše, rodomame"
#~ msgid " dirs when invoked without options, starting with zero."
#~ msgstr " „dirs“, iškviesto be parametrų (skaičiuojama nuo nulio)."
-#~ msgid "-N displays the Nth entry counting from the right of the list shown by"
+#~ msgid ""
+#~ "-N displays the Nth entry counting from the right of the list shown by"
#~ msgstr "-N rodo N-tajį įrašą skaičiuojant iš dešinės sąraše, rodomame"
#~ msgid "Adds a directory to the top of the directory stack, or rotates"
#~ msgstr "steko viršūnėje esančiu."
#~ msgid "+N removes the Nth entry counting from the left of the list"
-#~ msgstr "+N pašalina N-tąjį įrašą skaičiuojant iš kairės sąraše, išvedamame „dir“"
+#~ msgstr ""
+#~ "+N pašalina N-tąjį įrašą skaičiuojant iš kairės sąraše, išvedamame „dir“"
#~ msgid " shown by `dirs', starting with zero. For example: `popd +0'"
#~ msgstr " (skaičiuojama nuo nulio). Pavyzdžiui: „popd +0“"
#~ msgstr " pašalina pirmąjį aplanką, „popd +1“ – antrąjį."
#~ msgid "-N removes the Nth entry counting from the right of the list"
-#~ msgstr "+N pašalina N-tąjį įrašą skaičiuojant iš dešinės sąraše, išvedamame „dir“"
+#~ msgstr ""
+#~ "+N pašalina N-tąjį įrašą skaičiuojant iš dešinės sąraše, išvedamame "
+#~ "„dir“"
#~ msgid " shown by `dirs', starting with zero. For example: `popd -0'"
#~ msgstr " (skaičiuojama nuo nulio). Pavyzdžiui: „popd -0“"
#~ msgid " removes the last directory, `popd -1' the next to last."
#~ msgstr " pašalina paskutinį aplanką, „popd -1“ – priešpaskutinį."
-#~ msgid "-n suppress the normal change of directory when removing directories"
+#~ msgid ""
+#~ "-n suppress the normal change of directory when removing directories"
#~ msgstr " išjungti įprastą darbinio aplanko keitimą šalinant aplankus"
#~ msgid " from the stack, so only the stack is manipulated."
#~ " „local“ gali būti naudojamas tik funkcijose; jis sukuria kintamąjį,\n"
#~ " matomą tik pačioje funkcijoje ir jos dukterinėse funkcijose."
-#~ msgid "Output the ARGs. If -n is specified, the trailing newline is suppressed."
+#~ msgid ""
+#~ "Output the ARGs. If -n is specified, the trailing newline is suppressed."
#~ msgstr ""
-#~ "Išspausdinti ARGUMENTUS. Jei nurodytas -n, nespausdinamas naujos eilutės\n"
+#~ "Išspausdinti ARGUMENTUS. Jei nurodytas -n, nespausdinamas naujos "
+#~ "eilutės\n"
#~ " simbolis pabaigoje."
-#~ msgid "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 "Skaityti ARGUMENTUS kaip aplinkos komandas ir jas vykdyti."
#~ msgid "Logout of a login shell."
#~ " Jei nurodytas „-v“, unset veiks tik su kintamaisiais. Jei nurodytas\n"
#~ " „-f“, unset veiks tik su funkcijomis. Jei nenurodytas nei vienas iš\n"
#~ " šių parametrų, unset pirmiausiai bandys pašalinti kintamąjį, ir jei\n"
-#~ " tai nepasiseks, bandys pašalinti funkciją. Kai kurie kintamieji negali\n"
+#~ " tai nepasiseks, bandys pašalinti funkciją. Kai kurie kintamieji "
+#~ "negali\n"
#~ " būti pašalinti; žr. „readonly“."
#~ msgid ""
#~ " being a login shell if it is; just suspend anyway."
#~ msgstr ""
#~ "Sustabdyti šios aplinkos darbą, kol bus gautas SIGCONT\n"
-#~ " signalas. Jei nurodyta „-f“, nesiskųsti, jei ši aplinka yra prisijungimo\n"
+#~ " signalas. Jei nurodyta „-f“, nesiskųsti, jei ši aplinka yra "
+#~ "prisijungimo\n"
#~ " aplinka (login shell) ir sustabdyti ją bet kuriuo atveju."
#~ msgid ""
#~ 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."
+#~ " 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 ""
#~ "Kiekvienam VARDUI nurodyti, kaip argumentai turėtų būti užbaigti.\n"
#~ " Jei pateiktas -p nustatymas arba nepateikta jokių nustatymų,\n"
msgstr ""
"Project-Id-Version: bash-4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-09-21 19:58+0200\n"
"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: een index is nodig bij toekenning aan associatief array"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "Kan %s niet aanmaken: %s"
msgid "cannot use `-f' to make functions"
msgstr "'-f' kan niet gebruikt worden om een functie te definiëren"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: is een alleen-lezen functie"
msgid "%s: cannot delete: %s"
msgstr "Kan %s niet verwijderen: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: bestand is te groot"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: kan een binair bestand niet uitvoeren"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "kan standaardinvoer niet omleiden vanaf /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: '%c': ongeldig opmaakteken"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "pijpfout"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: beperkte modus: '/' in opdrachtnamen is niet toegestaan"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: opdracht niet gevonden"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: ongeldige interpreter"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "kan bestandsdescriptor %d niet dupliceren naar bestandsdescriptor %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert(): %s: lege COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command(): ongeldige verbinder '%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf(): '%c': ongeldig opmaakteken"
msgstr ""
"Project-Id-Version: bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2007-11-30 08:49+0100\n"
"Last-Translator: Andrzej M. Krzysztofowicz <ankry@mif.pg.gda.pl>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nie mo¿na utworzyæ: %s"
msgid "cannot use `-f' to make functions"
msgstr "nie mo¿na u¿ywaæ `-f' do tworzenia funkcji"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funkcja tylko do odczytu"
msgid "%s: cannot delete: %s"
msgstr "%s: nie mo¿na usun±æ: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: plik jest za du¿y"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: nie mo¿na uruchomiæ pliku binarnego"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "nie mo¿na przekierowaæ standardowego wej¶cia z /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: `%c': nieprawid³owy znak formatuj±cy"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "b³±d zapisu: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: ograniczony: nie mo¿na podawaæ `/' w nazwach poleceñ"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: nie znaleziono polecenia"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: z³y interpreter"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "nie mo¿na skopiowaæ deskryptora pliku %d do %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: z³y ³±cznik `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: `%c': nieprawid³owy znak formatuj±cy"
msgstr ""
"Project-Id-Version: bash 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2002-05-08 13:50GMT -3\n"
"Last-Translator: Halley Pacheco de Oliveira <halleypo@ig.com.br>\n"
"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: impossível criar: %s"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: função somente para leitura"
msgid "%s: cannot delete: %s"
msgstr "%s: impossível criar: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: impossível executar o arquivo binário"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "erro de `pipe': %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: restrição: não é permitido especificar `/' em nomes de comandos"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: comando não encontrado"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: é um diretório"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "impossível duplicar fd (descritor de arquivo) %d para fd 0: %s"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: conector incorreto `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 2.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 1997-08-17 18:42+0300\n"
"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nu s-a putut crea: %s"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funcþie doar în citire (readonly)"
msgid "%s: cannot delete: %s"
msgstr "%s: nu s-a putut crea: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: nu se poate executa fiºierul binar"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "eroare de legãturã (pipe): %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: limitat: nu se poate specifica `/' în numele comenzilor"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: comandã negãsitã"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, fuzzy, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: este director"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, fuzzy, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "nu se poate duplica fd %d în fd 0: %s"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: conector greºitr `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: GNU bash 3.1-release\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2006-01-05 21:28+0300\n"
"Last-Translator: Evgeniy Dushistov <dushistov@mail.ru>\n"
"Language-Team: Russian <ru@li.org>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: ÎÅ ÍÏÇÕ ÓÏÚÄÁÔØ: %s"
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: ÄÏÓÔÕÐÎÁÑ ÔÏÌØËÏ ÎÁ ÞÔÅÎÉÅ ÆÕÎËÃÉÑ"
msgid "%s: cannot delete: %s"
msgstr "%s: ÎÅ ÍÏÇÕ ÕÄÁÌÉÔØ: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: ÓÌÉÛËÏÍ ÂÏÌØÛÏÊ ÆÁÊÌ"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: ÎÅ ÍÏÇÕ ÚÁÐÕÓÔÉÔØ ÂÉÎÁÒÎÙÊ ÆÁÊÌ"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: ËÏÍÁÎÄÁ ÎÅ ÎÁÊÄÅÎÁ"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: ÐÌÏÈÏÊ ÉÎÔÅÒÐÒÅÔÁÔÏÒ"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "ÎÅ ÍÏÇÕ ÄÕÂÌÉÒÏ×ÁÔØ fd %d × fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr ""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2009-02-07 15:11+0100\n"
"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: pri priraďovaní asociatívnemu poľu je potrebné použiť index"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: nie je možné vytvoriť: %s"
msgid "cannot use `-f' to make functions"
msgstr "nie je možné použiť „-f“ pre tvorbu funkcií"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: funkcia iba na čítanie"
msgid "%s: cannot delete: %s"
msgstr "%s: nie je možné zmazať: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: súbor je príliš veľký"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: nie je možné vykonať binárny súbor"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "nie je možné presmerovať štandardný vstup z /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: „%c“: neplatný formátovácí znak"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "chyba rúry"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: obmedzené: nie jemožné uviesť „/“ v názvoch príkazov"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: príkaz nenájdený"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: chybný interpreter"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "nie je možné duplikovať fd %d na fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: chybný konektor `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: „%c“: neplatný formátovací znak"
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-09-15 13:09+0200\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: måste använda index vid tilldelning av associativ vektor"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: det går inte att skapa: %s"
msgid "cannot use `-f' to make functions"
msgstr "det går inte att använda \"-f\" för att göra funktioner"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: endast läsbar funktion"
msgid "%s: cannot delete: %s"
msgstr "%s: kan inte ta bort: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: filen är för stor"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: det kår inte att köra binär fil"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "det går inte att omdiregera standard in från /dev/null: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: \"%c\": ogiltigt formateringstecken"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "rörfel"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: begränsat: det går inte att ange \"/\" i kommandonamn"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: kommandot finns inte"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: felaktig tolk"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "det går inte att duplicera fb %d till fb %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: felaktig anslutning \"%d\""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: \"%c\": ogiltigt formateringstecken"
msgstr ""
"Project-Id-Version: bash 3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2006-10-30 20:00+0200\n"
"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: oluşturulamıyor: %s"
msgid "cannot use `-f' to make functions"
msgstr "işlev yapmak için `-f' kullanılamaz"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: salt okunur işlev"
msgid "%s: cannot delete: %s"
msgstr "%s: silinemiyor: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: dosya çok büyük"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: ikili dosya çalıştırılamıyor"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "/dev/null'dan standart girdiye yönlendirme yapılamaz: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "TIMEFORMAT: `%c': biçim karakteri geçersiz"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "yazma hatası: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: kısıtlı: komut adında `/' kullanamazsınız"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: komut yok"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: hatalı yorumlayıcı"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "fd %d, fd %d olarak yinelenemiyor"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: hatalı bağlayıcı `%d'"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: `%c': geçersiz biçim karakteri"
msgstr ""
"Project-Id-Version: bash 4.0-pre1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-09-08 17:26+0930\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr "%s: %s: phải sử dụng chữ thấp khi gán mảng kết hợp"
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr "%s: không thể tạo %s"
msgid "cannot use `-f' to make functions"
msgstr "không thể dùng « -f » để tạo hàm"
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s: hàm chỉ đọc"
msgid "%s: cannot delete: %s"
msgstr "%s: không thể xoá: %s"
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr "%s: tập tin quá lớn"
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr "%s: không thể thực hiện tập tin nhị phân"
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "không thể chuyển hướng đầu vào tiêu chuẩn từ « /dev/null »: %s"
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr "ĐỊNH DẠNG THỜI GIAN: « %c »: ký tự định dạng không hợp lệ"
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
msgid "pipe error"
msgstr "lỗi ống dẫn"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: bị hạn chế: không thể ghi rõ dấu sổ chéo « / » trong tên câu lệnh"
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s: không tìm thấy lệnh"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr "%s: %s: bộ thông dịch sai"
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr "không thể nhân đôi fd %d tới fd %d"
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr "progcomp_insert: %s: NULL COMPSPEC"
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr "print_command: bộ kết nối sai « %d »"
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr "cprintf: « %c »: ký tự định dạng không hợp lệ"
msgstr ""
"Project-Id-Version: bash-3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-10 11:05-0500\n"
+"POT-Creation-Date: 2009-02-19 14:53-0500\n"
"PO-Revision-Date: 2008-08-20 20:12+0800\n"
"Last-Translator: Zi-You Dai <ioppooster@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
msgid "%s: %s: must use subscript when assigning associative array"
msgstr ""
-#: bashhist.c:380
+#: bashhist.c:379
#, c-format
msgid "%s: cannot create: %s"
msgstr ""
msgid "cannot use `-f' to make functions"
msgstr ""
-#: builtins/declare.def:365 execute_cmd.c:4782
+#: builtins/declare.def:365 execute_cmd.c:4818
#, c-format
msgid "%s: readonly function"
msgstr "%s:只讀函數"
msgid "%s: cannot delete: %s"
msgstr ""
-#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639
+#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675
#: shell.c:1439
#, c-format
msgid "%s: is a directory"
msgid "%s: file is too large"
msgstr ""
-#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449
+#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449
#, c-format
msgid "%s: cannot execute binary file"
msgstr ""
msgid "cannot redirect standard input from /dev/null: %s"
msgstr ""
-#: execute_cmd.c:1094
+#: execute_cmd.c:1112
#, c-format
msgid "TIMEFORMAT: `%c': invalid format character"
msgstr ""
-#: execute_cmd.c:1993
+#: execute_cmd.c:2011
#, fuzzy
msgid "pipe error"
msgstr "寫入錯誤: %s"
-#: execute_cmd.c:4327
+#: execute_cmd.c:4363
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr ""
-#: execute_cmd.c:4418
+#: execute_cmd.c:4454
#, c-format
msgid "%s: command not found"
msgstr "%s:命令找不到"
-#: execute_cmd.c:4672
+#: execute_cmd.c:4708
#, c-format
msgid "%s: %s: bad interpreter"
msgstr ""
-#: execute_cmd.c:4821
+#: execute_cmd.c:4857
#, c-format
msgid "cannot duplicate fd %d to fd %d"
msgstr ""
msgid "progcomp_insert: %s: NULL COMPSPEC"
msgstr ""
-#: print_cmd.c:287
+#: print_cmd.c:285
#, c-format
msgid "print_command: bad connector `%d'"
msgstr ""
-#: print_cmd.c:1347
+#: print_cmd.c:1348
#, c-format
msgid "cprintf: `%c': invalid format character"
msgstr ""
make_command_string_internal (command)
COMMAND *command;
{
- char s[3];
+ char s[3], *op;
if (command == 0)
cprintf ("");
break;
case ';':
-#if 0
- if (was_heredoc == 0)
- cprintf (";");
- else
- was_heredoc = 0;
-#else
if (deferred_heredocs == 0)
- cprintf (";");
+ {
+ if (was_heredoc == 0)
+ cprintf (";");
+ else
+ was_heredoc = 0;
+ }
else
- print_deferred_heredocs (";");
-#endif
+ print_deferred_heredocs (inside_function_def ? "" : ";");
if (inside_function_def)
cprintf ("\n");
}
make_command_string_internal (command->value.Connection->second);
+ if (deferred_heredocs)
+ print_deferred_heredocs ("");
printing_connection--;
break;
}
if (deferred_heredocs)
{
- if (cstring[0] != ';' || cstring[1])
+ if (cstring && cstring[0] && (cstring[0] != ';' || cstring[1]))
cprintf (" "); /* make sure there's at least one space */
dispose_redirects (deferred_heredocs);
+ was_heredoc = 1;
}
deferred_heredocs = (REDIRECT *)NULL;
}
aa=1
}
-./heredoc.tests: line 94: warning: here-document at line 92 delimited by end-of-file (wanted `EOF')
+foo is a function
+foo ()
+{
+ echo;
+ cat <<END
+bar
+END
+
+ cat <<EOF
+qux
+EOF
+
+}
+
+bar
+qux
+
+bar
+qux
+./heredoc.tests: line 96: warning: here-document at line 94 delimited by end-of-file (wanted `EOF')
hi
there
export -f fff
${THIS_SH} -c 'type fff'
+${THIS_SH} ./heredoc1.sub
+
# check that end of file delimits a here-document
# THIS MUST BE LAST!
--- /dev/null
+foo()
+{
+ echo
+ cat <<END
+bar
+END
+ cat <<EOF
+qux
+EOF
+}
+
+type foo
+foo
+
+eval "$(type foo | sed 1d)"
+foo