From 4b9cc2224b05de7a1b772703a89be706c7c59214 Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Wed, 7 Dec 2011 09:37:36 -0500 Subject: [PATCH] commit bash-4.0 snapshot --- CHANGES | 10 +- CWRU/changelog | 7530 +++++++++++++++++++++++++++++++++++- MANIFEST | 1 + bashhist.c | 1 - doc/FAQ | 2 +- doc/bash.1 | 6 +- doc/bash.pdf | Bin 281100 -> 281941 bytes doc/bash.ps | 1540 ++++---- doc/bashref.dvi | Bin 637564 -> 638296 bytes doc/bashref.pdf | Bin 559527 -> 560032 bytes doc/bashref.texi | 8 +- doc/texinfo.tex | 6689 +++++++++++++++++++++++++++++++- lib/readline/COPYING | 675 +++- lib/readline/ansi_stdlib.h | 55 +- lib/readline/doc/fdl.texi | 452 ++- lib/readline/posixdir.h | 62 +- lib/readline/posixjmp.h | 41 +- lib/readline/posixstat.h | 143 +- lib/readline/tilde.c | 503 ++- lib/readline/tilde.h | 81 +- po/af.gmo | Bin 1231 -> 1231 bytes po/af.po | 26 +- po/bash.pot | 26 +- po/bg.gmo | Bin 36341 -> 36341 bytes po/bg.po | 26 +- po/ca.gmo | Bin 10101 -> 10101 bytes po/ca.po | 26 +- po/cs.gmo | Bin 153701 -> 153701 bytes po/cs.po | 26 +- po/de.gmo | Bin 35764 -> 35764 bytes po/de.po | 26 +- po/en@boldquot.gmo | Bin 155921 -> 155921 bytes po/en@boldquot.po | 28 +- po/en@quot.gmo | Bin 154417 -> 154417 bytes po/en@quot.po | 28 +- po/eo.gmo | Bin 25421 -> 25421 bytes po/eo.po | 26 +- po/es.gmo | Bin 31030 -> 31030 bytes po/es.po | 26 +- po/et.gmo | Bin 12257 -> 12257 bytes po/et.po | 26 +- po/fr.gmo | Bin 27590 -> 27590 bytes po/fr.po | 26 +- po/hu.gmo | Bin 9591 -> 9591 bytes po/hu.po | 26 +- po/id.gmo | Bin 152559 -> 152559 bytes po/id.po | 26 +- po/ja.gmo | Bin 8183 -> 8183 bytes po/ja.po | 26 +- po/lt.gmo | Bin 24059 -> 25365 bytes po/lt.po | 977 +++-- po/nl.gmo | Bin 154123 -> 154123 bytes po/nl.po | 26 +- po/pl.gmo | Bin 26025 -> 26025 bytes po/pl.po | 26 +- po/pt_BR.gmo | Bin 9926 -> 9926 bytes po/pt_BR.po | 26 +- po/ro.gmo | Bin 9699 -> 9699 bytes po/ro.po | 26 +- po/ru.gmo | Bin 9142 -> 9142 bytes po/ru.po | 26 +- po/sk.gmo | Bin 153974 -> 153974 bytes po/sk.po | 26 +- po/sv.gmo | Bin 149365 -> 149365 bytes po/sv.po | 26 +- po/tr.gmo | Bin 25573 -> 25573 bytes po/tr.po | 26 +- po/vi.gmo | Bin 164633 -> 164633 bytes po/vi.po | 26 +- po/zh_TW.gmo | Bin 5993 -> 5993 bytes po/zh_TW.po | 26 +- print_cmd.c | 23 +- support/mkconffiles | 0 support/mkversion.sh | 0 support/rlvers.sh | 0 support/shobj-conf | 0 tests/heredoc.right | 21 +- tests/heredoc.tests | 2 + tests/heredoc1.sub | 16 + 79 files changed, 17973 insertions(+), 1519 deletions(-) mode change 120000 => 100644 CWRU/changelog mode change 120000 => 100644 doc/texinfo.tex mode change 120000 => 100644 lib/readline/COPYING mode change 120000 => 100644 lib/readline/ansi_stdlib.h mode change 120000 => 100644 lib/readline/doc/fdl.texi mode change 120000 => 100644 lib/readline/posixdir.h mode change 120000 => 100644 lib/readline/posixjmp.h mode change 120000 => 100644 lib/readline/posixstat.h mode change 120000 => 100644 lib/readline/tilde.c mode change 120000 => 100644 lib/readline/tilde.h mode change 100644 => 100755 support/mkconffiles mode change 100644 => 100755 support/mkversion.sh mode change 100644 => 100755 support/rlvers.sh mode change 100644 => 100755 support/shobj-conf create mode 100644 tests/heredoc1.sub diff --git a/CHANGES b/CHANGES index 0ee8c9b6..3d71f176 100644 --- a/CHANGES +++ b/CHANGES @@ -1,9 +1,6 @@ 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 @@ -41,6 +38,10 @@ k. Fixed a bug that caused the CPU usage reported by the `time' builtin to be 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 @@ -53,6 +54,9 @@ b. Reworked the signal handling to avoid calling disallowed functions from a 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 diff --git a/CWRU/changelog b/CWRU/changelog deleted file mode 120000 index d2d81b30..00000000 --- a/CWRU/changelog +++ /dev/null @@ -1 +0,0 @@ -CWRU.chlog \ No newline at end of file diff --git a/CWRU/changelog b/CWRU/changelog new file mode 100644 index 00000000..5427ece2 --- /dev/null +++ b/CWRU/changelog @@ -0,0 +1,7529 @@ + 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" + +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 + +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 + +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 + + 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 \ 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 + 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 + + 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 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 + - add HAVE_FCNTL, HAVE_KILL for respective system calls + - add HAVE_GETPW{ENT,NAM,UID} for passwd functions + +configure.in + - add check for + - 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 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 with HAVE_PWD_H + - guard inclusion of 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 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 + +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 + + +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 + + + 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 + + +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 + + 6/30 + ---- +lib/malloc/trace.c + - include 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 + - 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 + + +{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 + + 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 + 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 , 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 to get right value of NSIG from + (usually) + + 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 + +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 + + +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 + +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 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 + + 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 + + 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 + +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 + +{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 + + 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 + + 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 + + +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 + +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 (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 + - 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 prompted the discovery + +aclocal.m4 + - slight change to test for /dev/fd to compensate for a linux + failing; suggested by Mike Frysinger + + 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 + - 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 + +[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 + + +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 + + 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 + + 6/29 + ---- +lib/glob/xmbsrtowcs.c + - make sure destp is non-null before assigning a 0 to *destp in + xdupmbstowcs. Fix from Louiwa Salem + +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 + + +lib/readline/bind.c + - in rl_generic_bind(), make sure that the keys array is freed before + an error return. Fix from Louiwa Salem + + 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 for prototypes for memset, strlen + +lib/termcap/{termcap,tparam}.c + - include 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 + + 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 + +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 + + 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 + +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 + + 9/12 + ---- +builtins/printf.def + - make sure `%q' format specifier outputs '' for empty string arguments + Bug reported by Egmont Koblinger + +make_cmd.c + - change make_here_document to echo lines in here-doc if set -v has + been executed. Reported by Eduardo Ochs + +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 + +configure.in + - change DEBUGGER_START_FILE to start with ${ac_default_prefix}/share, + like bashdb installs itself. Reported by Nick Brown + + + 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 + + + 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 + + 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 + + +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 and Stuart Shelton + + + +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 + and Stuart Shelton + + 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 + + + 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 + + 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 + + 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 + + 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 + + 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 + +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 + +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 + + + 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 + + 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 + + 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 + +doc/{bash.1,bashref.texi} + - add `E' and `T' to the synopsis of the set builtin. + From Benno Schulenberg + +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 + + 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 + +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 + +{redir,subst}.c + - add MT_USETMPDIR flag to calls to sh_mktmpfd and sh_mktmpname. Bug + reported by Eric Blake + +{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 + +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 + +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 + + + 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) + + +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 + + + 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 + - 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 + + + 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 + + 2/19 + ---- +CWRU/audit-patch + - patch from Steve Grubb of RedHat 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 + + 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 + + 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 + + + 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 + +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 . + + 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 + + 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 + +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 + + + 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 + + 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 + + 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 + + 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 + +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 + + 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 + +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 + + +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 + + 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 + +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 + +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 + + 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 + + + 6/13 + ---- +support/shobj-conf + - changes to support shared object and shared library creation on AIX + 5.x and later versions. From Niklas Edmundsson + + 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 + + + 7/11 + ---- + +lib/readline/rltty.c + - enable flush-output code for systems other than AIX 4.1. Problem + reported by Jan Kratochvil + + 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 + + + 7/13 + ---- +variables.c + - use native __QNX__ and __QNXNTO__ cpp defines instead of qnx and + qnx6, respectively. Patch from Sean Boudreau + +lib/sh/getcwd.c + - #undef HAVE_LSTAT on qnx, so it uses stat instead. Patch from + Sean Boudreau + + 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 + + 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 + + +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 + + + 8/1 + --- +lib/readline/{util,histexpand}.c + - fixes for small memory leaks from Michael Snyder + + 8/18 + ---- +Makefile.in + - add dependency on builtins/builtext.h to nojobs.o list. Fixes + `make -j 5' issue reported by Chris MacGregor + +examples/loadables/Makefile.in + - add @LDFLAGS@ to SHOBJ_LDFLAGS assignment -- experimental. Suggested + by Mike Frysinger + +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 + + 8/21 + ---- +histexpand.c + - fix another memory leak in history_find_word. Bug report originally + from Michael Snyder ; test case suggested by Jim + Blandy + + 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 + + 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 + + 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 + + 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 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 + + + 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 + + + 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 + +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 + +braces.c + - pass process substitution through unchanged the same as command + substitution. Prompted by suggestion from Stephane Chazelas + + +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 + +builtins/type.def + - change exit status of `type' to not successful if any of the + requested commands are not found. Reported by Stephane Chazleas + + +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 + + 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 + + 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 + + 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 + and Paul Eggert + + 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 + + + 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 + +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 + + 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 (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 + + 11/15 + ----- +variables.c + - add new function `seedrand' to seed the bash random number + generator from more random data. Suggestion from Steve Grubb + + - replace the rng in brand() with a slightly better one from FreeBSD + (filtered through Mac OS X 10.5). Replacement suggested by + Steve Grubb + + 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 + +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 + + 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 + + 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 + + 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 + + + 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 + + 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 + +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 + + 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 + + - 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 + - add support for redoing inserts made with the `I' command. Fix + from Thomas Janousek + - 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 + + 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 and Eric Blake + + 2/9 + --- +builtins/*.def + - changes to text and formatting suggested by Jan Schampera + + + 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 + . + + 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 + + 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 + +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 + + +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 + + + 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 + +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 + +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 + +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 + + +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 + + 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 + +builtins/read.def + - added `-i text' option, inserts `text' into line if using readline. + Suggested by many, used some ideas from Kevin Pulo + +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 + + 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 + +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 + + 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 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 . + + 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 + + 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 + + 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 + + + 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 + + - 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 + + - 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 + + +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 + +{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 + + 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 + + 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 + - 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 + + 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 + +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 + + 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 + , 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 + + + + 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 + + 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 + + + 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 + + 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 + + 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 + + 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 + +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 + - 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 + + 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 + + + 9/16 + ---- +execute_cmd.c + - add call to CHECK_TERMSIG in shell_execve after the call to execve + returns. Recommended by Roman Rakus + - 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" , 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 + + 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 + + + 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 + + 10/4 + ---- + +redir.c + - in redirection_error(), use `error' instead of errno when comparing + against EBADF. From mingw32 patches submitted by Hector Chu + + +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 + +builtins/cd.def + - ignore CDPATH when in privileged mode. Suggested by Paul Jarc + + +variables.c + - change sv_globignore to only act if privileged mode is not enabled. + Suggested by Paul Jarc + +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 + + +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 + - 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 + + + 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 + + + 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 + + + 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 + + 10/26 + ----- +doc/bash.1 + - add single-sentence descriptions to rest of parameter expansions. + Suggested by Ken Irving + + 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 + - 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 + +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 + + 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 + + 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 + + 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 + + 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 + - 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 + - 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 + - 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" 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 + +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 + +{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 + - 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 + + 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 + + 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 + +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 + + +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 + + 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 + + - if interactive, pass the SEVAL_INTERACT and SEVAL_NOHIST flags + to parse_and_execute when calling callbacks. Fixes bug reported + by Pierre Gaston + - 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 + - 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 + + +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 + +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 + +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 + + 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 + +aclocal.m4 + - new macro, BASH_TYPE_SIG_ATOMIC_T, tests for sig_atomic_t in + , 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 ; fix + suggested by Stephane Chazelas + + 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 + + 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 + + 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 + +[bash-4.0 frozen] diff --git a/MANIFEST b/MANIFEST index f8bcc4f9..735270cb 100644 --- a/MANIFEST +++ b/MANIFEST @@ -844,6 +844,7 @@ tests/glob1.sub f 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 diff --git a/bashhist.c b/bashhist.c index 02afb38f..5c61f675 100644 --- a/bashhist.c +++ b/bashhist.c @@ -355,7 +355,6 @@ save_history () append_history (history_lines_this_session, hf); else write_history (hf); - sv_histsize ("HISTFILESIZE"); } } diff --git a/doc/FAQ b/doc/FAQ index 43ebe432..29d453a5 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -143,7 +143,7 @@ of Case Western Reserve University. 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? diff --git a/doc/bash.1 b/doc/bash.1 index 3b1e3751..4308214b 100644 --- a/doc/bash.1 +++ b/doc/bash.1 @@ -8046,9 +8046,11 @@ command that fails is part of the command list immediately following a 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 diff --git a/doc/bash.pdf b/doc/bash.pdf index 251f3c981ff62622fef52ece78952794e23d748d..563daf1484403d4ed18d977e6d2d431a8b0f3950 100644 GIT binary patch delta 41257 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 delta 40459 zcmZsiQ*b2=u&ra;n%JD!w#|ucJK5Q>olI=owr$&**v9!!)qOct_pRT%s%x$FtzOPR zjZQ}O4+aeeYXWam25#CPjWh#RHE%(LMMzXa)amtUB?!%ZDOPMVu;qZZ6k8* z8{``#3w=fX#CKB+#x~qc5~^3Co%E5QLQNB@HddQgchm*NVGor>elBO9z7IG##a#t; z$>%v=Z@v#o;cE=SFXNsBynTF}vg_EQ>{mTIi>O*R;Tu8XfN-dov}VPT_Al6Xo1Cew zg2p6W6RIi26+^PEnNdw@^hxtqhvJ{D4!fhDUuKUfJINxyKV&{f1oC@-P9)X=HH*3p zY7(#IyWWJ;E;(GnT+h;NdZxC|ZXQiHT-qU~ESj_(CnCL%Zf*qD-jLpR3unjA=#Z*r z`IpXst0x+5pwW+(-N~fOxTlI1JD04fbmY#k33dV(>QO|6JNna;=jEoQPkEXODbr!a z`mYZj>lS6q>dr4C%{aFv8y(+cLNJpIyDW? zD}6TM43=`|(iNrJPIuP25E_c91k74(=N36IcDSoWAm9n3+S;MO-1X5G2d)Db;!2GA5mg#P@V>EjlBsQjf|^8dxphtcSKe{k?lC;K&AYGtJN@@D;);XRiq%)tbaiP(shtHZz)dv9FM&Ak+LWDyz zskjYeL?!G*$v|9>$gNJB2oYKfQR3sJ=9|`fm+JMdtBUsnzdKH;J16 z$!%!lOo5k$(U@IsMPga z1^t2a>El-I#ze(AJoM084;j3;V77DOnn})=oZ@Y{=DYs>4{c&`^0RPbr3UYj1HN*W zb<$7gPW&)R(_n`KlF8~tn+5l{e~8&gkt4i;9k`wfjT&==?d@V<=<`1l)}<*3(BE1h zKvF%7G?=y!gb^=3)jKLK08Zr{SG@PjEi)LbvxeP}xO7L-)Qaq5=X^%{gB1h01=4a{-mg{=quLHYkBuTi1^5a%LP^yb<$9^P4uA4u+$tu z^T?XYKMdhMQgEzF(ckGsNHm+)2FUQ^Kw07tM{1>h?7=(7HTI_y8GI%1HYi)T0wc@o zKVl%5;C!D_Hg{qRfXAISW2{V&q%rp4huxACoVsk?1=ocY@XEGC$VWV7%ro z$}T139*o4z^6tu7YsO929PHz7wH-Hd1I4f)Qty`s;UY|I;3ONwERaD3q8f zx{HOfth1Q3hVbm+A&58fQXD}GpapFNJjlsZ!0L9EcQL&@fOdO$b~#g4*ey@$Fo>oi zkU=YdOgrVR>U)1?@;4nEpQ0xr`5I|2*CbWUjbH27Y+`^vbuM0-l7SLXjXEN^zP{vtY6?*Ur&C{9EJEu`*ugw7=%^UM&tksJ5kM$?pp2r}HCxYR z<#!NO%#%bAJoh~vJk3CXYcsD(fh7TSzaEOXNdIMX45ln4D{3*>39L@51nsuT<}!ML z5Bt(;$pMCcC|h5In0Dy%V#2@{F_AbQj7|`XtLXg zVSW^IqUh`2pQ2)j{p*C=lnMK2_+22Codz)AM>LR6ah;G7P(7Ijir^~UOrCqQ~fDws5|mluAB{~;8@eMc`E$Dl)7CF%-f?0t(72! zB13r^PXx!2NJbBLS~af;*EW>b8)Ijsz&R|L{fy;t59(Y3Vy-tW(k6|Rv@e%cHN4IX zo!+E)%4IWYzP*Wrmc$ov8%)%U-V-cSnWk7rFIFLAd^~Gb(_Jo0=vBIJ#JqInb{kSt`}q=# z)4rlUs(!f`vsu{;*^TpBQVP?C=J_@OHAk#kDGIZ0gxn#3b$(eTVdFufpu(oHU68f?P)-B=t3z zU)zc`LdV)}G7r7J4J2*O>%;=2vJ_n+RD(`3x71lof+fER9L z&i1_TRCE435q(`jELx?3`qo zIUt>X0^9L9!0Ypm9aQ9yuqV#IZZ-7UQb!ROKkBKs8A+O~E5xSGmaBflv})u@;m3xJ zpQ}H=H@Bk0zqh~@LXSIgUFYgaSts;{8+NhZ+=_zg21jK=GWbnQf;^Hbl3|KSdG01U zSZDUB>W^`L{7Tj6Pr&oXt$U?}V@>sFzwGjOEC>Ap;cZB;v>efnb(nL7)ya?w@|_jP z2=STAy9r}uYjRxgi!-IsCDsq-G`+y%XBa*p$=`ixVKAD?Dnz7#QkA)8(1Cf8kNO2> zrg#V-tjl|%MQ~-iCjWzzjj=eecpbd=;7@?%+DM)>~5!AK!x*lN$(ROTb9fK-(DcoRWyNk=LE(m-obgpEa`I+5Y}I zQG8JPORSw^7!7dyowPnjVM)I9uV*ZG?MdjwwQ9s`r?Glb0jw(9z`n_Bk*xLb>7?2o+ zWxks1IP#t8W}($)nOuDp$OkD6wxH~%Dc5@q(Ig59r^^D;@4f;*`Xt7WjLap~NxBbU z<)Z=O@4ajHs|L0*^cg=0s^9NFwKNH^9ly^T!BBDTiTdw|kSSdvjPOsy63rJS0{VYb zZ^Np5XRag6Yp=R4FTeLc`0xX3 zl?ITmS$BSvMZ%HweM~i$B*{NNE|2}rV9sW+{#cpfy9`uSR^x%J$TYxdsna>c=~ByG zJ8N_k8Ai*NDJ|yuf0g#mybOsS0rb-xzCI_u7h+Tv^JT#!zgE+etE7?%e{J?dJQ?aK z{?@Ht)gzLl%-%+9RHCMBXVP~~8c=)HYprpoR`~HOlkd#aqG`JyRQ||_5od_K5UkO? zs;^8irq=vEJF|lEYRCdc(iMORJKNF_L?0}3Jx@qGTDsJ^7 za&^OOH^eR_Spl3TUC2D5Ir1Ip!_)CqwJ++6@0(zO<{qjxiSQ2%G~z9%f{(wl?-Iwy z84Crd7qpGcDY)^%7j_TELJ*z#Rd;nlrIe5CS=9Iw2`-R%=Bo$Qc}9Tx2nS{dnSSUf4zVWCk9P6lLSPvmoBM9#e0HTqt?5l(hC<-d%t3_$SIuT6T9S@adUa-P|zWr`i@&MM(jde3QX%voWo%jZ8#J0&6rBe3EB{CbB% z@*$;OBYGUpCudF#4Oeyex+`fXWV^XLOXq_f&XWV#|EyXR zZ^?`7yRL?DRzGbv%w~J%vx@r@Ah53^W4YhTyajRL=>b;)nc;Yv_RqXi{2g2}bHg^= zpe3s4g745xmnklr2qa4H-V024N=T*;ig8zKmsz=3Yy?xt`t?kHFq=cSP)m!2=_bJp zH0Qvbm&XBK*zP~Q-NbjpoBY0q2L z21moS2-}5Gbwfrn9d##5zbO4r$6Z%Eu|FcXe;H!C8^=y*FP|(N5(Guq$p8g>pK;V4 zF5;#K_|J@%*!tdxcx{;`76VirDUM$DwKU&pMa`*oE0T&_xPGxoq^U`A7EBmwNKyfD zO1vrn5;%|PXP^n77c}=R0+kzXK@lD52GurSNCJ|Ni|WX(n1r9Iv3nI#BfZ#d zucIq3UOM>RK2#EFZA*d#FXMrC-*QzPdDIw@BKis+S~BPV1lQ-|Nng%wbvoUld6N4C z386*46)c$7rt@p-P52A>F)W{X81zOGBGNZ@hIc>z-OO)Vd$vjB=;^zpm+@h_R=s_A zFB3)BW9t~Fb0eEZu6TL)+-ZJ(FacE&O3my|U0j{bjO^h4n;eX-;ZnCvz~RB!*|}3M zOu$8f)!LiRhi$0;PVbOG@?;hoojR8&hhNSaj!56L9xJzAKGC4vG>U+>HAF<%eS^D0FM3(0zINq7di5HriiAyn?;u z)jPrBP$a_Jj^)|2$JWRE)H8-TVY*JOo!2E%Ag39kb@T(CP?O z(U519{X+Qc+$d~bo1(c}XtA7wsu`b@C}Xp6CWF%zkEv{$@_$t@H#GB(16vM?aicHk(lPNQ`*+}tA;p%?|QQ=!nI04DS{B} zc#Z+n3@$v9dLjF`|9){VL3Dx;#^wZs)BSO~{8O#J0DHUem#yRJ84^d$qu&RkTRGwl zFb7Gvc)jz%Es<*Vd?h^IqIha6pp@UFTZn<_MI*Pg*fli?eVZ|c$_TL1_ov(2?v? z;pwnh(%AFRr&e=K*6hTqJ&z zB-}J3>d2~1KqV8E;z9zcy5I*NB7S>n!xMsmyGwKv4@l!6rT$rzZ@F3E*MVJHF?1tS zZoypVbTq9_LSIgwpi6oh0cQikF`tU&=%AnTw|(Hk78g~xeW4nQUkD->s}bW)oSCi% zucd>RJy=f%Gv|k~v$}DEtHFNtUoH44Moiied03sUANbKMX5);8hIqnUIn$Mp8q2-L znckv6=U3Lu@M`N=|HzEVw$G!2I$(ulv0n2Fhkmbn9`>bB_vvbusZszL;O?rTzN!Ci zMf{lqFMe915(txWd+#YqVxi(X@5%6HL1I4aKEfQ5?Yk+k7 z;KR0&#f&cOb! z8OqIgHEqd1+$s0Ozn*E)o9OpGi~?F)5F$;PS|R-Y6TPn}sBU*D2!~yIx8K($o#Pu4 z!Hg>?>nOn_6N}(8J&rohW z9z1?wx-;N*Q4Aa?AND@tUL+hCp?D?*UjAH~7eAUJuZL@SzJIevLxe)#00TN|W$~8n zkuU=QD;5E()z4hZI0#6Q3C~5iXCTAOKlEPadzuaz43_T9=3)9~|`M|~#KOgh#n zLj^*fqd$z5KmB{Saz;WXhgIyl$ZSUrM{S(@u*mg0Aprqe9V|-YWc%##2o|_n52hXe zu^&Z;;mZA;Df;bTm5vK`e~*za%{F@u+m~(|3g#H z?g)o7DSS%Ij8mB}7{bxWeFmi$>xyQzR!B1_eU$k8Fj~9Hsj0cz`x%lL;UfBbgB>2w zDc{FncqIcA0-_f_!f-iSoc})UY;v--i_biEF(Pp#0^ z6yl}s*ygg6RXB?Ovet&rV8|FUK#20WnIArM{PJC{NL#*wjtF3Qy6U^X;-712 zTzpt><4K?G2SBwd6yU`{t93req+>cSw|@LpqGAPpB6j$4S-ZmWZ=V@Yu4H=}^3Ia- zZXzH11S(BHUxm8d>_q3XRR?9+R`pXuIeL%~Dd>LXtIH(I*Lx&wd6ekkXgo|uKs`a> zYur2-{8>5hl<>YdzVcxVTW8$-g&x$pv)x7J>7n18t!nRNYH+HplchN8$Lk!({6H@M zI0z1;QuCtVu<{Gc6;3tZj=g$-5-wttBU34`QjZ|Ct6lhNww%t&B4wCGaA?m)CcHXe zEQwvZ7;y+|xyA)lNZEAbslE-itdDoJ=OTaLf7tFaTD6+6@|7pF7=UK)dC!Y&rPmpt zrAN?+7t>?^pvt(*7Q&NbviyYYWFYCO$GHL}$Sg+7M(MZszoPFxy)#MNkCrlf<(N7- z?3B~c8nfv5Y}Gxz+M*CY=C-{Kt50}pB@b;{H-{GGgLl~GK?&)!PiJc-u{Wx-V+3s% z@B1&a{lRUgH%JyT1y+$Cg*%6RrurS6S;r-me28J`h(D9k8Tv?Y)99k-C-hfT+46wA zp#|e`XX(tI*&d6OMt#9*F&r}2Q%5#w_-4#?3P7>XuH703!5>lRHr>(*@=->+hU#O5 z>(-YYS8)ge7RO`bE;Eh=^i(IIlpYE<@&m_bguaoW{YsTLzWGL$x%AO46lCKG%`6!OR5SoH{tO8^>cM%0}@tZ8rOTgKI@S6x8 z1umtYkhc5urCKnjmuNvCzWx^%Wm^1RI1A_CQ{{FLF3-Ui9pnx}%TrEebp?>rBdW%^ z12uNvaqcFX5?(JY`N{kH_6qw28H)F&fZMVDrqM`xY+HZVl|BiC{`ap6cLv(V1s?7hLa(Vf$`de^SSAgp`n_EQeud7oQwC;5(gt^sp=S%b&NWdu7zd1l2 zqw!0LxXqsaR@qjYQ6e3)IVjMj+*9npf9rSJ%9ih02c2O9S~^-eV0ypHT2c}R0i1)e zYKBmr-xYF2kE|-v6&Wev7-!RLQ_ap~G3i`A&o8xn|MhTncb?+07&473jE6+}jG5Z` zF-ohPL)`}>9S3UbSi^GUr1JRE;r7A6T-Yk-{|d5HPdjiVaJJvfsS$SI62Qbw3HL8S z#ek&>G`TATtnHXt@?+ZBYcY)pGa9t)Pn=E_95iy&BoIV@){JVtfu6`6=F?|RA?G4; zvrck!p_i)7fSK7%{-fB4*Hec2l@$ax+lD_9xrS6=AFoS9ljW6bKnXbXY+PZG{j8$ z88lsUO#&P;`UfT(m|FtGhrPOFf2YPj;)#i1ZjxoX!xmgH?;A>-)@EfH=_qqPV<&4< zfXmNfuOjELHr&i(q|tH>r9mTUB<`vr(Ez8%D(MK5xCqv(qR!>&aIbe|u~l+Od;P+$ z`xA;9;8)W&4#E4i2Jk!_TU*V%4(;$9!>UTHyDBVSe;Z=3W#=mJsa`KuezgNL!~M_8 zv{r4P+wRrBB4LK+0d2y+Rz^*U6U#XnJvJ|HygLwF%Mto;gm+bJ-fxeCUvYvxKXtFB z$z;3IMi7jTbet{*gNuA-Cpi1LKlj3&LNwhmf0g%r_dY^g*not8SJnrK&R*CijG5i$ z`6i;cI2^XszE7=;gPl(n5-2rUR(wAWKRP`efZjiM`m!SyPVuG6Sx$w)r4tXT8d`#w zx5W8@`Q?O0iwChPK8KelW;k9p^?eCOzaiS{1d$lH1O&W)pCQ zdTspQVPcjXcEHtDI*1`1C^13`cTKTezbGtC``|vDkqW9>FZ+?|4Gq7EJ$7w#wyv6e zJIc_%pe|B|d=NMVseTpU$ZUHP^>-c{0;x9$ZbYAG_V3r8Al~eB|9YNoMy;`mHVsbE5+04DzPvaU3uHza&BISCsKIBDqaTrNVOa zl#`VNr0p2>`tKLvTPN*sDL8y~eaSFi_nC*1xt4^2;^WoAh%@oyNsnBkhjB&VmgdSl~1ZN;_>5kEQKk)0+9HHVVyt(c?a!JZ&CCMak&a?fy zG54Zu1R*g7y_}CIL|r%iP{8n>dq#$JHGIIgp5CX*6Uj0L{3pV zwW-PVjtWNQLK>mkYb)Y;&&~UuS5%td(pSgD3;9$2c_l#JJARa`jke95&y=-$=~Q$X z33$sCG_4^%mYi+^`E>d~>&)`cZSReiD_+<$r+v@=&%6(^5qs>@x6s-Ss>J#s>FXrR z?9{#*LZvTA%S!By@(b~=<&u;=+J_8dJTAKad>M%o0*qq583iXh>+{U^0NF-0?VFG0duoZ5gZ4)vTvNB^Eo);dZq7)sgih3N zqrRC|`@LjD%8;Gz!Rtku%%1LY2DAvjEi(=3E0GEa97my~!tBZ&;gp1Ow3NKinNMHnb4 zq*0BE7s1ZN`l8G%Y#G0ppMy#nTssz>cypxka`Khl3~Kj0eO{kw{w0>b0KC9~&9qAJ zYmW^a)*$H~Q%cH)k?$%F321UDWE;1;dqt@ck|0-}hQyh;cB}q=L!)$}L`V{YN*5=q zc&lo%y{pG-Y1BGWwx1kQ*QD#=P?sGbRW7oizN3e9PNCMk$Sq&`>vgWv;i(;*yU!jR zS5|4q%*xAn2!s0X~f&{7?dPZq_28=}@DviIsvsVHYaQ;C=B zPVjx5rYmVBx0h01W%TINX28wX$Z-YEfLAtAh+|wJ&96NLxez;M6^z-jrgUgSg#CD0@1kjT*LO78Sm3Jd?gK?mZg#~cIQS}Zw1 zUD`CAg3U!_$e~Dv!q-l2C+dc_rn6MIk~s$)1AnJ*>)?q=;E@0P6T<*cx_{JLzOe?Totv;opSb4dxUKY08#qneM$-Q zs2JOWXol`D$$Cjrn@i%RsYyDbKe?=0rjnS(#cWWN#5qjFKy`KCKeL~;s|*Tts9r=F zVbxtG>YELHVBhM5?l12pM>yLU&|1j<*4vdW{v6KjaKM4Bz^^I0>! zm}x#Nm`LkT1>C;$1WX^d$2(3!u@I+En z54k5zslg)IU=4~Lqh#01sb|Tl3~gx=c$0!sS;r$p`dVl~GY6&J3-n9Bo=H9@zqZ|^ z10&f!fp1r~-y|TGB~sN2o+zI)^QCbwQMrQOY`pU44&J758YtH^i0m;_`_6t zvGFQH(vmP(HXM%|B#IumF^hYClHP7beOUtIxSie#cP^D?>3#p9g$@M3Y@TFL-Bzds z122T_NtZ`Vc(K-17XwVU3l-vzu`ti^we*`0PQ*134onA(%x@?8{^SkJ@GG__U(0Uy zel6Kb)mke^*cxR1J;?FC1NFs(93_N7#K^Hq9~BZy6;oKsDl@;hPwa^Z)T3hiOTAd< zqXuMHsH@2WgS~{i9?~EbK#0dTDzxC50g7UrLUiNdN;BVnIbi<25k ztMov1*6efKBq|8RR^K;QEYn}EEe5EytAiAHS>tpi_}O{yWEnN4wI8#f(`iWsOiig6 zrqZYr|AhH-mF^~rJE_Q#EyK$nGlhHqjZnwdq|kCCK@{g}W}q}cHn&x)C^1s71C9)d zyu9CKq=LYTtxrxwu^5kX$Sog*pVXLHaVH-gjbaV6#ZUGj1^kZi$fQ(KdTpey|G|00 z?DkL6w7V4_?#~-d)lm~~#!+TS>F9_(Znwu#qBAsJNd8;{p>z7$T2tdCWhxIlFHx&t zelpB9g*B?!&XZ6J^Irdq;Ry_~1H#=e4Dhs!PEz+h8V1mj7m!5W%~7qoGF*kEniW%d z#D2*x9-Ae1WR)FvV}=l*ZVZm5JBtps!({!+f#?uyxQ?x+LHf_#Ssi)rIP_2_(raer zNnZNTc3yy>UHxxWfMoe10!m$f!{KQd*P5Zkz2ub-SGcIA^$tw@d31vd7_(5eJ2%4` zr=i=mhH{7{Y#!3gVP3CvOc zNjr1-cFf@4DFRK*P7@{Me1ovJ0Q@3Fy4N+ugi-hLr(aW3!2-}!7(<-pai3kwy*R9P z=QxP(z<%vs!q3or$(Ex72+@gQ5BJ*N8gV>DsPM~jZ#%YzbC*!wK_Do4pu^)e9NAnT z%D>sebm!A3^tBItHBM(7{jaip91(WK^wU-jL29Y~>4&M_BIFy3q^GtOMeQHl{|a2p zKv44FsbDV5BxMNW!fCU-E>0 zPWoXhBOfYQi#Y{mg-5K<8f82)Eo$e*6+>EjKgw=>`&vGGW`$YGsalowlU6IXtdBT@ z?yOo^+qiZ@uI6@i-iYmpZyp;n(JqQ|Zi0@W70Xgc@m;;g0|0b#czA4vq3WXZS7!N$ z@`9q5ov%(vz&2+g5Ms`Vt74A4la=O=_Pg)DACj$5o*kZD1%{Lbb&1T?zr$RA4Nei= z4<|4y0=KzsM<%*97$_A=oG*{zf-o!)oikYuDvE~&lgJN=$l}SK%=w9a!%JYVF+yt_ z(fvtOz!CIP7xnMF2h$ltAH8!OkRsE;W*|Qk^opkbmbn+E1ZGm?s#SPr_)avopHA+- z?4SKrN|J8$P`+PGCTIB}1yh-><*|qJ zS_IqLS}EHvcpwq+)HGiy|+wt1&S8Ijzspxq@ z?lQ|io>i@XfjzjXLSnoc)=NcH>OK>l@q{rE--FOfx8#QaHCHfzZMUSR^Hi6^iuAOw zB$J*?P#i@9e#(fe&3dK1eLRIFiu`D?4qCcJQId{6%*#rUPX~FKj8TD3<;eW}sT~6@ zw^(v2LFKW=?tv2xBq@U$;!RlQ&W~q^sTH8O)Do6Z{q)jN^C4F z?5X>J|9Dcd&ZhmA1loT*=`oYrf4DC51>(byN?|3y#3Y;fSy4vT`+5}hkD$Jn;Llg#s9?>StT!v#z-p~0(&-FXR^cBdgbW| z(x;9e;n=VN`>?rYeVo1l;#whX%gebN;n|Dob(l2qW6qV4Wh9_ki{+loru~%ZavwEp zd=;om?J}}>;<>xr&0%IcgO?;O;KBPPI5Lz#q*(RlI>POT53FnFr6>IBrA zTyYVMfV%tPU054_v{VVy^cW2ShC8frIzyjCnWOnDGaGiWz0<(p>y(+GcY$5m$^eoqCPNdszoY$4+XWH}Xmo+IZq#mZUL+!Jm z2Hg`uTcWQtfVS=lz<$a@hGZ&cLT+iqTLt0uDX92DU&woTWQm?jqR$pK(%>v~C(!!@ z+9)g2E{<%iaksL@?5Ua$b_L{<-ZOIB9#x+4GlUF#92?RP3(7Ym;HX^2+~^IFctv;e z*Pnq&lWk2|kRWUkoqp0b{+K=d8^AKMUbpyfm<(h(ViK4I6!SQLQy-sT@HKZ_D3F55 zs(iCdIN4Uf@Wgps3GKQaZ$Mj&5-|QXLfgZNVSv*prNa&~96-&uleFJ-N1RgQ0XKO!r<&T1PSR zC!fOfA_e3Ctab{XQeU)M2Iy@Jf7d(AACPFsB{WY)*$1W~yZE95-;E4g0FV(?W#zxJ zI3Mbn$5RhsT{8j{q!wgYc$G$$@ATr9Vmvoq*cP&w9eY6qG=Ru_B7Jel{2jVPm|6bmsTK^?!7cEpLLrfE<%eoLY>@85 zb+2?pKv12q`KvHeWu6{|k);UWtL<6jhnA7tl^-n}tSxLB){roa3LL9p)CL;#3m;ux zDD|CB!Gf6O);bksE9OuJ`f>zFVZ6h75V(SoGM52poVY>|QSd z+DjJr7f|^xgZor<0A;R=!^xrBk2uJ#M{L9^gwzvxg2zI_O%(3ElQ*2(9|J0j9hNRtbesOEje_f}991vf^i^hhco)bUQjJCPO%y>|qR>M|#! zA+pvqk3?o>=_Th{xO|<6^^?y%me+Nv7fim6SH7^=d1E-jEmP!b5XV**X8=U@*@_w) zUbJ&()pmb!V6_)%KUG*uzSQ2ZaV$uJ2>Y>xa&*ef+wSXg{m#`Mk9hf+rEUz&euP?K zci|OXgvXn8ARHBfflK(iTDw-Rk&l5LQ1zH%f}dd|d^xPf@?BK697IwDPfbtJw4wGR zN5KY2*DXtFn#dreW@KtT_ApQkITSrMm7k$PSrrW!R)Ef!0A! z51Y#lSXQ^xdkRw&@R7eMC(V=fwS;+XS>p*}c?3yVR&=-cCp-<^dbL(IF`%wj_9pwb1mZc5UD<)j!)LbyIkJ(~-)Q zIH_@Z5R>GS@94x$G8%uKz)N&c7fTCY#J7Z3t37KE_Hv_StM#h-js!@Azp`Pc>=f*{ zq7jDYmXq!bZIE(x2lXt0Dxx0mVPF%TwUPEdKqe9ux8KN19z&w_I{>U;gUxB>m(zQ) zNJdB!VXCC;xBwwuBe*vOZ-x8R1@$5Q80+A2t5Qa6X(O}57q$Rws%c|Zsz{cY`)9|z z4P}dkSl_Ysk^z-7#)?a^0Yin zY(u@F9UqrlLQK?zv8>L+ypCEX*t5#LY0VK#1ToTWl1bGa9lDHhD!z>781#9OR^pI_ z$in$%yJUEF_x_H!%90R+-6mh@`T4#i0s$Y_SMU5+zXpY$$2&QrHj>|z4TY6$PsX7H z;~jeEa`Lq-pKhJZ;MK>z*sv97E-DZt^L!4I{za@Sak|erpA?Q7<4vq_Jn_`$#z)x+ zDk)#fPZ86z;n+j~aS04sGqze~6_vrdkH(h$3pMuy@d#A%XHRgywKxG^K5hczK-F!c zY}tEyRO~dY=6=XA7KUKe?c{11h=fULY+G4XdwoC_xhESe%X*d0`)(@Nb2$@Su!sTVL*xHdUrY~A+{q#K%fP1dt_7m%?z8u}}&)b>Eg5Ax#lbp%H+`QbBAmK|S zh6aKBp@n-k0Exz!hkVK1bMKp^e8u*V(36N9m~y5QR`o|A;j~P7lWrQeA@U%hd&`K>{mG}2uxP;(sYa+&#&FNWMyc4 z?;oq;VU}RmC)4uRkstzEkO=jvAP)@moRY;(EH*W49X31x10<>Ik?hiO7AG0Xs7CFW zD?OK1Hvs6jlU@!%LcR0lS+V4%baQrc)EFYgg>aogJAA3-QM>q5 zwmh>HAdnZq9@Oy<_(?(e#(o9U(kc#cheJ8P-jH9iT=MefOAgS1JUv+y1M)b`mY}=q z=+p5o@KsEEI8m}wndN7d*hNY3XOx>UTHc!=1MI08@$td%+3Up6o`|efN_lNi^D&O# z9lzsTiXlpP_9c<{`E}5wSg^-c3yU+~q@-Jom}Xkwvfw#^f8SM@2;>O(WvQSr==Ya5jDx+q)IaWmw%1O4(Huiyz2fnc&M)``rbb|pVOUH zj2-rLWpcd(saGVi|BOjUQUm>ZEkV&cG@H+vW8PeWk$(4-DH3)A=Q#}<*WsEf3vdIC zwk>;bu6=yRsUve4w2zoYgceOEt<_ucu^2QFLKMQH9lEk9hbKd(j4Ed;U~rY9Kbl%s{#1RLFa^+N4Vf{|jz7n80^YcYu8@2?xE!CBnvPurEL zt`70QVWUgHs}bn$EKXD_%bi~x2YEM(-g+ZPW*I#vVUGDu9eAD`w2XWbnnoY@v*&31 zMLst5bI}?|NZOw*72Rr^2|N2Ua5X?e6ya2Wtr-@rh(Rg(9}a zLwsZ!y^JT%;4Zy}#XE?Eio$~K96ePO@Jjpk(YNIl5h+kIJ+FR@)zh+`4_#Z~Fq|IA zqW^+u2kP=Fns1njY^L0coQt!!f3~-CW}4rnpNy821v|o9M(NAP2HLl(hj4-3_&jhD z^WSP>^0fP(CE0~*8|M#yq8MazL&KS=R)@eFrkok)42$~kAWkOpAKg!`F7iTc;8+`T zlS9-mE3;mQi&%^!@SIG?+Z2l(EHjz~tFUw*Iy6KYzgS;NVr zrbr%pi1+%j2QaCdNrm*PlBpj(6*p4qL6F*e8pGEYgy6X6@i zd8Fem21qwEwFZ2d!RT@_=suYK6R%|dJ-|deM_pMdo3~Jd0|uFr@Nr@e*R()mi|a$3 z>Bjw9#Y&~-6N<&?w+9SB0{p`(*om%ACP=Z&*pOH+$`zmoP-#zEaQ79-lX(kZ1hNKp z*^+VB#$BMZi3Nla5X$IAffo*er!C}pfwJoSzY^S>Iuj;)r%xintq2?X(4f`SS2e!~ zd+$tD)Up{ZJxy!s{5iVV^ed=%!zVBCq4oN$61jqX9YJx7I9~PMVx`oG;P<-?2z`;r zGFYIKDhw1o<>%%Mo;c=u&GIWp<%09O=U;gQNCM-zM_}nmEaC{2fXg=P8ehybVqll8 zVZO2Y`8(a?lFxO)CxpbS*ioFTnkJbA%2M&Uoiw`fmd0@@N3Qs=?0ZZbSZNQ;MSa-X zII380wU!+}EJv1EXV&wh+J_)Kctmi#H0FblpFhz5HG6)D{TXX&Ep$n!;q>*0UM%_t zjDR^Mxm11I>v{dpK#$B5_rQWVcI|2GJaV3OL1n-np6A{hvu=okO-umOW`=E4k1m;n zMuR^iN!U@iu7ysTRg1Ee9VbG5ry-00NaH&~@mwas+J1q1n!^n$a)7cfC6MtGG&+r5BAU86NoA#aPf8I_t1W5dg1F@Eota$932q^;yLB zsGQq$Rv96ViU|Gp15yL<J)`x2!C(^R79A> z$d_noafh@7X5tv4Q-JnCDA}FcC@njkRej8s0epz|)JC$Gl3u9rxP?&WOVSlVVqN_2 zl&H2K8W=g{ONWOW*1`9}MbPWs`H%(;>qBAKc$X*nSqr)JCNQ6IQNl>6pEGk5_|kn~ zpehSCvdlpx$OsWpt>Jsf!ratr#^HKXgY0L~PkPaSHpqLHD47}fW1}%c_u$5BWDvK+ zdU2s@B7|F+WqrEy0qZiWt0w1Zo1MNf{Dem6Vm<{!5*$(Te&tC^cWFu|2?9f57FB;6 zQPVc>nG@)D0bP~*Eb+NUY32c0aAu$s9Ag~e^PU*S>?Bv}rY4}(v<)wSu2s8KiJViC zyln+w%JL|>i*&~P*y_^5B(`R44HM-!)JCMqs;O(`_wPeyN4=1|z`vJVZACHGG3WI~St+`Ek{s((N zgug04wQ$!Q8D+xu&z0v(5b?3Ifh*-7s1exACweAc9YG~?L(dQ@u|8u+b5SzvymT?7 zYQUTI&wo>tCOR+-hvYHQ9g`P8T=Vc}$P0<9>x=fJgc12sWf=mSxX$51+iJi4b|L~e zb_xfiz2W4-QW`Q?jI}O2gOyF)YcMnH8$KJ6rqlZ#S{9U<=0Rd%r`+z4?cn>k$-?x%vf%BK~}0kxL3_)(?EfP(NP{8 zbl{6gpm`<$T(Z!NYEswx&ncw)D?G9v%vv$IA~il(Gx&dy)1yFUR=EyKTeR$ zihuqS<^cHnVz-l4MID<144H`|gyQ#__JM5RCuU2Z0Z9VJ#oq%~2;$BXzFxj@oH|m+ zJYuqaJ02~dsuOMt^@q#Xi|3awFYL@UQ8h7;4;OCyDh5554OC5AXz zEATtOLFrUIjD;E)1lqnx|pH%as>fq%N|WihfD{XoYNNSmfus=lVLJrPUPLy23He@QHP z7P_HmsVa21-hmMam$eQ)W}WSr$gg--UgadHgI(9w(J{N9R4tKh&YukVDiYHfLG{8& zZ&eOzhp}%J3vHWa^|358a3?Axg}NH3_+Z_1y%Dk}=Y2?c#{MX3V-V$TRwpf7TtPslAwu05n8UnsZb|IIw0WvW80fHs*)_x8CmId3ibt69+h$}*-UgkVzWjm$Vs4%B z%-F4gIcR-?W`3Esx63G}_rct)Jfg{P;$81|O)a4te@;Vxeq~9;)_6_6U z#mwc4AKv^t-B9DG>UP`>!S`9e!4RNzMS;2vL~c>`lfKA8H%O}YM1Oi>+6>2**w1Y` zkj)*4KqpfSL7+@IiXqQ3__|*t9vPuu@jRB`;g0$pZj)u*cN6@?<|(fl$D*-72Gg^# z+Nec9`W~`}!mqx0G}s2*sEWHq2^N5>s_1Z!Ht{Y6&a?pk>)5h%xXQl4eCSO9$hY22 z*=jh!JhgIbO1oSa7=IqwLf1449u{*t@GwtOv$KVhRF4|18}w@ERI+16)6`EMiQ6!D zKHpHaQR39Hy-p>2L=_g8p|Dwc_UfmfF0K}nnLWl4#;J@ySK%O3j2)vIhfd?(EPGSk z=FhDV2dn4Mt`LuS0HyZl#_A0&Q@djVu!16vrcLaT_u=?&9e=El4a)8E_(YKo91D&% znNP?THOgFN-@IqhGg?=SgPQ>k(`Xc2Xb17J>b(h;{Y)((G7&U`T@hz+LMXh4v4Mk? zbZ&i-@MscbEEyuVw{nRB3K}vu6U_lF??xldzC-wTa$A+n2E6Sg2)hC`g zTRbRf4#WbKRNo!H(uwpp{geU}wmGO*1xNn^Vi^969e>w|+VUuF9AAm14!c1g_iH1xg=mg=Hz#7y*bY^^$W_bRgL(&}h23+r~7Tn7bd^XKs4t$OM_n#mCD}A2GPI4LKR?f zg3mzECV#x)|Cx$&w}sK>n}O9p$NmN2P4Guc*AK0js8p zJ26k=nU2T7#N*fs5THFUD5<1oLXk2_+3tUsU-3WY+*-&YTk7^KL0}ubuvE)k&QkOT zCb(pR{@AaZ!__x$Qnv4|1bcyh`>PLEQV(GE%jUqIudbGYhcR1iFgl|rtKF5EK(aJo zX&&+{XRCk1)#CYg*QhmZQ)Bwf80nZt zaq5Odb_jMtfzg3Fsum$WP_-P3{*IQOtg?R$Fh`7ZxUi_t!|XW^vOIG;&{H1^Y!q|9 zTXbreXj&C4qNQ3FxRL)Z6`M|pUr1`@TOAQP*emC2LNz4&ptq!i)76Hsj41t|15qi^$E|@ zOg@%+u!?(LRF$q_MBG6p&2Q1yD+zyuAE2w#1VARZ=pO4f3Bb=q{0F-&F%l*>>K9 z3x&l0vijQu_RX|zK}^|R0}6ylvqiHfGO?dHR|QF$nteEO$71Z*Hv6_foq>P1d^Xx$ zOR*?6WrboKGB@2#0EUY)7tz;{?=PqjiH`>?Ym6QWC>XWyXN5LShL1I!Tw=4rBUo$<`U z2kTDjt}pvjuYX&#Wq*ecl^eacv6$UDPZl$msq{%yt3>wU)bxtA>fjO=n9j<0k_AKJ zbYJV_=xL>wyQ=Wk%ckp@6YuDxMlss+2B|*p7FjDgWUbq@vS^w%YYY+w1Tm(QXNLXtrvE_95m0tcY}? zZt>>k?dr|T?^icJu(y9d-u(2_bW2M&*d1!EEX{zN20X!#G&4j4NyJuzpf{x!0;>m0 zU`tIrs55B#)OJvHQXr^%?HATSKLGGvgF}*}96rrt3V&$;4y<}3LkKr@C{9PiYk-zn zGbJ%kWSn@-G-ipsUgqS0tqCX&SRkg^H9%#9vEgM<=nvKce{6rtZqrN`lrb5rNlga) z47IhN{A~<;d#5x7!NX|pWD5Z&AJhCmf`$<~dqhFVv|az+fS-)>g=*JLryilBSjY+f zS%2m^Od}L+LDTdu-BWWNNEqrtznpv&aYnO(o&&&^H7c8YRomjIFfU!PS6)tO4Z!B9 z?u~8?M8dORV6%T1R8Kqpyisb~>5tT>!`i^~GRWxUGsD;H$Q3$4H{kUHN$2xP*POs8 zkV9FNEH;Yl&Ld$=)2G51@KA)(f!{cL7-9C=%)rGgkuK=(7SpMqmqOvF$RJ$EgH+D) zF$m>%*K1$LMM4f3d@?zK^EZL~sLMW&B@`ywve~)%PGEl6%S>YhNW>}U|=ZaN2ni=04G?3@abDQbM!7N~IlUTyB0OGe;w zjQ~3Hk<)+N9A{fCAMNb9Uc0r;W(b;KOcQj+*2U&OT?Kcs1WOl3#7=!Usd|I_KXpo& z$8JS5(>IQ;>1A_s^xP*Q`~J4->9 zcnju-w{Z17*ku&Fl#j$}yl=4j#X;3GVtFXKe>ZClb!}5Qi8HvP*>yus7lgw(dPssP zI!G~IiAElbj0S>Cz}REQ+5O0pZXikJxg~#YFU%j)J&O3v^CKSNxUFAi!7|tT=FZ7r z^&6Ac!X*~nDky3aFh%7{)X>xu3@{2*W-(ct#|0>4XEA~RneOq%M;XHx@Zmc4^AQrv z-E^D@2}Dvp@W@jkNo;HQ;Fn1F4aev=V~P5>uqe#M;xYuc$-ui)%#0pyj;bxdp1OZ= z^bh!YICWZABaVuc5A2~KNTRLC-3Er(XEve8o8iowDRbfB0xfAThg)-B(NOc-P(tAy z;BQrDSUV-_=bVdnIcl9*UuN`jLO5!0UFj8e&ck7! zlDo4v$~1eifwaUIU04yvDmWW0I9|5hH-0&IEu_)6dxm*h>vE-c9c|T&Ua9mJf^Xd8 z6Ur(jnc0jxvF9}`+~9B-{pHK-Tp@Q6f$AcnDtGtJDiJrM7z{rcl?@=yj8lKftoX~! zrIc4^+6Jz5L9NRgg>mZKjJw9&cxH*d&vFtnb8nmo4Q%}*CRN#4i@a5vRuy`prrnag zf*Bx+Uz%;%`E1mjP~4IxdT4H=48nZ4VOAcvkXD&1Ne3|ouR4cT#;wpk3Ug;Ap|?#E zx^K~?ifP~Nl()GuhlWU;p#OiwCmO@ScM3Z(fcIbi4Ddel4i(zdBbQa{p{wxF73QJb zUD!eZ4;O#k2E2MhLrWL=TcT4VRjW=tkg7;&6pr_^)J+bRGctz+if*`7+I0tY0L%T^AP?9^WuMvTSgn zJ(l#A$$K|&u|tgH)NR7nO@DVuSWI48{oXi?|9{|tR!n>=`P6|Y^G9QWk_zbCle(Bo z@Fze2hUU-9XY+r}r%ivQD(MREQZj)za%7L+8HDE2^zv(K<OuP5OFI@$iX|;}tc`nD6xYbEc7DtH9z3p%WrkQSd z9Wl@y3KKhtV{SkG;?+OdbGp}wxVT=*NaV>P5F%%PRqOUtwD&C4pNnF*!z7}8+^nwt zfj|ERaTA8KmrJGt90M^jGnZ%^_?xr@+QGxFawe7uCB|eQ&s)XBqcOS@sIg; zxxM)HjZ7Ygi!}KFe;+UYc|p|+iTP)_P2S&LEK8d;e~J`*&CfUZtF5ye#0Q+tmdxN|K4>_W5G=@sIa2dOuIzC2VBTz4wlIGVprLh;-D7CBqLaVrt zQP{}1Kkil10$G`vnyKk-+YJJWmNmJ?k;r9Cb@010=1hA*w zFasUnj_QH+IwQYD|}45Lltvue|D?FXxZjLcKN_x6K$EF6AG~N3i9T(B2I4mp0n%jD7-v5;?PK8M zV4?A;=^blK=SmscumfeXZ6RpZdBs z_)BxpJU0-@!AL9s;DIF9YlYH`2k? z!Q#&aU&?!{J?()i3fM_|D~$h*ABUALJ_YFdna6Xq#+A~g{v2o-V~=2OQgQ{Y6x=Fwcp0~#pvseA0I9(Tvct1YWw zns$G&JczMRp-yN3d7FJTnl!^X;Hf85+S#k+vg=n0%(?`2Ue>F+UDg4>_4`eIl9$u6 z04b~xbsz)_gdkzv$b=xwq59n{>wtBpvwo}2r@n@xQHNW1v#zgQvIlNzl&fBch*bM{ ztMP1FJ-%6=9R4TXsL$l*sZFVja)@T0c_4p}RVkFt-lR((kc$$GDoe}{Kp{<*+t$Mr z$a!v^jxk-p{m?g<%dlo%F8AC0MjdNE)V)&9@B(sg6SY*b?s^S|PxWS_9^)^&zFUG~ z;d#GrlXc&1{Yy$nJmqH7m)c3J_f8W^Z58vv`&Tx za6%5v4tm-*OHzY&qP-UkfQ3ruDkrdm zA-=e}C4(Bx>=~Df!zFH5M)4QHLVFyRnW1Nk<=x4m$7toT1Wav2m+kDkmbbK z+Z8;)nHUSO_^d*MdQ4k;X1Z3G-7#1W%5%V})aTQ$Q8Ix{zE@mwH9!i=0uc<&nU*oo)S^t2;ret&0T*HdXm?)m(iXmsQc^)8vw57&AUT7qazF{7t-~!W`X)DC%m+Z z!Qj!(szQ<^2i>Af&t^2ih?D>oies!$*yxqIovKKd)gEb*k37X0k$+WAT7v^^g@nt% ze$&GtdhqWZ_8S2(+Wl6W6mq)=$~o|5N{yrT5NlV5j)(1e%8q}e!ocx>9OV{1D1@AY zkGjDmq!N&mGFjDMT2N`zCcll561z;f^n0N?pALCW=C@Ki{q7Py(C@O}KIlGZuHFET z2_a)fKKd*pz*)Qx;^*4+Wzas7LRXtc$JmFf2FMRB;0LCciP!4Bp;Ja`zWoGzIc(ax z3d}8kH#1$5kJo=65S+ezRz2jMZWm+YUIGN9663ZqK<70lkUzd^BnDNY@XmXbBjzXkHgdQu-H&^dfhlYQPa`xi~cl6Twuy5K&O>-z= zJ=X`dn7Zq<&U36k-;@qf;f3^odrZ;vjH0!kO_1n8u1k7pZm?vHmG^XY%ud|3(N3ay z{}N*YhOYZ=XtujeqzI?Dg5+f$X*FQnEX@j=KtaF=hcif2xy>48{df(LkzBYP5CjfV zi+JNA?m&O_re2QGGPxR+*gT%<){tE;(yJ)3%S+Ge6@UxScw3Ln@*rpdJp^?#lq1>! z%v1a;>hXQKyG7=F5+N zy!!Urf&S1q{2ZJdXR`sy# zn_bXooKl3cfK*(%g0TKPuIh(5E%n%QABVC4+K{>0&CmtCRYW}?FJ#hn4xZrEkfl$Y zF7<8hhkbB%S1xZxun4wrR`pmln*mRP6<4h&IwaYkg|Rkn4J?x4WG@)dnPRnT55;8# zVXl9gbRb%QbA}*lptu0CVDXBpJ(R+M@!6^YK!^E>Qx*9=4w`*+dMay5ufBtvm>=UmYvMbMLp;*Uek|1)|p)2}leuf{!> zRM+zn-c&);MS`MSfI0-Xw+ldxzPSuOq_cm>-Athe6j*=(ZP$MNSKW8voEUPu?g(B& z9rEyZa5r0=ue;5rb2k#6kpR2FyBY8D6z??HY!DE3J2lTT7Yl)5jgw+`$gwR|%ITVN zqN@eZu-W9%rViAN?LJ2%;EU8yK&^OleM60Sii~G72sZfHBC2jjyHS(9osvkB|`5P6}fE=zwO zV^a8sZSt3A-2o1!MPLkJ5Tl1&6CPb(ZGkM&9`sy*nz*@cvyRdkEa{MAhF(--QR~;P zPGv8^C+f)Xneaimruu?3i~T44(l39183|Pq=}ciY%~((;daU~QzoTy%PS)*Hbc9P? zlj{%zhA6`u67m3Teq};gs!+~k5avT4_T-pvyy&jHp1}i-+8I0$0ra${onB@s(TwbD zHQ%G=J~ffz0LM$_5abuS6Pw9b@4AuOu*#!_^k{4Ep*+=ty$=EP0oJA-Cz5~e!Gq0< zYk@`avtVGh)H^n4rT63Q8bB&eT9ioV*`V;S-nUr`+=TfW<1lL#)K45vX00MUS?kG^ zQtO2`SGPajd^bs4T+KaC<}IEU?n)B&$j|4k%njtuq%BE(VRa;Ly|Fe?eHt}^I$)1# zNtOe@W?3-OrqaL*exPVtOtOE0D!2ye*|dqhq620FF-WOfg2ZYC8E72*rH_5;Du%n+ z(Cz&Nrlp@oM!^6y-SuBj)43t}(l(%^Sl=M7zwdMM#0-4VR402_?2#lNRS!jZ9NsGm zM)p+mVcSu5ZFLAM&B8g3#AP_DDx~u+ZO3KRV(a!nH&A!F^QfBt#7KY7O)1NuNU{37 z?E~r4z+QR@-8I5CTQw>)&|4@FGs5DpZpNS*Y`PDaQ^jUo1xz)rxCw*-M?n=hnu2Bt zX?A6&pnA~Ns0$3szQ$%F_9#--IygT43~0e-FjsUnsR1`lT_TMFu~6f|bG;3oO+Z6W zntWmCTl{*Whqo&n;GTaPeW%KZn`ZT!q_ejgq9R2S<|~JD16-{Td!Kc(&;p0?ISZ%3 zFT0r1{ETUEwH|jrM4y)kf%fy)2esHRjJ_5)FJ{xtkB^Jbe(h$w5UPrBN&)c`+)4gx z<1-+gOhTx%7vgXPptBF~=mwJC5?nBOQW1&Wf3EXB-qf}GJ_mm^7Kb5j$a&a2#zv>V z%V-aD$PeLQnSbv&m@ZCYT-KRJIciVVZu{Zkc@)$V2Tpy$yN zuLTEd>omGoYEp&4su})~z@aX2amWK>e76GjI)9@`Px~^x0cHal((h{xA(?)Nr6P4R z^7Z6GW|_M-iDgY;`p9+4K-1`aJeZWNGI^$uH$RR%RAhwZR-Fg)QBDfi zBRYdOX*f_g#G8dsT^3*}*nM_M`EK^%yC0MH)$p_sB%Lp)NXvZ2u#@(O`k~+B9dfB; z7WPK+EYEQ1tJ{mez@PsBh|<-9Wo~41baG{3Z3>t8wgVCaG&4At4YvbBli)4|f5;Ji z*H=vCB~+C-iveaZK=x@}mF#XFvd)^hRLOn-K~O>r0yHj?m2dE`=pWNPcYqWvRm$bE zERZwZJ*Q8f?!gxlQAQ&CWBx4;oNOMiRv&)( zxMCl#$vgZck7H^+viiw9!QZcwl+%P0_!pl=G!p{9eY>ja@xJOwUyW1W4g~%~+Tu`= zZm)jc)x&4iW~>ujmg`{=_k-IV`O$fB0HC>vI}s zdB)9yavG~0srUH!hu>LbVvul}ITu%GhW>z!Q7kCSd2XIRR((Z=V^!AQV6kE#1u473 zTDcqN95y6t7HfA?&Q!1tMY~h}-H@&)Z8zT6?VUFywTBT&8fDgv@#$ER^+>Ei=xJ(kqgfg=^HGR6J{Ms40wyuFL8KeM4|r>>y*EM2 z{WnAw*@d6q&qK=ay!5k3Z3aQ=j$_@mWZ(5=1yMCFr)jE9$w`jiOaY{J&-VdLBg$nO zn+Ka;=G(24ET(y$`jcV!18h1}MPJ_Irlcy$`$cqMvqXq|fsB}@fB5Y%J~0DBBfI^L zJ1?O@m_*FFyLxbIB&P^%>(HYlw}-n#il8}>UaIMEzK}KPn{ePH|G?rPu#0=98 zod?aYGpE6~oIBr&(pw=ZPh7yegG!uwAos;^U+r$@5R*BT-j3(v$(eI1liZ&93YJT;Cc)K|Xa2()(nT{t%3~ng3P3#+ece2% zFFS54jz@stK)&_ENb2?l)U!OLlBci7z5Z50qsY3jqI3Twk{YuI^sD0Cd3=CWWol{h zxmbiJfxP8*ZJoQC@+Fw$!yeH%)scf^oQ9J_Ou)v(@dN^Re?h*CMxK0C^no0j##V}B zQy^WaSe9Ko7IjOCmdrDd0nMd$k4xpD*fzQl?UqacW~BL&350fT!304u3CR+OOFFiM zVAO5dOgp5yrY?qR(9vT+$jk?i$5JB+@?bx;C5CypfzmbK%W80e=z+VMxJi zU6JZTe?2aI0tw38uF1$Kp76dNwUVi$dPMXCKve=#L`(Bk^0EToQ1u&Sp@lYc#Af5Fc9LbE! zgsOU$%&eM_oSza}Kf1^Rs|a8B;eY|k-855Lf3aRZ1vCBfMF2k*EL}H>1;$RHMJEI@ z68z%WccsabvFI_=w?I-ONMA^zr(vuPn(81=1Egz3phS!+i%p~4PN0@5$pCeNIXUz= zgb6Q1V(pzk%bBn#LGl868#Q4gQ44xL?H^vbf`upObwr`8C2Fhaw2whSI>YUp;7a=bij!6GcvOe zQ!;YEFdqj~4LT@MQiErd1upv^P}b9VHUrP3Lg2Epj&(w9>*SVXK>*QFA5^tN8XTarz?jJh^-H?1g#xJf+e|* zg!fPrGei^1G>VLzt1=BifhH@DrHzc?ILBiwf#Xh+mw61E8fPpVFrF?P=yce^e@TMO zLTjfM4$gJM2Ca@<5Yt_2&8=DXkxzTl^CcFE7)#=PDz_?D0aSfN`+*R>!Ml}RV^mZY`|IAbKN|K z%~+ngW$tTWHQ>_L2e_R29*S}RfApL1_d4J?D28wvA$8XJjJr{k-FEhWaBOf0J;5MG{!Ws#T+uHgAa_DIAJ)D2%y6A zbjAh&#pvG{iJHM_1$gASj*kN`?4tS&+y#yjYT6m04M-HOT%IEf*P-GLe=|i1>n|uA zM6>kj^`&6rC_^vQQt~fQ(F$I0*a1b`tqxtU8qF5-kc6&z>aq1DPJl2nKO|8L=(wrb z9D+sVI}(nG3~<6;Z&B&YWioNCmQsVJ4W{Hb%d{K-wUnZ^G~&{@a1UC0)bq7{hgtv_ z{&Dz|;V>r?V+eobx{Q-1e>Jfh?kA8Z79;^{_SLcL$7)g9aa!qC+@4?YR&ng1_*x&P z10byYd=0#ypa)fZdkqW(;yGDOdq=~2V9lZaZ?*Ix+^u}U{@G@*1_HUnxPNOlRkQ{ZT6j#{xDvhh3P@NtQd2U5rrBt7~SG@D3Y?rMnDDe_G_HGSAg(Oe>+$ zgbtv+L)>+JJwB0-t3R}LS^YsznqTmH{|3KRC?9*Il@_(jT-YLH%KN(6^;LUe!}=8) znhFYA9;43!T)3b(>eg5Is?%5~LJX>t=?_9cETX4i%8X(s_L4){r>>B-@;9Hg~xqn_LIrbbF0 zAorXPd%ReM!%*B+e|ifa-sJs5-H#K9dCfITGeIJ-`1NKwB3_snmPG5u#S8I4@8dAq`X*C=7wCgz&M)#O8sVsD7nSW%v>zLwQdjfoZo zoynXgf2kz{OI;`$J-azsm)u^#NWH97F69?XmpDV%9+a(!*9!*om6cX1vLwy zwtNAB(Ku+;X9mQH9h#$r(UJ9*s9t11OfJgY4LP0G37lZLHf@pD=&QfnIT;s3%p17u z2NvdE{Hhg4EWH?lkPx{LZVr9olU^zcD#-U2e_zHo_wh}Ad=Yz7JCsG^E;yk#cN2Xm z#2N;f01GV)@ZLgq&;Vab%&?U+biza)Y{{f)vhnHx3-36oo1@6K*wCuFYfw`!@a+=$ zy@CO0Q}2kO01%OQgCPN>2{$(ws_C7M$EL=n7eCRGs_$_`RYGq#n5h61C&A=glRbj) ze^***MA1<=3e|I044y;JV-rT$!e5Uf7Zn!DmzqDgD~>}kd|p(XD7;O)bi?5@?9%yv zx^>nC7j6_#>XG!}t?LA3EnMi(?N0A)F|4D!7L}f1ONmcF{8)yd?z^9-q!@%U#`?>%jtw+#QbF zbV*)JJ8)7{jzyy4p&I;t z5cRE@wqbz|@4p0>+6_Be!_L8;9~Ah*kNVZPY7Z^_s+by3+S7QP)X7`e7&)qZ5qe2z zSq07^XPC#anY7)ww9ocq$gM&~e^yzZzer~@>X}6%iR3&GGxBxy*&X>hi4w>$uPM%+ zdY1d!dBLpGnw_~13BCxT;x-$J^cB9+fZ0*E@IeJgAT}CD!Y}PP=uDmR?^~>6EP!%8 zF}+o$lSe&w5&5b>&r59B_EXb5k@CK1?<#fQS36M~@>t4fwj{Dy7`&*se_ff2dIsP& zWlrym!^dI~bFz2CAa!r==!2flRT<4^*YB-*OJz}=lJKRN+vhn(KqA6Jn-9g=sv_P{ zPtLrU8HQp-Db*!~1N`vU7D~TE6FQ@|IJ|Xd>djGg>s}Gx8L0bR_s+)YtAQAFCr{76 zG@3E)_DIbh`@TCUoHq5Ke>&w|^{qub>UV$?99fe2_bM$py3C7$bx+$Wj<48S@XT`# z2bs8w+Ol@zb`4|>WaL{akY~$~Mebd`m#-zXi#wupGc_Jba|xFeY^VkZ~q|gis63EX>`42Lp;jURSf+V`AfC! zr=ou%QrW_VT|P~5sXuS7{tkcs2OqxK;$?1Rb98cLVQmU!Ze(v_Y6>$mHy|(|Z(?c+ zGdMLfmm$XkMSpE?+sG0A?q9K=dK7AHxVwD476BYvN!&ViYAL+~ltV#FRK%-9>PX6t zi+;PW_gC^CJG0AuA*J{nv_)`8&Rp)!J~Q*oGeiGEe9DNAf4aXH+mjc!G5OS-_~Z@z z_vz%96DAjs?ytp`yqcYieJVmSTfpiBpUhS#Y6C`MPJiN5&?F_Z?TPp5Y&82BHiD&0 z&`_iaESfD(M3T}lAhU-PZ~FG5$3Bk8D_j|HPP--ES@#5g{^B<6&KULDunNAOMaT0TfDesezzv2Eb>{@ zttqo@K7TMHzyicjL#^s9F6+Rb~`H{rSrvWps*SQ7Kr%4>? z2ian+jx~0%h^9%H4(u}fItDVD7>{_TwK)MG5@8y25Ato*Gn~cL2L#nqAMOxIKi=o0 zwKj&785?~Xb!*l+SyXkMH@m7_7Ud@*(T`&qF@MhN;usgty{s;>yG>52nymKaqAjYD zj>ci+)7WR;<%*OQsdo6|hGcb4n*DCKDe~nhzR|Ap(ND9#xRJx+L|Ur>|8n1V7)Gcc z8asp^N~6^gq-e;eq6b6}Qel9A`*xAjc-Em3-n;-X?V>h#QBLFHx)ou;h zW{&`QOYU+avyS465LJ|mZm-MLAXzcbg-9*rs{!N;Vl_382N1S+B4FL@@1aA7S-HeWF+U;8{C~Hy(EhH6q0a;G%I`Ux1Hs5!EGe0EwgX!U z>Ib0)0@FsQD3?%zJAt))#*PKOF$LqPT`+z)zTpnsen zFys8JloSu91&201R@O$fq$6k@QK@u1Fh$^N&b>XmzPNd(eJ>XT3}V}ITJL2D)Fd>7 zJ)NB2TwhH4Z$lyQ<7d2lb$LCxzUjRyLWez`eEIF=bawvkqJJ`khavkXUY>ieKU|+* zk2rYAkG!*YlaA%OeL@at8$aXzbARv6?FhVlkDWLH0F=#xcEnEEvL zB#&iFS&*UtRZ8H|VU#t*M)43LQb*I|umW| zlHmPZ-F3Dvq;Y>D#R~S&KRzOd7;sn`1-%S7E{C$sMjHdNq9`HBvKF`gP8BiExk@R3 zROdspb3>jPy$DgY%Qr=tO9}WeN-?ZN=t0Z?=->t!U!l4eNZW|Uk!CJ>>DI+CG)=(( zY{&*Uk9`g7AhHjO#($PRo@iJZA1u|nF6;ApajB=I>rMzZHi^)a%pS|A)cYsP^YxI z(6_Ynue`35lH}M`YTsNAoq*dqZB5?^&`iN&NEj2x$fWXWU4H_?r9ixvV_?4k?-c|4 zHLa94U0Og+KnR{5x03M~X%r-XlrZlG*3=J0lYeEkZa!>ofK^w}N_`%Ecf`5AvedG1 zwUYa8vSw%=xP|$SN5ZhjpcG3iz>zSyzeA$8lj-dC@_aVAAk(*#tE)bK!qVGN!(-tM z4eobYvp(SXz<&=-NF|;4MG4<#HQM=5v}<`ETOiEl&^@H4s@HmVC>s!2{bm)833bY! zR-*vg=a_M?b}A_6V2aSDu7_s{C>rLhFZDoQ1T-{H@fz`<`P1Dc0jerW-B3wiCa&hX zubd3lKU5s5qDA!}cR48NykiT{{&8fwBvA2z0ujo0TYnb|0Fe?oNeLsM6=r+ypvzyo zu-hIC-fPhg?ZtivbqCeGNLBD#b-%4@?8?iwt~MKdW1W@C&K62lR(Ct9D1&}i5=)n( zvMi4SFh5CR6G3iZUCFTnCd zkiv0hn13?&OhhUz#Dd8CyvUWSWi66DA>dI#TL!DkPm&UsMU%;&A%pnbdjPl~Es@hf z6+$|0^X2ynr|x=V2I(WA(Rui*C1dEc0y}>J*gxSx%c9N~ZB>KDl$q1NXo^v98imDD z7R-b3)fk#2#NIi!F~>p(B#9MedE4T#a1W`O<$wR+^|2%Mvdun6IvR*H#=)by=|4s% z0_THH?*O3?2g=5DAhzB+BSHqd8bD@m4>C09ZF;!Z)jfNadGi{$aefy8@=p()WRR~4*8NTqaQmr1*0bO@38MBeunH42G7%*ChBD#C| z#edgA0To{SZO3Qiw~eA}=WH$gEuRAKG52&wN#g|8H!+r>?1dB>f&NGn5qO{Wl6!!i z4(D`942smwO0CRu~ zX`oWCN&l9Kc=DDg@O=Z{m)$|EL%?c2>wk(+w@*LvaiM9Z*B$X4;)QedNNeV!nBjeu z^f%y*Rds@*6U26gcL1pr4+c(4;Se9O?T!?b+g(*liaDIPHDsm7P^yM?!ze!%PPxij zr7QNkKGEvK97}eNV@)L1jYDvlJ^_;~cSv$ET-&9%oAE$VT`R`NmXZ-sQr{oVW)r9lqOOUADYk)Y8 zFfynxP2Y>%DUJ#I0{}gJR6h!V?;Re=Kj(|DL?QIlPMQAQ%*Bwe^W7#}EiJAYA7-!61K za0pNkfDHVGMCzA7xGd-Ho!jG_?Lk*7(_`hRDiML0H`B<9{Bh8d@yJ}p&X~TRHk5p)_*FA{sYnQC{8oltH+*(q(oW1w-DEoSSy z!KPmAVLmVBB`Ev_Hh`-Zh<`_Y&FDa3VQ9y7k2ZuDUebW2h#w_{+7XAL$_5t2)a70j zBB}-aVV#4fuyKyv2{d=BYOkVRPWDu&H;cO1$*29%G#4nxv~{1qHep)q(OVw@OcR&t z(*%g%)J(R|Z{EE-yS^ZkA1CJ@W|ueDL%!pbnZ?=N;L~xS#uEP1vwyCSqk+DM7BhnA zvO|jcNQ-AFP-+biXEMzoc70IoCgxUyF4cEpLv{iV zGirJ$RVzN63I#Iqp5Yg@ukmWbK6{jTOooKI z5g|i`QlgBV+dyt5X|OLE43*G;t~n|VDhf$O#$>D{&8U9Q(fhmay?fu!=e_>ntmpYY z>silQ>$}!-&iQOlODNOxi;YFDB^6t}xM*l26I>aqU2$9b@Xq09zFF`L%^kLH`d*Zd zuYGr}wMMEr_-^FNR+A(%Z&xF3v2?(-@7$3eu(W3EG%35NHE3Ek_q4b27mx7-oyQ(p zqe+OrWqo^O@vE3S5A4kbSIItw!yTzj`HP0-o8OJSC(~;=iHbKq^ZWdeWbuq0wN7zC?^oWJ zpJ}X;Ti7*YyeYl0OI*&MzL@tzVd(l^tv^oZ-+UprL_A1HRpYnl$oQyKos>O^IhpFG zy!h484IN5J>kdjixc=2r|KO2HuW#h>9{Yz+YgwI@kt?pSdR_`|?^vp9O0vrMCasR9 zd6#uBt2HX?-rgc-Go(ATf8@6E4YBdxH}Kv4w?iEJJfP8|?2(r6a3J|c%$bVzWoMlWe74p%(v4ZmyTz`Qdg9T^rw6=>u1Ymu zN^X9w9`)AG!_QRFv)3xZvpBc8s`paeszvrzAMW`tX`IRtQRXvsRR^%TowXGVxmDQ`NlRpl>SGS2uxw1xYfRZGvF37*1{w+FOH*j0SWXrG_ z5rJJ(Lxvh$@8j;PKDNFOQwXop^w>uI7#pmc_0}z+d@)yA(qLWgfnOr;rO@Y&@AEE7 z)YdA%ZAM;qSf?JJvL`-3ZD2D;%Q>%V8$T@YL}ZegC%i+YHNbFb`Kry&iY~aU9V*z3 zMJD$>2p3loEqN<0Y2f<9WhC^`>mMdwUs`2%j(>xkIma)g7Azg<=)Sh+jL46yNv8CH ze&pAPq1e`<1zu;b4UA<58*1Urt*~$8eO&Q{vGKO**!cQFS(k?Ude+Zv<>VLS-&^0! zA8ssGanX3{(x?{teC4sk0~%4zkH0UI8wuvVC%5mu+j87}%qSMIR%rK=FMeKJJKsZ*E_p9+6`c_4hn1_-W`wY zdlQBE!qC1K@d*q1zO+v7JX-|bF1Y#aX7fc{s_nXBX2r!TXFT8bR%MRtTlF>SL3@*9 z!M@<<-08EI?g>yWJY!ZFyRlhDz9)B?cyff%ns4tKT!U)*i1LhXUxPW)XV&win8)mF$+q+D^HhneP( za*xWj3U70@r|S>DFP;A>iK|nV)l9ordKF%{U*_vl(l%_4j~`F!I?qbhg(YNysW@@g`hgbLpnrfY3+Int-A9pJoo|CWlm@7%7OdDfp( z64oLmqB$Ji$IWXqqKuXJcUs|OwTJUlyQb77 zZ?Bi6CSUuK5wy?ek>t8Zk}jt%Y`a$!8eZZ6C*D+)J}6PJDR+L7&3KK3cZtx7!`^R_ zRu->ybWG|SE{x`Wa_BC5^Wk)CWqzr;bFb0tZ0ETx>gw@t4p=|kBk^%S{T}YU*wirU z(nauqyw|~#ehcEGY17Phmx&8cG1&E6+oCY*n{nKEo6z*PVGmP^O8wl;()8y)sFdm~ zi^dj(NjP>*Dd~*zQC?jwxsP(;N=||UY@UR?GJ7&F?&$im>XPj>drXS!I!;!-tTN-< zA5;149p8HSjO2nEMWubpKK3d*rbj9kh(xaSNvQR*H+XgEoC#m$z#p#%ebkTF>|0o4 z=P1AZR@jd{gE32u^j5zMQRJ4jNot6c$oso}Ds5RG-hAv!qT1Kvi);dycn?cl3Tv?I zELptrgSqVGv%w}*qxbi~T4CNhW34A;scHPql(yabpDZ_0#dlxVyQ~mvuCJ^S_b?~W z_2jgSV+rxvkdm^jLI+7CIhne*a&V!vV8??0xxMUma7L*i}jlM3a%4Q1g! z+Ur%U-&qfdPg!q~vP1ss9>ng-DYWyL|Nf!8Bn)oLE`JtZWs@U+a?J-3`^P;J&(4@#xVCe$1?Q8(su7 z+N%@jj<>EZ1))XW5eGdFy)>BPAHx+L?ybLVWw_eK{BVW3>P-Dd>sEv!p^Gb1N0c^_ zg_Q5k+)rAXUt~obE>4x%nBXYe=Qbz2b!(*^7wV2}$Ro{70#^x(X4>O&A9?;i&iq1? zNMMuO$T4HFv71{S&$*%Ja)Lhyn?DzRF$%e>PSzbL%u{~8tQmJ< zEOEi>iSB&v(D&`KuC-V{gAFGVKFtxT8S^js!et_*TJ)|ppyLDMm^hVPm~NPZ}9 zkZYBR=+AV~a+O^k|1sihqKBS)^vx2b7~!!Kc}DqIWn*qvfx)51z3olbn#GDM#4BVc z9S`_a?a$4ATl?5m7aGhNn*|||LP}~N1IH4OtQ~D|FYM$G}8n3 z=}fhoDk=Z6%~)pfC;sDaOT;Dm_~P0F;PI+;rkdt6os5c)9gb1fk1*-B%v6|_-yXZN zsOA^U<@xe$1!_&NL?5-+nSXV58o4_hUs|B;kXLZnw!*$VrPB65Se;x^c=IHQ zRC^Dc97^+S>hn#IKKt$YYo!OH(w-+B7C~ksS=XX`iaWDos^3tSmlQ>kgnPZ-zAPI$ zG8z+e|ChSA;6Y_R1JzBhFMk=;tx#6}UdDb?9sU0|)e-RI{$i~z;ip=~=OsAWlf~SX zbj^Z7H-{+UB;6;)v6zfu#fxWfGGu8)ZB`N${6+{Kj#CU7 zj#4K|kn1~ca27>@JUGKwj~cod9+d2|}g z!Hi+>FELpl0%d}5j3AgY421}smO(hAHcY_GQ5++A0yTd%56Hk}Wr{6Fg-%5{n%WqJ zV5}(=#*|?w3by+W;ZRx-%shA;hft;rL&4e7D|r9_Lm&hHz6l%_eAM+f8HN%FN|#Om zNai4pBQR5jp(KgZiYU;4;LJe)pqMfYgHV#*g@VJvc>-4Wn||Oqf+@o=5DawB1Oi2v zqd1OYOc@4(3!$wsfe!2+>;}UOy&#ZzD1GrKf?~!h4h&(+K;%<6EsYCw;3O;JaRO$_ zFpR`VIusx{I6*>mB9Ajmh8g4-4j~ZTJh3c^Ge-rQm@*89NrW~a1RJ5)$$(QNGp;dk z@F<;52*QZR9K;C-XUZ^eia0%m6oe7X90Zo4Oc}^Pz~&n#02Ff&ClFS?V>n0>`hfrd z7=+;*oZvys3<7KgQURub)dY`~C;&mSa)E$xoIXB*Kv@BR6DXUa2p$iizfK@9mOF6* zgfe5N7=cnG?XD--70%`p0_QP_4kJJS(>H!1NVetRa9KJ?9z?4y5$GUrCPm-`L9s2T zK&bu(5FCO;2|AGkfyatx5(ZT9W@1?iVa6^FR%IDW@(_|dp z0I=8?Ct-wTDhWu9mNO8<9l^4cL?D)>B#Gd3Gyu#&Sge4P2uafE`kYxp2;F4>&X45r zScZ~3f@LTLgT%Ek6d+K970x7zu`H!{fJUsmpaWxh5GQdK z@qt;O3~!x406t-?hm!=vv<;(31fiQI5Fk9+2v(|M6a|iqG8XI#n9f3w>|BLlP}WZZ z#9WeMITX+rhS4{SfD0g6$V3o1EFa<&#LiAoGjQ5>0>G*dI0Zv2^C28V=z9Pl3}Y1C zVE7MIi$f$#(mJLB&S5baP9X%#UWg)5I?Z2ki4{mLh{y5(K(IZ)gHeP&JApu1MUN093G;+`Jcy*HFXgE5Ss_3`>^=y{SY=Sq zrZJt3ATXhYF8kaRpe9b!a?{V(8$5`w~R5avV@M%VHdb zdCa^A3$m3^;10rw0%f96#UPzn{T;XuvH}{&Se+y2^H_a4;S95_BVdAJZU)>nSjSHw zFsq#eIRoB*D7ED%2yXCCZ8`HjEMQZ@!kh#p*U}WUB{*hESy)=&h?xZ-Ae4X&_5bG# gcTq#|xUUee;E=FjUq4aMzmo`0R8`etxuxj;0Y)oi#Q*>R diff --git a/doc/bash.ps b/doc/bash.ps index 3b791c37..a2dbc5c0 100644 --- a/doc/bash.ps +++ b/doc/bash.ps @@ -1,13 +1,13 @@ %!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 @@ -7009,976 +7009,990 @@ F0 .54(Automatically mark v)29.3 F .539 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 F1144 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 SF2.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 F1144 679.2 Q F0(Disable pathname e)30.97 E(xpansion.)-.15 -E F1144 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 F1144 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 SF3.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 F53.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 F1144 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 SF144 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 SF144 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 +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 +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 -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 -F1144 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 F12.5 E -F0(.)A F1(braceexpand)184 204 Q F0(Same as)224 216 Q F12.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 +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 +F1144 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 F12.5 E +F0(.)A F1(braceexpand)184 252 Q F0(Same as)224 264 Q F12.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 F12.5 E F0(.)A F1(functrace) -184 276 Q F0(Same as)224 288 Q F12.5 E F0(.)A F1(err)184 300 Q -(exit)-.18 E F0(Same as)11.31 E F12.5 E F0(.)A F1(hashall)184 312 -Q F0(Same as)9.43 E F12.5 E F0(.)A F1(histexpand)184 324 Q F0 -(Same as)224 336 Q F12.5 E F0(.)A F1(history)184 348 Q F0 .586 +(errtrace)184 312 Q F0(Same as)5.03 E F12.5 E F0(.)A F1(functrace) +184 324 Q F0(Same as)224 336 Q F12.5 E F0(.)A F1(err)184 348 Q +(exit)-.18 E F0(Same as)11.31 E F12.5 E F0(.)A F1(hashall)184 360 +Q F0(Same as)9.43 E F12.5 E F0(.)A F1(histexpand)184 372 Q F0 +(Same as)224 384 Q F12.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 F12.5 E F0(.)A F1(monitor)184 432 Q F0(Same as)5.56 E F1 -2.5 E F0(.)A F1(noclob)184 444 Q(ber)-.1 E F0(Same as)224 456 Q F1 -2.5 E F0(.)A F1(noexec)184 468 Q F0(Same as)11.12 E F12.5 E -F0(.)A F1(noglob)184 480 Q F0(Same as)11.1 E F12.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 F12.5 E F0(.)A F1(nounset)184 516 Q F0(Same as)6.66 -E F12.5 E F0(.)A F1(onecmd)184 528 Q F0(Same as)6.67 E F12.5 -E F0(.)A F1(ph)184 540 Q(ysical)-.15 E F0(Same as)5.14 E F12.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 F12.5 E F0(.)A F1(monitor)184 480 Q F0(Same as)5.56 E F1 +2.5 E F0(.)A F1(noclob)184 492 Q(ber)-.1 E F0(Same as)224 504 Q F1 +2.5 E F0(.)A F1(noexec)184 516 Q F0(Same as)11.12 E F12.5 E +F0(.)A F1(noglob)184 528 Q F0(Same as)11.1 E F12.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 F12.5 E F0(.)A F1(nounset)184 564 Q F0(Same as)6.66 +E F12.5 E F0(.)A F1(onecmd)184 576 Q F0(Same as)6.67 E F12.5 +E F0(.)A F1(ph)184 588 Q(ysical)-.15 E F0(Same as)5.14 E F12.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 F12.5 E F0(.)A F1 -.1(ve)184 636 S(rbose).1 E F0(Same as) -7.33 E F12.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 F12.5 E F0(.)A(If)184 690 Q F13.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 F12.5 E F0(.)A F1 -.1(ve)184 684 S(rbose).1 E F0(Same as) +7.33 E F12.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 SF144 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 +2.5 E F0(.)A(If)184 102 Q F13.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 +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 F13.518 E F0 1.018 +(\(group\) id, and the)184 186 R F13.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 -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 +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 F1144 180 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 -G(cuting one command.).15 E F1144 192 Q F0 -.35(Tr)28.74 G .445 +222 Q F1144 234 Q F0(Exit after reading and e)30.97 E -.15(xe)-.15 +G(cuting one command.).15 E F1144 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 F1144 228 Q F0(Print shell input lines as the)29.3 E 2.5(ya) --.15 G(re read.)-2.5 E F1144 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 F1144 282 Q F0(Print shell input lines as the)29.3 E 2.5(ya) +-.15 G(re read.)-2.5 E F1144 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 -144 276 Q F0 2.579(The shell performs brace e)27.63 F 2.578 +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 F1144 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 F1144 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 -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 -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 F1144 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 +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 +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 F1144 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 F1144 -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 F1144 +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 F1144 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 F1144 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 F12.5 E F0(.)A F1144 -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 -F13.445 E F0(and)3.445 E F13.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 +F13.446 E F0(and)3.446 E F13.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 F0A 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 F0A 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-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 -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 F12.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 SF144 84 Q F0(Enable \(set\) each)26.41 -E/F2 10/Times-Italic@0 SF(optname)2.5 E F0(.)A F1144 96 Q F0 -(Disable \(unset\) each)24.74 E F2(optname)2.5 E F0(.)A F1144 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 F12.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 F1144 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-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 F12.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 +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 F1144 +144 Q F0(Enable \(set\) each)26.41 E F2(optname)2.5 E F0(.)A F1144 +156 Q F0(Disable \(unset\) each)24.74 E F2(optname)2.5 E F0(.)A F1 +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 F12.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 F1144 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 F12.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 -2.628 E F0(or)2.628 E F12.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 +2.627 E F0(or)2.627 E F12.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 F14.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 F14.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 F1A 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 F12.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 F1A 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 +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 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 F12.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 F02.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 -F02.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 F02.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 F02.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 F13.013 E F0(and)3.013 E F13.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 F23.013 E F0(and)3.013 E F23.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 F13.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 F23.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 F13.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 F13.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 F23.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 F23.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 F12.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 F22.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 -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 +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 -F1144 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 -F12.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 -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 -2.613 E F0(and)144 120 Q F32.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 +F1144 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 +F12.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 +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 F12.612 E F0(and)144 180 Q F1 +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 F32.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 F12.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 F32.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 F33.048 E F0 5.548(.T)C(he)-5.548 E F33.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 F12.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 F13.049 E F0 5.549(.T)C(he)-5.549 E F13.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 F33.443 E F0(and)3.443 E F33.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 F13.444 E F0(and)3.444 E F13.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 F32.926 E -F0(nor)2.926 E F32.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 F12.925 E +F0(nor)2.925 E F12.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 F32.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 F12.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 -144 304.8 Q F0(All current limits are reported)25.3 E F3144 -316.8 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E -F3144 328.8 Q F0(The maximum size of core \214les created)25.86 E -F3144 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 F3144 352.8 Q F0 -(The maximum scheduling priority \("nice"\))25.86 E F3144 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 +144 364.8 Q F0(All current limits are reported)25.3 E F1144 +376.8 Q F0(The maximum sock)24.74 E(et b)-.1 E(uf)-.2 E(fer size)-.25 E +F1144 388.8 Q F0(The maximum size of core \214les created)25.86 E +F1144 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 F1144 412.8 Q F0 +(The maximum scheduling priority \("nice"\))25.86 E F1144 424.8 Q F0(The maximum size of \214les written by the shell and its children) -26.97 E F3144 376.8 Q F0(The maximum number of pending signals) -27.52 E F3144 388.8 Q F0(The maximum size that may be lock)27.52 E -(ed into memory)-.1 E F3144 400.8 Q F0 +26.97 E F1144 436.8 Q F0(The maximum number of pending signals) +27.52 E F1144 448.8 Q F0(The maximum size that may be lock)27.52 E +(ed into memory)-.1 E F1144 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 F3144 412.8 Q F0 .791(Th\ +(ystems do not honor this limit\))-2.5 E F1144 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 F3144 436.8 Q F0 -(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F3 -144 448.8 Q F0 -(The maximum number of bytes in POSIX message queues)24.74 E F3144 -460.8 Q F0(The maximum real-time scheduling priority)25.86 E F3144 -472.8 Q F0(The maximum stack size)26.41 E F3144 484.8 Q F0 -(The maximum amount of cpu time in seconds)26.97 E F3144 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 F1144 496.8 Q F0 +(The pipe size in 512-byte blocks \(this may not be set\))24.74 E F1 +144 508.8 Q F0 +(The maximum number of bytes in POSIX message queues)24.74 E F1144 +520.8 Q F0(The maximum real-time scheduling priority)25.86 E F1144 +532.8 Q F0(The maximum stack size)26.41 E F1144 544.8 Q F0 +(The maximum amount of cpu time in seconds)26.97 E F1144 556.8 Q F0(The maximum number of processes a)24.74 E -.25(va)-.2 G -(ilable to a single user).25 E F3144 508.8 Q F0 +(ilable to a single user).25 E F1144 568.8 Q F0 (The maximum amount of virtual memory a)25.3 E -.25(va)-.2 G -(ilable to the shell).25 E F3144 520.8 Q F0 -(The maximum number of \214le locks)25.3 E F3144 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 F1144 580.8 Q F0 +(The maximum number of \214le locks)25.3 E F1144 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 +(wv)-.25 G .343(alue of the speci\214ed resource \(the)-3.093 F F1 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 -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 -2.675 E F0 2.675(,w)C .175(hich is in)-2.675 F(seconds,)144 573.6 -Q F32.515 E F0 2.515(,w)C .015 -(hich is in units of 512-byte blocks, and)-2.515 F F32.516 E F0(,) -A F32.516 E F0(,)A F32.516 E F0 2.516(,a)C(nd)-2.516 E F3 -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 +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 +2.676 E F0 2.676(,w)C .176(hich is in)-2.676 F(seconds,)144 633.6 +Q F12.516 E F0 2.516(,w)C .016 +(hich is in units of 512-byte blocks, and)-2.516 F F12.516 E F0(,) +A F12.515 E F0(,)A F12.515 E F0 2.515(,a)C(nd)-2.515 E F1 +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 -A F0 2.5(][)C F3-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 +A F0 2.5(][)C F1-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 F32.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 F12.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 F33.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 -F34.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 F13.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 F1144 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 F1144 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 F24.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 F2144 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 F2144 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 F14.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 F24.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 F12.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 F22.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 -F12.5 E F0(and)2.5 E F12.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 +F22.5 E F0(and)2.5 E F22.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 F12.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 F22.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 diff --git a/doc/bashref.dvi b/doc/bashref.dvi index f5970a480f2901f040c558d1b1c1a7422bc9b0ae..2891246f77db70d4ff3997701ebf5200095a2d06 100644 GIT binary patch delta 5781 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 delta 4996 zcmZWt3s_TEws!Azk^mtjJOuHLB7!2KP@%pBQLD9B6j6L0-~f@3U=kG6>#JJtErP;n z*(jq(t0*%awc@zzyZzKwy*hnp)oO`SwYHyMtM+PVT5EgPIVV_VhVSFsIqUJSz1Cjq z-zT~DOVqEAqc%tCZyhuzT;y~B$>OiAC0)!UtAplhHAx5{ zCEU1!j5d>-&ozDdx_zW5fb`@KkCUesa=L>i>JxI)pM1deUy-Cha=nA5?0YiJLW20Y zXGHWT+d60@Kf2YA{C=o2J>y3%|Dib4n{M|dTX{na-C!cFKNMU{qMHK9Q~oH8cC(N( z9W)bX(g+J_mOK;C4v%VIsqRi3CQ8KcUc6)WUc zo7IJ0z^0=B(Uch8Ec&}-r{pem+GQm|sjCjN%E3XAlq{@v+~*Qma^lc<6Df6}qE@J! z<%wvGt2Wdez)5jQ^+IKq=#*Be$S$#1s>^lQwIOuL4i&FlNja}BM=n>ql^u8_r&B7k zy6ajUCCa#}a4%s--cW5WYk^A{S}C_$c(Z%oJjwd5+MrOtPPFF&C>=D7&q=FR{*5DA{aseyKfI30miHdc%pe(3Hq5TvZbrI~tZg_jjuP?CNO9AWdw*7#KquS@9V75T6E*g;HF0;UerbB_yzJ<6to> z`8()Y%{VAQLr8%|xY$#m2$$4%vs=BGKvx=^&hQPg@+4?jXgnCwhybK2iHUxk0 z)LTNSI_}km)->$8T4CXFYjLrZXT`y?mDdXkkKtsnA*HnQDtWr3HAh0+(6}M;oaxr$ z5}SlYuIaSCWl*X%|E_sBQCIXOVu4f(7gi<5)We0>Or$hIDWtnzou~xVm zp;1e{aJ7#*^(y)NJJIx=rV-862#sj!yhMX^RrjAP(+;os7?5o0R|y8@B^)~rmUqIC zCuFhCOE`5%I63W%BlNl>DwI{OB&(68y&V?k?bh-VYspp|aGTXG$vLHNl|Pi*8f*1{ z{3luYK4&Yodm2QpsudjlRYs~898nr0CHGSAcC4VnU@rCK+R4sUr`8vlN@Z?^K2j%AkmB(?{L-&qte> zt1G`;VN5uGO5r?F;X;STs`YUG^dB^-SmZg_ewz?7tIq9^l}?JQ)=hpqt{ToCaXZD5 z_FX#c3R8K~GBR3Y6*k8?z!f*wejF;_<~uM;C8Wl8YGZP125cjOG7oI=4494sa&`vH z#kq^l#5rzaZ)QTap=x7Ar%s&`S>rR(4`4z#dtnBQVvZ`E&d(#-Y*JZ?!|7(9WI?!( z*cw;W95nnj)?+5b3JpQS*Rjbn;d4aloduDaAT0~}1vY7;<54T@6muo^dnSakH?tt7 zv*PAe7h;tWABREHf13q25bWbwFiY5}p!c2)ktmpiOR#qwJ$45kN=}aCtZHDNWkHxO z6?fId>SseOnhwoIk4Bc24Sn%xc{cPTjXZ1)BoflZ)91o$!ggfCAe!-Km7$qo4s!GM4$Md4-W>I$ zXf7n7aCk0^!lf)17NG80E=}{uE-ge5)WOe!8c4BdhU}lJN+i1s+-D)3>l-`ujOhqu5r4&IF zySE7bTWAOg-^yJ@5KDySknk=19UCN2Kq33m4o?6*_-792PoVpS3+!nLL_^P)FS4k` zFe|VjWa9CFa39M}${Xs|b^%Temgl}bc+A%LcXPUg=DHA|&t!eS~s9+N*^x8YEma(E*|+wv7L>uWkfiJ2NE|}>i6+4mJ z-WH|?(uTqOXp7)yr27vj)`|S-38BiD9zDS;&I(;k^vqgKeB%ot*i1j)&L7?p92VMk zkE3;w5B+f#`};FYkY7mlh~0krF2-aJs3 ztf$dxGl#J;Rl451>rmZ?7Ft=wZ=~pE>uB6{K5UXMEr6yC)=H-u9h|943ZT=M@bB|< z+bvZ5ri1QusqSYZb-vC|uF)0v)0OY5I*xufjkF?y_ui_z?@w8{*X4>Xf~W1)UG$?n z^*rQ&j+y8_QwQDMlez(f9&6%(AL{<9qbK}2=>GYUZmOQ1I?N|t)ZO%<=f`?OUD3@o z(n}G1Tbu5nKlRjhaH;q~7i*;VU*?B@)|L6wpVV&_nEDk=eUV;&#YiERrv&Mpe$+hT zxnFPoeRus>e;U4z5026IGt#K&4!X)j{fSi_*j43NFRR2&;PFPW2C>H>Y$4-8fty1;T}62V#uX| z2UztDLpT0nXTwsR-`EmITxwQEW?ULO-qkRa28FRlUC}D+UhN~FZtUZEh9thHn<2(R zyS&UV4K&;_)97=5sEi{G9y3ke$L~)uoD8Is+7uN>uL?8Gew)uIHXPT{MU$0?Q}}$B zq0T}}eEC0LGw6cp>K`=mWM=qNAeEo+Z}%7yEp(Sh6I%}(RtM5UA^iS%!%hqRxQ!#o zD+YRP18e&lcX;zE#){?6+Xl->dTS(K*UM*)Koa?_zCJ=c?Y>Oa2F>vKD4kCGieG=n zCvqy?@#&#QK54_~_doH8{e5puq>-akvrLEY=ToSy7mGRSJA%I7i{~Hp{f_v(zmDG2 G{{A1}a(4p& diff --git a/doc/bashref.pdf b/doc/bashref.pdf index 6c085dcbb27429a15c6f805be3984e186a242c3c..60958a60bbfe5c88585e8646fc0908925475d7a6 100644 GIT binary patch delta 69811 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
  • -2B( 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 H)#m>XdEtC7 diff --git a/doc/bashref.texi b/doc/bashref.texi index 9ddafeaf..04178bc9 100644 --- a/doc/bashref.texi +++ b/doc/bashref.texi @@ -3173,7 +3173,7 @@ is executed whenever a simple command has a non-zero exit status, 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{!}. @@ -3989,9 +3989,9 @@ immediately, rather than before printing the next primary prompt. @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, @@ -7346,7 +7346,7 @@ to reproduce it. 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 diff --git a/doc/texinfo.tex b/doc/texinfo.tex deleted file mode 120000 index 1d74826d..00000000 --- a/doc/texinfo.tex +++ /dev/null @@ -1 +0,0 @@ -texinfo.tex.20030205 \ No newline at end of file diff --git a/doc/texinfo.tex b/doc/texinfo.tex new file mode 100644 index 00000000..555a0770 --- /dev/null +++ b/doc/texinfo.tex @@ -0,0 +1,6688 @@ +% 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 . + % + \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 to achieve this: TeX expands \the only once, + % simply yielding the contents of . (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 + \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{...} +% If we want to allow any 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'{'#1'}'{#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 +% 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: diff --git a/lib/readline/COPYING b/lib/readline/COPYING deleted file mode 120000 index 7d29222e..00000000 --- a/lib/readline/COPYING +++ /dev/null @@ -1 +0,0 @@ -../../COPYING \ No newline at end of file diff --git a/lib/readline/COPYING b/lib/readline/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/lib/readline/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/lib/readline/ansi_stdlib.h b/lib/readline/ansi_stdlib.h deleted file mode 120000 index 0bfba502..00000000 --- a/lib/readline/ansi_stdlib.h +++ /dev/null @@ -1 +0,0 @@ -../../include/ansi_stdlib.h \ No newline at end of file diff --git a/lib/readline/ansi_stdlib.h b/lib/readline/ansi_stdlib.h new file mode 100644 index 00000000..7dc2ee0c --- /dev/null +++ b/lib/readline/ansi_stdlib.h @@ -0,0 +1,54 @@ +/* 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 . +*/ + +#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 */ diff --git a/lib/readline/doc/fdl.texi b/lib/readline/doc/fdl.texi deleted file mode 120000 index 68e5eb54..00000000 --- a/lib/readline/doc/fdl.texi +++ /dev/null @@ -1 +0,0 @@ -../../../doc/fdl.texi \ No newline at end of file diff --git a/lib/readline/doc/fdl.texi b/lib/readline/doc/fdl.texi new file mode 100644 index 00000000..96ce74ea --- /dev/null +++ b/lib/readline/doc/fdl.texi @@ -0,0 +1,451 @@ +@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: + diff --git a/lib/readline/posixdir.h b/lib/readline/posixdir.h deleted file mode 120000 index 8b163845..00000000 --- a/lib/readline/posixdir.h +++ /dev/null @@ -1 +0,0 @@ -../../include/posixdir.h \ No newline at end of file diff --git a/lib/readline/posixdir.h b/lib/readline/posixdir.h new file mode 100644 index 00000000..bd33694d --- /dev/null +++ b/lib/readline/posixdir.h @@ -0,0 +1,61 @@ +/* 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 . +*/ + +/* This file should be included instead of or . */ + +#if !defined (_POSIXDIR_H_) +#define _POSIXDIR_H_ + +#if defined (HAVE_DIRENT_H) +# include +# 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 +# endif +# if defined (HAVE_SYS_DIR_H) +# include +# endif +# if defined (HAVE_NDIR_H) +# include +# 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_ */ diff --git a/lib/readline/posixjmp.h b/lib/readline/posixjmp.h deleted file mode 120000 index b4d3ee74..00000000 --- a/lib/readline/posixjmp.h +++ /dev/null @@ -1 +0,0 @@ -../../include/posixjmp.h \ No newline at end of file diff --git a/lib/readline/posixjmp.h b/lib/readline/posixjmp.h new file mode 100644 index 00000000..49bfecf3 --- /dev/null +++ b/lib/readline/posixjmp.h @@ -0,0 +1,40 @@ +/* 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 . +*/ + +#ifndef _POSIXJMP_H_ +#define _POSIXJMP_H_ + +#include + +/* 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_ */ diff --git a/lib/readline/posixstat.h b/lib/readline/posixstat.h deleted file mode 120000 index c6164b79..00000000 --- a/lib/readline/posixstat.h +++ /dev/null @@ -1 +0,0 @@ -../../include/posixstat.h \ No newline at end of file diff --git a/lib/readline/posixstat.h b/lib/readline/posixstat.h new file mode 100644 index 00000000..3eb7f290 --- /dev/null +++ b/lib/readline/posixstat.h @@ -0,0 +1,142 @@ +/* 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 . +*/ + +/* This file should be included instead of . + It relies on the local sys/stat.h to work though. */ +#if !defined (_POSIXSTAT_H_) +#define _POSIXSTAT_H_ + +#include + +#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 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 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_ */ diff --git a/lib/readline/tilde.c b/lib/readline/tilde.c deleted file mode 120000 index 439ceede..00000000 --- a/lib/readline/tilde.c +++ /dev/null @@ -1 +0,0 @@ -../tilde/tilde.c \ No newline at end of file diff --git a/lib/readline/tilde.c b/lib/readline/tilde.c new file mode 100644 index 00000000..088ff154 --- /dev/null +++ b/lib/readline/tilde.c @@ -0,0 +1,502 @@ +/* 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 . +*/ + +#if defined (HAVE_CONFIG_H) +# include +#endif + +#if defined (HAVE_UNISTD_H) +# ifdef _MINIX +# include +# endif +# include +#endif + +#if defined (HAVE_STRING_H) +# include +#else /* !HAVE_STRING_H */ +# include +#endif /* !HAVE_STRING_H */ + +#if defined (HAVE_STDLIB_H) +# include +#else +# include "ansi_stdlib.h" +#endif /* HAVE_STDLIB_H */ + +#include +#if defined (HAVE_PWD_H) +#include +#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); +} + + +#if defined (TEST) +#undef NULL +#include + +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 */ diff --git a/lib/readline/tilde.h b/lib/readline/tilde.h deleted file mode 120000 index 6fea2aea..00000000 --- a/lib/readline/tilde.h +++ /dev/null @@ -1 +0,0 @@ -../tilde/tilde.h \ No newline at end of file diff --git a/lib/readline/tilde.h b/lib/readline/tilde.h new file mode 100644 index 00000000..e26dd047 --- /dev/null +++ b/lib/readline/tilde.h @@ -0,0 +1,80 @@ +/* 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 . +*/ + +#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_ */ diff --git a/po/af.gmo b/po/af.gmo index d0f32feecb34a961740f586ba36ed3d6dbcd106e..1b59cac12da920c6d86f081aa2b230675a74ebee 100644 GIT binary patch delta 20 bcmX@ld7g8_5hiv^1w#`nQ{&C2nOK+rN&f~E delta 20 bcmX@ld7g8_5hiv61w%tC1Jli?nOK+rNnr*B diff --git a/po/af.po b/po/af.po index 03840f99..e60048fb 100644 --- a/po/af.po +++ b/po/af.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Afrikaans \n" @@ -39,7 +39,7 @@ msgstr "" 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" @@ -304,7 +304,7 @@ 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: leesalleen-funksie" @@ -343,7 +343,7 @@ msgstr "" 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" @@ -359,7 +359,7 @@ msgstr "%s: kan nie 'n bin 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 binre ler uitvoer nie" @@ -833,32 +833,32 @@ 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 "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" @@ -1344,12 +1344,12 @@ 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 "" diff --git a/po/bash.pot b/po/bash.pot index 2b80e174..3f78e05f 100644 --- a/po/bash.pot +++ b/po/bash.pot @@ -8,7 +8,7 @@ msgid "" 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 \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ msgstr "" 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 "" @@ -296,7 +296,7 @@ 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 "" @@ -335,7 +335,7 @@ 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" @@ -351,7 +351,7 @@ msgstr "" 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 "" @@ -810,31 +810,31 @@ 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 "" @@ -1298,12 +1298,12 @@ 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 "" diff --git a/po/bg.gmo b/po/bg.gmo index 672928e8dc698b3e149cb9cbdc1df4a653d229f4..0d0cae363906e7fe60ea09e7ba51ae03eb66fe0a 100644 GIT binary patch delta 22 ecmex5o9XLprVZ;X*)0_eO{`3fH*d9c2mt_V_6S%2 delta 22 ecmex5o9XLprVZ;X*$os74Xq4JH*d9c2mt_VSO`e~ diff --git a/po/bg.po b/po/bg.po index 330fd744..d4e61c02 100644 --- a/po/bg.po +++ b/po/bg.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Bulgarian \n" @@ -40,7 +40,7 @@ msgstr "%s: не може да се присвоява на нецифров и 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" @@ -300,7 +300,7 @@ msgstr "може да се използва само във функция" 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: функция с права само за четене" @@ -339,7 +339,7 @@ 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" @@ -355,7 +355,7 @@ msgstr "%s: не е обикновен файл" 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: двоичният файл не може да бъде изпълнен" @@ -893,33 +893,33 @@ msgstr "" 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" @@ -1402,12 +1402,12 @@ msgid "progcomp_insert: %s: NULL COMPSPEC" 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“: неправилен форматиращ знак" diff --git a/po/ca.gmo b/po/ca.gmo index 21c9dee93f5e42f6d60e9061ebef26ca2d7553ab..b6dc10b4e9e8e56b472de6c5eb2aae68ea5e5106 100644 GIT binary patch delta 20 bcmezB_tkI1TQPP^1w#`nQ{&BF#2N(vUcLwK delta 20 bcmezB_tkI1TQPP61w%tC1Jli4#2N(vULXhH diff --git a/po/ca.po b/po/ca.po index b1b48731..7b84ffe4 100644 --- a/po/ca.po +++ b/po/ca.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Catalan \n" @@ -39,7 +39,7 @@ msgstr "%s: no es pot assignar a un ?ndex que no ?s num?ric" 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" @@ -303,7 +303,7 @@ 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: funci? nom?s de lectura" @@ -342,7 +342,7 @@ msgstr "" 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" @@ -358,7 +358,7 @@ msgstr "%s: no es pot executar el fitxer binari" 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" @@ -834,32 +834,32 @@ 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 "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 "" @@ -1352,12 +1352,12 @@ 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 "" diff --git a/po/cs.gmo b/po/cs.gmo index d66f89380f8e603cedb55e591c0093eacdfa430a..42ae24650755ddde67db3d901417d4bf63a40585 100644 GIT binary patch delta 29 kcmaF5f%EAG&W0_F=DO^b3Wg?DrpE1dx{TZHbeYt(0iA9LrT_o{ delta 29 kcmaF5f%EAG&W0_F=DO?#3WkPO2Bz(Hx{TZHbeYt(0i1;hmjD0& diff --git a/po/cs.po b/po/cs.po index a4da6cd0..986c4ce5 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Czech \n" @@ -42,7 +42,7 @@ msgstr "%s: přes nečíselný indexu nelze dosadit" 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" @@ -298,7 +298,7 @@ msgstr "může být použito jen ve funkci" 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í" @@ -337,7 +337,7 @@ msgstr "%s: není dynamicky nahráno" 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" @@ -353,7 +353,7 @@ msgstr "%s: není obyčejný soubor" 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" @@ -882,31 +882,31 @@ msgstr "\ačasový limit pro čekání na vstup vypršel: automatické odhláše 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" @@ -1379,12 +1379,12 @@ msgstr "doplňování: funkce „%s“ nenalezena" 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" diff --git a/po/de.gmo b/po/de.gmo index b1ab06cbf9f415484dd90939b789ffe7accd0972..e0340474c2d3d24c05e39d6d5634a538acecbcc6 100644 GIT binary patch delta 22 ecmdloooUN-rVW4n*ew+dO{`3fH?#O}umJ#M{s->> delta 22 ecmdloooUN-rVW4n*bNj64Xq4JH?#O}umJ#MU\n" "Language-Team: German \n" @@ -38,7 +38,7 @@ msgstr "%s: Kann nicht auf einen nicht-numerischen Index zuweisen." 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." @@ -294,7 +294,7 @@ msgstr "kann nur innerhalb einer Funktion benutzt werden." msgid "cannot use `-f' to make functions" msgstr "Mit `-f' knnen 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: Schreibgeschtzte Funktion." @@ -333,7 +333,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "%s: Kann nicht lschen: %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" @@ -349,7 +349,7 @@ msgstr "%s: Ist keine normale Datei." 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 ausfhren." @@ -860,31 +860,31 @@ msgstr "\aZu lange keine Eingabe: Automatisch ausgeloggt.\n" 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': Ungltiges 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 unzulssig." -#: 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" @@ -1367,12 +1367,12 @@ 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: Falsches Verbindungszeichen `%d'." -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" diff --git a/po/en@boldquot.gmo b/po/en@boldquot.gmo index fc7336524aff2261f7ff565a5a9aba420f6685b4..e4dc9596b1c1b24577202e66929b954c44d12ca5 100644 GIT binary patch delta 69 zcmbPuh;!m0&W0_F+)nzI3Wg?DrpCGkrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n6AqK0KCT&EC2ui delta 69 zcmbPuh;!m0&W0_F+)nxi3WkPO2Bx|OrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n6AqK0JxnK4gdfE diff --git a/po/en@boldquot.po b/po/en@boldquot.po index a51f6cb4..1bbd4278 100644 --- a/po/en@boldquot.po +++ b/po/en@boldquot.po @@ -32,8 +32,8 @@ msgid "" 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" @@ -65,7 +65,7 @@ msgstr "%s: cannot assign to non-numeric index" 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" @@ -323,7 +323,7 @@ msgstr "can only be used in a function" 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" @@ -362,7 +362,7 @@ msgstr "%s: not dynamically loaded" 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" @@ -378,7 +378,7 @@ msgstr "%s: not a regular file" 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" @@ -909,31 +909,31 @@ msgstr "\atimed out waiting for input: auto-logout\n" 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" @@ -1399,12 +1399,12 @@ msgstr "completion: function ‘%s’ not found" 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" diff --git a/po/en@quot.gmo b/po/en@quot.gmo index 5a5e1fb4ea8c312bfe40b4ddff0b2d2ba07cd5ad..64e513ecc80c3eba3a3b2bc38c6d15a1f65d943f 100644 GIT binary patch delta 69 zcmdnEjdSBR&W0_F+)nzI3Wg?DrpCGkrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n7&H@0LP^hZU6uP delta 69 zcmdnEjdSBR&W0_F+)nxi3WkPO2Bx|OrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n7&H@0K;?*khE@iqoB6HmGyz`d2G#%o diff --git a/po/eo.po b/po/eo.po index 0f1b4a06..9e898a98 100644 --- a/po/eo.po +++ b/po/eo.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Esperanto \n" @@ -38,7 +38,7 @@ msgstr "%s: Valorizato havu nombran indicon" 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" @@ -297,7 +297,7 @@ msgstr "Uzeblas nur ene de funkcio" 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" @@ -336,7 +336,7 @@ msgstr "%s: Ne ŝargita dinamike" 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" @@ -352,7 +352,7 @@ msgstr "%s: Ne ordinara dosiero" 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" @@ -885,32 +885,32 @@ msgid "cannot redirect standard input from /dev/null: %s" 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" @@ -1397,13 +1397,13 @@ msgstr "Kompletigo: Funkcio „%s‟ ne trovita" 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" diff --git a/po/es.gmo b/po/es.gmo index 8310e0061810af894b4fd3f047aba5bfafca7dac..a9c9aee33a0da5e22614eec7f717ea58d9b79ddf 100644 GIT binary patch delta 22 ecmdn?iE-N}#tk=J*)0_eO{`3fH$QL\n" "Language-Team: Spanish \n" @@ -38,7 +38,7 @@ msgstr "%s: no se puede asignar a un 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" @@ -301,7 +301,7 @@ msgstr "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: funcin de slo lectura" @@ -340,7 +340,7 @@ msgstr "%s: no se carg 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" @@ -358,7 +358,7 @@ msgstr "%s: el fichero es demasiado grande" # 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" @@ -891,32 +891,32 @@ msgstr "\aha expirado mientras esperaba alguna entrada: auto-logout\n" msgid "cannot redirect standard input from /dev/null: %s" msgstr "no se puede redirigir la salida estndard de /dev/null: %s" -#: execute_cmd.c:1094 +#: execute_cmd.c:1112 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': carcter de formato invlido" -#: 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: intrprete errneo" -#: 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" @@ -1412,12 +1412,12 @@ msgstr "completion: no se encuentra la funci 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 errneo `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': carcter de formato invlido" diff --git a/po/et.gmo b/po/et.gmo index 698eaa07bc4500ed02879b42c4fa31e4e26300fd..0f19bee6661b5bcba8cfff6c10f6abf754e82a2c 100644 GIT binary patch delta 20 bcmaDD|1f^TLRof81w#`nQ{&AmWG#gNSZ@az delta 20 bcmaDD|1f^TLRoeL1w%tC1JlhbWG#gNSJ4Lw diff --git a/po/et.po b/po/et.po index 555fb0cc..37a016cb 100644 --- a/po/et.po +++ b/po/et.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Estonian \n" @@ -38,7 +38,7 @@ msgstr "%s: mitte-numbrilisele indeksile ei saa omistada" 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" @@ -296,7 +296,7 @@ msgstr "saab kasutada ainult funktsioonis" msgid "cannot use `-f' to make functions" msgstr "vtit `-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" @@ -335,7 +335,7 @@ msgstr "%s: pole d 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" @@ -351,7 +351,7 @@ msgstr "%s: ei ole tavaline fail" 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 kivitada" @@ -811,32 +811,32 @@ 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 "kirjutamise viga: %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: piiratud: kskudes ei saa kasutada smboleid `/'" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: ksku 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 "" @@ -1301,12 +1301,12 @@ 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 "" diff --git a/po/fr.gmo b/po/fr.gmo index 394e11ef03fcf3529d3068f42fc7198a48c180f6..8f347576c01214d5c972dc0f4f869974f6040861 100644 GIT binary patch delta 22 ecmX?ho$=Up#tkf1?3N0KCRV1#o4Kua8v+1fv;?*khE@iqo4Kua8v+1f76)el diff --git a/po/fr.po b/po/fr.po index 68d020e4..9205af67 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: French \n" @@ -40,7 +40,7 @@ msgstr "%s : impossible d'assigner à un index non numérique" 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" @@ -305,7 +305,7 @@ msgstr "utilisable seulement dans une fonction" 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" @@ -344,7 +344,7 @@ msgstr "%s : non chargé dynamiquement" 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" @@ -360,7 +360,7 @@ msgstr "%s : ceci n'est pas un fichier régulier" 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" @@ -899,33 +899,33 @@ msgstr "\aattente de données expirée : déconnexion automatique\n" 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" @@ -1402,12 +1402,12 @@ msgstr "complètement : fonction « %s » non trouvée" 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" diff --git a/po/hu.gmo b/po/hu.gmo index dd0ce31793ed0e55eb58ae1e4e8179d96a1bb024..9ca0535a4f8f2581c69f7af03fe21cc41b453ca5 100644 GIT binary patch delta 20 bcmezF_1$a3TQPP^1w#`nQ{&BF#G3g4UVI1Z delta 20 bcmezF_1$a3TQPP61w%tC1Jli4#G3g4UET-W diff --git a/po/hu.po b/po/hu.po index fce180c2..a66ba7ae 100644 --- a/po/hu.po +++ b/po/hu.po @@ -6,7 +6,7 @@ msgid "" 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: Gbor Istvn \n" "Language-Team: Hungarian \n" @@ -39,7 +39,7 @@ msgstr "%s: nem lehet hozz 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 ltrehozni: %s" @@ -302,7 +302,7 @@ msgstr "A local-t csak funkci 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" @@ -341,7 +341,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "%s: nem lehet ltrehozni: %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" @@ -357,7 +357,7 @@ msgstr "%s: nem futtathat 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 binris fjl" @@ -831,32 +831,32 @@ msgstr "%c t 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 tallhat" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: egy knyvtr" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nem msolhat a fd %d fd 0: %s-re" @@ -1336,12 +1336,12 @@ 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: rossz csatlakozs `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" diff --git a/po/id.gmo b/po/id.gmo index 858ff9305255c6e5300e453fca595afdfb683646..1b7447fe408d33fe471412e5d47fe16401ede1b5 100644 GIT binary patch delta 29 lcmaFAob&y1&W0_Ff=29?3Wg?DrpE0OMvU7fjF_$~0sxwv2\n" "Language-Team: Indonesian \n" @@ -40,7 +40,7 @@ msgstr "%s: tidak dapat mengassign ke index tidak-numeric" 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" @@ -296,7 +296,7 @@ msgstr "hanya dapat digunakan dalam sebuah fungsi" 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" @@ -335,7 +335,7 @@ msgstr "%s: bukan dinamically loaded" 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" @@ -351,7 +351,7 @@ msgstr "%s: bukan sebuah file umum" 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" @@ -881,32 +881,32 @@ msgstr "kehabisan waktu menunggu masukan: otomatis-keluar\n" 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" @@ -1376,12 +1376,12 @@ msgstr "completion: fungsi `%s' tidak ditemukan" 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" diff --git a/po/ja.gmo b/po/ja.gmo index 347f80545bb3abba895266d47bf00831a0b83ae1..6b29febe507d522710d8a525fa9ab5dcf442fff6 100644 GIT binary patch delta 20 bcmexv|J{B=kqEn`f}x3(sqyAYkveVwQ=kUZ delta 20 bcmexv|J{B=kqEnif}x?6f$8Q-kveVwQvwFW diff --git a/po/ja.po b/po/ja.po index 637b9921..15543c04 100644 --- a/po/ja.po +++ b/po/ja.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Japanese \n" @@ -38,7 +38,7 @@ msgstr "" 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 Ǥޤ" @@ -300,7 +300,7 @@ 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: ɤ߹ߤΤߤδؿ" @@ -339,7 +339,7 @@ msgstr "" 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" @@ -355,7 +355,7 @@ msgstr "%s: 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: Хʥե¹ԤǤޤ" @@ -826,32 +826,32 @@ msgstr "%c 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" @@ -1329,12 +1329,12 @@ 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: ³ `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" diff --git a/po/lt.gmo b/po/lt.gmo index e64bd4e8ede823ebfd486767c3d55ae82047edb6..3b3360c2fc3a0bd4c2727f81e4f2bc2fc1a5b610 100644 GIT binary patch delta 6833 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 aCoX@!ui3LT+_tB~Th!zhN^D;+DfK^b+uiE` delta 5726 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\n" "Language-Team: Lithuanian \n" @@ -15,82 +15,87 @@ msgstr "" "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 " @@ -103,6 +108,14 @@ msgstr "" 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" @@ -111,130 +124,145 @@ 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" @@ -270,17 +298,17 @@ msgstr "galima naudoti tik funkcijoje" 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 "" @@ -309,7 +337,7 @@ msgstr "%s: nedinamiškai įkrauta" 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" @@ -325,7 +353,7 @@ msgstr "%s: ne paprastas failas" 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ų" @@ -410,8 +438,11 @@ msgstr[2] "Aplinkos komandos, atitinkančios raktažodį „" #: 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 @@ -429,10 +460,12 @@ msgid "" "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" @@ -445,7 +478,7 @@ msgstr "negalima naudoti daugiau negu vieno parametro iš -anrw" 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" @@ -472,56 +505,56 @@ msgstr "Nežinoma klaida" 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" @@ -557,10 +590,12 @@ msgid "" " \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 "" @@ -610,17 +645,17 @@ msgid "" " 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" @@ -652,11 +687,11 @@ msgstr "%s: ne funkcija" 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" @@ -760,11 +795,6 @@ msgstr "paskutinė komanda: %s\n" 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" @@ -791,37 +821,37 @@ msgstr "%s: nepriskirtas kintamasis" 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" @@ -860,7 +890,8 @@ msgstr "eksponentė mažesnis už 0" #: 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 `)'" @@ -896,7 +927,7 @@ msgstr "%s: tikėtasi skaitinės išraiškos" 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" @@ -911,144 +942,144 @@ msgstr "nepavyko išskirti naujo failo deskriptoriaus bash įvedimui iš 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" @@ -1181,103 +1212,103 @@ msgstr "" 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" @@ -1287,45 +1318,45 @@ 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" @@ -1342,16 +1373,16 @@ msgstr "/tmp turi būti taisyklingas aplanko pavadinimas" 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" @@ -1360,39 +1391,42 @@ msgstr "" "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" @@ -1567,77 +1601,77 @@ msgstr "" 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" @@ -1674,71 +1708,75 @@ msgstr "%s: tikėtasi binarinio operatoriaus" 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 \n" +msgid "" +"License GPLv3+: GNU GPL version 3 or later \n" msgstr "" #: version.c:86 @@ -1805,7 +1843,9 @@ msgid "unalias [-a] name [name ...]" 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 @@ -1913,7 +1953,9 @@ msgid "help [-ds] [pattern ...]" 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 @@ -1925,7 +1967,9 @@ msgid "disown [-h] [-ar] [jobspec ...]" 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 @@ -1933,7 +1977,9 @@ msgid "let arg [arg ...]" 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 @@ -2032,7 +2078,9 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac" 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 @@ -2044,66 +2092,83 @@ msgid "until COMMANDS; do COMMANDS; done" 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:250 +#: builtins.c:242 +msgid "" +"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c " +"quantum] [array]" +msgstr "" + +#: builtins.c:254 #, fuzzy msgid "" "Define or display aliases.\n" @@ -2119,7 +2184,8 @@ msgid "" " -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" @@ -2131,7 +2197,7 @@ msgstr "" " 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" @@ -2144,7 +2210,7 @@ msgstr "" "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" @@ -2156,20 +2222,24 @@ msgid "" " 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" @@ -2179,7 +2249,7 @@ msgid "" " 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" @@ -2190,7 +2260,7 @@ msgid "" " 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" @@ -2204,20 +2274,21 @@ msgstr "" "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" @@ -2242,21 +2313,27 @@ msgstr "" " 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" @@ -2281,7 +2358,7 @@ msgstr "" " 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" @@ -2297,7 +2374,7 @@ msgid "" " cannot be read." msgstr "" -#: builtins.c:424 +#: builtins.c:428 #, fuzzy msgid "" "Null command.\n" @@ -2308,7 +2385,7 @@ msgid "" " 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" @@ -2316,7 +2393,7 @@ msgid "" " Always succeeds." msgstr "" -#: builtins.c:444 +#: builtins.c:448 #, fuzzy msgid "" "Return an unsuccessful result.\n" @@ -2325,12 +2402,13 @@ msgid "" " 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" @@ -2343,7 +2421,7 @@ msgid "" " 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" @@ -2371,21 +2449,22 @@ msgid "" " 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" @@ -2400,7 +2479,7 @@ msgid "" " or the shell is not executing a function." msgstr "" -#: builtins.c:533 +#: builtins.c:537 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2431,7 +2510,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:567 +#: builtins.c:571 msgid "" "Write arguments to the standard output.\n" " \n" @@ -2444,7 +2523,7 @@ msgid "" " Returns success unless a write error occurs." msgstr "" -#: builtins.c:582 +#: builtins.c:586 msgid "" "Enable and disable shell builtins.\n" " \n" @@ -2471,18 +2550,19 @@ msgid "" " 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" @@ -2523,12 +2603,13 @@ msgid "" " 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" @@ -2536,14 +2617,16 @@ msgid "" " -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" @@ -2551,28 +2634,32 @@ msgid "" " 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" @@ -2586,10 +2673,11 @@ msgid "" " 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" @@ -2601,24 +2689,27 @@ msgid "" " 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" @@ -2636,7 +2727,7 @@ msgid "" " 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" @@ -2654,10 +2745,11 @@ msgid "" " 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" @@ -2684,13 +2776,14 @@ msgid "" " \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" @@ -2714,7 +2807,7 @@ msgid "" " 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" @@ -2731,7 +2824,7 @@ msgid "" " 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" @@ -2753,14 +2846,15 @@ msgid "" " 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" @@ -2797,18 +2891,21 @@ msgid "" " 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" @@ -2823,19 +2920,22 @@ msgid "" " \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" @@ -2847,7 +2947,7 @@ msgid "" " 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" @@ -2890,7 +2990,8 @@ msgid "" " 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" @@ -2928,7 +3029,7 @@ msgid "" " 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" @@ -2938,7 +3039,8 @@ msgid "" " -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" @@ -2947,12 +3049,13 @@ msgid "" " 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" @@ -2965,7 +3068,7 @@ msgid "" " 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" @@ -2985,7 +3088,7 @@ msgid "" " 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" @@ -2996,7 +3099,7 @@ msgid "" " 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" @@ -3015,7 +3118,7 @@ msgstr "" " Jei nurodyta ARGUMENTŲ, jie tampa poziciniais parametrais iškvietus\n" " FAILĄ." -#: builtins.c:1199 +#: builtins.c:1204 msgid "" "Suspend shell execution.\n" " \n" @@ -3029,7 +3132,7 @@ msgid "" " 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" @@ -3060,7 +3163,8 @@ msgid "" " -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" @@ -3081,7 +3185,8 @@ msgid "" " 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" @@ -3104,7 +3209,7 @@ msgid "" " false or an invalid argument is given." msgstr "" -#: builtins.c:1291 +#: builtins.c:1296 msgid "" "Evaluate conditional expression.\n" " \n" @@ -3112,22 +3217,24 @@ msgid "" " 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" @@ -3136,25 +3243,29 @@ msgid "" " 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 or a signal number.\n" +" Each SIGNAL_SPEC is either a signal name in 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" @@ -3180,14 +3291,16 @@ msgid "" " 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" @@ -3226,7 +3339,7 @@ msgid "" " 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" @@ -3244,22 +3357,24 @@ msgid "" " 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" @@ -3268,11 +3383,12 @@ msgid "" " 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" @@ -3285,7 +3401,7 @@ msgid "" " Returns the status of the last command executed." msgstr "" -#: builtins.c:1487 +#: builtins.c:1492 msgid "" "Arithmetic for loop.\n" " \n" @@ -3302,7 +3418,7 @@ msgid "" " 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" @@ -3322,7 +3438,7 @@ msgid "" " 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" @@ -3338,7 +3454,7 @@ msgid "" " 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" @@ -3349,23 +3465,28 @@ msgid "" " 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" @@ -3379,7 +3500,7 @@ msgstr "" "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" @@ -3393,12 +3514,26 @@ msgstr "" "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" @@ -3406,7 +3541,7 @@ msgid "" " Returns success unless NAME is readonly." msgstr "" -#: builtins.c:1610 +#: builtins.c:1629 #, fuzzy msgid "" "Group commands as a unit.\n" @@ -3420,7 +3555,7 @@ msgstr "" "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" @@ -3434,7 +3569,7 @@ msgid "" " Returns the status of the resumed job." msgstr "" -#: builtins.c:1637 +#: builtins.c:1656 msgid "" "Evaluate arithmetic expression.\n" " \n" @@ -3445,13 +3580,16 @@ msgid "" " 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" @@ -3470,7 +3608,7 @@ msgid "" " 0 or 1 depending on value of EXPRESSION." msgstr "" -#: builtins.c:1675 +#: builtins.c:1694 msgid "" "Common shell variable names and usage.\n" " \n" @@ -3524,7 +3662,7 @@ msgid "" " \t\tcommands should be saved on the history list.\n" msgstr "" -#: builtins.c:1732 +#: builtins.c:1751 msgid "" "Add directories to stack.\n" " \n" @@ -3555,7 +3693,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1766 +#: builtins.c:1785 msgid "" "Remove directories from stack.\n" " \n" @@ -3582,7 +3720,7 @@ msgid "" " change fails." msgstr "" -#: builtins.c:1796 +#: builtins.c:1815 msgid "" "Display directory stack.\n" " \n" @@ -3599,22 +3737,25 @@ msgid "" " \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" @@ -3629,7 +3770,7 @@ msgid "" " given or OPTNAME is disabled." msgstr "" -#: builtins.c:1846 +#: builtins.c:1865 #, fuzzy msgid "" "Formats and prints ARGUMENTS under control of the FORMAT.\n" @@ -3638,20 +3779,25 @@ msgid "" " -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" @@ -3666,12 +3812,14 @@ msgstr "" " 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" @@ -3686,13 +3834,14 @@ msgid "" " 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" @@ -3703,13 +3852,16 @@ msgstr "" " 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" @@ -3729,37 +3881,50 @@ msgid "" " 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 " " @@ -3773,7 +3938,8 @@ 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." @@ -3794,10 +3960,12 @@ msgstr "" #~ 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 @@ -3807,22 +3975,26 @@ msgstr "" #~ 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" @@ -3874,7 +4046,8 @@ msgstr "" #~ 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“" @@ -3883,7 +4056,9 @@ msgstr "" #~ 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“" @@ -3891,7 +4066,8 @@ msgstr "" #~ 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." @@ -3955,12 +4131,15 @@ msgstr "" #~ " „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." @@ -3984,7 +4163,8 @@ msgstr "" #~ " 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 "" @@ -3993,7 +4173,8 @@ msgstr "" #~ " 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 "" @@ -4007,10 +4188,14 @@ msgstr "" #~ 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" diff --git a/po/nl.gmo b/po/nl.gmo index 09639bf5f2a1b18f8376c8ebd587de4962f637de..c56b4761b2a998376de843fba04c8e8a338b6312 100644 GIT binary patch delta 29 kcmeC)!r8rrvtbLPpb@*Jf}x3(sd2l65#x3VBc{*l0EiC=UjP6A delta 29 kcmeC)!r8rrvtbLPpb@))f}x?6foZ#h5#x3VBc{*l0EZ?BPyhe` diff --git a/po/nl.po b/po/nl.po index de11af7d..6c396064 100644 --- a/po/nl.po +++ b/po/nl.po @@ -24,7 +24,7 @@ msgid "" 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 \n" "Language-Team: Dutch \n" @@ -58,7 +58,7 @@ msgstr "%s: niet-numerieke index is niet mogelijk" 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" @@ -315,7 +315,7 @@ msgstr "kan alleen worden gebruikt binnen een functie" 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" @@ -354,7 +354,7 @@ msgstr "%s: is niet dynamisch geladen" 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" @@ -370,7 +370,7 @@ msgstr "%s: is geen normaal bestand" 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" @@ -895,31 +895,31 @@ msgstr "\awachten op invoer duurde te lang -- automatisch afgemeld\n" 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" @@ -1391,12 +1391,12 @@ msgstr "completion(): functie '%s' niet gevonden" 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" diff --git a/po/pl.gmo b/po/pl.gmo index 961ee7874c3c7fa713b5975fc34595d69c57cb9a..64edb447bb5936b8818183684c6de0f33f95fa5d 100644 GIT binary patch delta 22 ecmZ2^nsMc6#tkf1?3N0KCRV1#o4Kv#X#)US`v(C4 delta 22 ecmZ2^nsMc6#tkf1>;?*khE@iqo4Kv#X#)UST?X<1 diff --git a/po/pl.po b/po/pl.po index b7136092..8a88ff31 100644 --- a/po/pl.po +++ b/po/pl.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Polish \n" @@ -39,7 +39,7 @@ msgstr "%s: nie mo 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 mona utworzy: %s" @@ -302,7 +302,7 @@ msgstr "mo msgid "cannot use `-f' to make functions" msgstr "nie mona uywa `-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" @@ -341,7 +341,7 @@ msgstr "%s: nie jest msgid "%s: cannot delete: %s" msgstr "%s: nie mona 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" @@ -357,7 +357,7 @@ msgstr "%s: nie jest zwyk msgid "%s: file is too large" msgstr "%s: plik jest za duy" -#: 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 mona uruchomi pliku binarnego" @@ -888,32 +888,32 @@ msgstr "\aprzekroczony czas oczekiwania na dane wej msgid "cannot redirect standard input from /dev/null: %s" msgstr "nie mona przekierowa standardowego wejcia z /dev/null: %s" -#: execute_cmd.c:1094 +#: execute_cmd.c:1112 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': nieprawidowy znak formatujcy" -#: execute_cmd.c:1993 +#: execute_cmd.c:2011 #, fuzzy msgid "pipe error" msgstr "bd zapisu: %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ograniczony: nie mona 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: zy interpreter" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nie mona skopiowa deskryptora pliku %d do %d" @@ -1384,12 +1384,12 @@ msgstr "uzupe 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: zy cznik `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': nieprawidowy znak formatujcy" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index 72fa32ee28375f71119af7e9f530062406f99a69..7f7ceea7bcde9134a673b35ab2e4a22ce450f7df 100644 GIT binary patch delta 20 ccmX@+d(3ykTQPP^1w#`nQ{&BF#4hmz09Zi>-v9sr delta 20 ccmX@+d(3ykTQPP61w%tC1Jli4#4hmz09T_2&;S4c diff --git a/po/pt_BR.po b/po/pt_BR.po index 6f08b9e2..b7ff3cf1 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Brazilian Portuguese \n" @@ -39,7 +39,7 @@ msgstr "%s: imposs 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: impossvel criar: %s" @@ -302,7 +302,7 @@ msgstr "somente pode ser usado dentro de fun 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: funo somente para leitura" @@ -341,7 +341,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "%s: impossvel 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" @@ -357,7 +357,7 @@ msgstr "%s: imposs 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: impossvel executar o arquivo binrio" @@ -833,32 +833,32 @@ 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 "erro de `pipe': %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restrio: no permitido especificar `/' em nomes de comandos" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: comando no encontrado" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: um diretrio" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossvel duplicar fd (descritor de arquivo) %d para fd 0: %s" @@ -1341,12 +1341,12 @@ 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: conector incorreto `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" diff --git a/po/ro.gmo b/po/ro.gmo index 4da3adc0210b99a245c64a9eb1ccc5c8b879cbbc..4bbf6459d06f824417fd8fc65a18f733604c44cd 100644 GIT binary patch delta 20 bcmaFt{n&d$kT|=gf}x3(sqyAW@h(09P(}ur delta 20 bcmaFt{n&d$kT|=6f}x?6f$8Q*@h(09PpAfo diff --git a/po/ro.po b/po/ro.po index a5cadab0..28235003 100644 --- a/po/ro.po +++ b/po/ro.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Romanian \n" @@ -38,7 +38,7 @@ msgstr "%s: nu se poate atribui c 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" @@ -301,7 +301,7 @@ msgstr "poate fi folosit doar 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: funcie doar n citire (readonly)" @@ -340,7 +340,7 @@ msgstr "" 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" @@ -356,7 +356,7 @@ msgstr "%s: nu se poate executa fi 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 fiierul binar" @@ -829,32 +829,32 @@ msgstr "%ca expirat a 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 legtur (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 negsit" -#: 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" @@ -1333,12 +1333,12 @@ 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: conector greitr `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "" diff --git a/po/ru.gmo b/po/ru.gmo index ff0567e5bae03f536cf079f3c6008ba94aeeffcb..50ea7e2f5fb9f541b230952ccc3a55ff4d1cdea3 100644 GIT binary patch delta 20 bcmdnyzRi6@y9m3bf}x3(sqyAM5e\n" "Language-Team: Russian \n" @@ -42,7 +42,7 @@ msgstr "%s; 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" @@ -299,7 +299,7 @@ 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: " @@ -338,7 +338,7 @@ msgstr "" 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" @@ -354,7 +354,7 @@ msgstr "%s: 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: " @@ -816,32 +816,32 @@ 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 "%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" @@ -1306,12 +1306,12 @@ 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 "" diff --git a/po/sk.gmo b/po/sk.gmo index a8f00abd548daaba941646240557c31bf494bc73..7c8efd2bb27f44f4d095e789120e673592a95678 100644 GIT binary patch delta 29 kcmeyiiSyeg&W0_Ff=29?3Wg?DrpE0OMvU7fjF{ro0iAdVoB#j- delta 29 kcmeyiiSyeg&W0_Ff=28H3WkPO2Bz&2MvU7fjF{ro0i2HrjQ{`u diff --git a/po/sk.po b/po/sk.po index e59b1d2a..ff72a879 100644 --- a/po/sk.po +++ b/po/sk.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Slovak \n" @@ -40,7 +40,7 @@ msgstr "%s: nie je možné priradiť nenumerickému indexu" 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" @@ -297,7 +297,7 @@ msgstr "je možné použiť iba vo funkcii" 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" @@ -336,7 +336,7 @@ msgstr "%s: nie je dynamicky načítané" 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" @@ -352,7 +352,7 @@ msgstr "%s: nie je obyčajný súbor" 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" @@ -880,31 +880,31 @@ msgstr "\ačas vypršal pri čakaní na vstup: automatické odhlásenie\n" 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" @@ -1371,12 +1371,12 @@ msgstr "dokončovanie: funkcia „%s“ nebola nájdená" 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" diff --git a/po/sv.gmo b/po/sv.gmo index d4f0c876e60e1cb4eede745fd3bcaa02d723adc4..2c003b86afcd44bd6dcd3bbb1f4572b36359d464 100644 GIT binary patch delta 29 kcmey`$N9C7vtbLPpb@*Jf}x3(sd2l65#x3VBc@nU0F}82KL7v# delta 29 kcmey`$N9C7vtbLPpb@))f}x?6foZ#h5#x3VBc@nU0F=-OFaQ7m diff --git a/po/sv.po b/po/sv.po index bbb26274..87f40e16 100644 --- a/po/sv.po +++ b/po/sv.po @@ -9,7 +9,7 @@ msgid "" 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 \n" "Language-Team: Swedish \n" @@ -42,7 +42,7 @@ msgstr "%s: det går inte att tilldela till ickenumeriska index" 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" @@ -299,7 +299,7 @@ msgstr "kan endast användas i en funktion" 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" @@ -338,7 +338,7 @@ msgstr "%s: inte dynamiskt laddad" 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" @@ -354,7 +354,7 @@ msgstr "%s: inte en normal fil" 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" @@ -880,31 +880,31 @@ msgstr "\atiden gick ut i väntan på indata: automatisk utloggning\n" 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" @@ -1372,12 +1372,12 @@ msgstr "komplettering: funktion \"%s\" finns inte" 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" diff --git a/po/tr.gmo b/po/tr.gmo index 221c1ca6ffab81e9b8bf95a1c945536f1e27a089..7984078bce160e5922b470c90b7182159feab2dc 100644 GIT binary patch delta 22 ecmaEQobl;##tkf1?3N0KCRV1#o4KuSX#xObaR;ja delta 22 ecmaEQobl;##tkf1>;?*khE@iqo4KuSX#xOa(+8XY diff --git a/po/tr.po b/po/tr.po index 7b7f3974..74bc30dc 100644 --- a/po/tr.po +++ b/po/tr.po @@ -6,7 +6,7 @@ msgid "" 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 \n" "Language-Team: Turkish \n" @@ -40,7 +40,7 @@ msgstr "%s: sayısal olmayan indise atama yapılamaz" 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" @@ -298,7 +298,7 @@ msgstr "sadece bir işlevde kullanılabilir" 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" @@ -337,7 +337,7 @@ msgstr "%s: özdevimli olarak yüklenmemiş" 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" @@ -353,7 +353,7 @@ msgstr "%s: bir dosya değil" 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" @@ -876,32 +876,32 @@ msgstr "\agirdi beklerken zamanaşımı: auto-logout\n" 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" @@ -1369,12 +1369,12 @@ msgstr "completion: `%s' işlevi yok" 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" diff --git a/po/vi.gmo b/po/vi.gmo index 96886f0ae6678ad818c9f26ef58ef7e072f8af0d..2411ab4ac3c905d47d8bdc8d2383900a644a9f82 100644 GIT binary patch delta 29 kcmbQ)#x=8zt6>YHpb@*Jf}x3(sd2l65#x3VBPPZ`0DuGsSpWb4 delta 29 kcmbQ)#x=8zt6>YHpb@))f}x?6foZ#h5#x3VBPPZ`0Dl_?N&o-= diff --git a/po/vi.po b/po/vi.po index b5207dd7..6b5fcb1a 100644 --- a/po/vi.po +++ b/po/vi.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Vietnamese \n" @@ -41,7 +41,7 @@ msgstr "%s: không thể cấp phát cho chỉ số không thuộc số" 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" @@ -301,7 +301,7 @@ msgstr "chỉ có thể được dùng trong một hàm" 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" @@ -340,7 +340,7 @@ msgstr "%s không phải được nạp động" 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" @@ -356,7 +356,7 @@ msgstr "%s: không phải là tập tin chuẩn" 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" @@ -888,31 +888,31 @@ msgstr "\tquá hạn trong khi đợi dữ liệu nhập nên tự động đă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" @@ -1384,12 +1384,12 @@ msgstr "completion: không tìm thấy hàm « %s »" 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ệ" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo index fa87e4bd5897698e64a0b324d30b65ce902e6c73..c40fe10bb8fadfbbf121f45e676ce07d505ffc08 100644 GIT binary patch delta 20 bcmaE<_fl^|IUl>Ff}x3(sqyAIzSkT8PxuD? delta 20 bcmaE<_fl^|IUl=$f}x?6f$8QtzSkT8Pg(}< diff --git a/po/zh_TW.po b/po/zh_TW.po index be9043c5..4144b631 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,7 +7,7 @@ msgid "" 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 \n" "Language-Team: Chinese (traditional) \n" @@ -40,7 +40,7 @@ msgstr "" 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 "" @@ -297,7 +297,7 @@ 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:只讀函數" @@ -336,7 +336,7 @@ 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" @@ -352,7 +352,7 @@ msgstr "" 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 "" @@ -810,32 +810,32 @@ 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 "" @@ -1300,12 +1300,12 @@ 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 "" diff --git a/print_cmd.c b/print_cmd.c index 50b26a3f..285d8fff 100644 --- a/print_cmd.c +++ b/print_cmd.c @@ -150,7 +150,7 @@ static void make_command_string_internal (command) COMMAND *command; { - char s[3]; + char s[3], *op; if (command == 0) cprintf (""); @@ -261,17 +261,15 @@ make_command_string_internal (command) 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"); @@ -290,6 +288,8 @@ make_command_string_internal (command) } make_command_string_internal (command->value.Connection->second); + if (deferred_heredocs) + print_deferred_heredocs (""); printing_connection--; break; @@ -884,9 +884,10 @@ print_deferred_heredocs (cstring) } 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; } diff --git a/support/mkconffiles b/support/mkconffiles old mode 100644 new mode 100755 diff --git a/support/mkversion.sh b/support/mkversion.sh old mode 100644 new mode 100755 diff --git a/support/rlvers.sh b/support/rlvers.sh old mode 100644 new mode 100755 diff --git a/support/shobj-conf b/support/shobj-conf old mode 100644 new mode 100755 diff --git a/tests/heredoc.right b/tests/heredoc.right index 8eee6b21..2a7bf6ba 100644 --- a/tests/heredoc.right +++ b/tests/heredoc.right @@ -39,6 +39,25 @@ ENDOFINPUT 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 <