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 0ee8c9b6a..3d71f176b 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 d2d81b302..000000000 --- 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 000000000..5427ece23 --- /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 f8bcc4f9a..735270cb6 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 02afb38f7..5c61f6756 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 43ebe432f..29d453a5f 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 3b1e37513..4308214b1 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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 T?IJL97Q;~y6%|u!Gm(D*ay4T) delta 40459 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 lk-`7_gomh+k!Z*^ui$NA!M=W??EFq4sHmEn144 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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 E8;bU-J^%m! delta 4996 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

fPeA*QjLE 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 g0$v>{6oS}-C-Vr#HxA|KOvEsJqN3s& +\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 7d29222e4..000000000 --- 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 000000000..94a9ed024 --- /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 0bfba502e..000000000 --- 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 000000000..7dc2ee0cf --- /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 68e5eb548..000000000 --- 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 000000000..96ce74ea1 --- /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 8b1638454..000000000 --- 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 000000000..bd33694db --- /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 b4d3ee74b..000000000 --- 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 000000000..49bfecf33 --- /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 c6164b792..000000000 --- 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 000000000..3eb7f2906 --- /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 439ceedeb..000000000 --- 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 000000000..088ff1540 --- /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 6fea2aeaa..000000000 --- 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 000000000..e26dd0476 --- /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 bc-lM9d7g8_5hiv^1w#`nQ{&C2nOK+rN&f~E delta 20 bc-lM9d7g8_5hiv61w%tC1Jli?nOK+rNnr*B diff --git a/po/af.po b/po/af.po index 03840f991..e60048fb5 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 binêre lêer 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 2b80e174c..3f78e05f0 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 ec-s3qo9XLprVZ;X*)0_eO{`3fH*d9c2mt_V_6S%2 delta 22 ec-s3qo9XLprVZ;X*$os74Xq4JH*d9c2mt_VSO`e~ diff --git a/po/bg.po b/po/bg.po index 330fd7443..d4e61c028 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 bc-s5w_tkI1TQPP^1w#`nQ{&BF#2N(vUcLwK delta 20 bc-s5w_tkI1TQPP61w%tC1Jli4#2N(vULXhH diff --git a/po/ca.po b/po/ca.po index b1b487319..7b84ffe4f 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 kc-niqf%EAG&W0_F=DO^b3Wg?DrpE1dx{TZHbeYt(0iA9LrT_o{ delta 29 kc-niqf%EAG&W0_F=DO?#3WkPO2Bz(Hx{TZHbeYt(0i1;hmjD0& diff --git a/po/cs.po b/po/cs.po index a4da6cd03..986c4ce59 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 ec-q@CooUN-rVW4n*ew+dO{`3fH?#O}umJ#M{s->> delta 22 ec-q@CooUN-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' können keine Funktionen erzeugt werden." -#: builtins/declare.def:365 execute_cmd.c:4782 +#: builtins/declare.def:365 execute_cmd.c:4818 #, c-format msgid "%s: readonly function" msgstr "%s: Schreibgeschützte Funktion." @@ -333,7 +333,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "%s: Kann nicht löschen: %s" -#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639 +#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675 #: shell.c:1439 #, c-format msgid "%s: is a directory" @@ -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 ausführen." @@ -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': Ungültiges Formatzeichen." -#: execute_cmd.c:1993 +#: execute_cmd.c:2011 msgid "pipe error" msgstr "Pipe-Fehler" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: Verboten: `/' ist in Kommandonamen unzulässig." -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: Kommando nicht gefunden." -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: ist ein Verzeichnis." -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "Kann fd %d nicht auf fd 0 verdoppeln: %s" @@ -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 zc-otIh;!m0&W0_F+)nzI3Wg?DrpCGkrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n6AqK0KCT&EC2ui delta 69 zc-otIh;!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 a51f6cb42..1bbd42782 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 zc-q^zjdSBR&W0_F+)nzI3Wg?DrpCGkrUnLF0sgu{sb!hPnfZCTE{P?nRtiQ229~-8 UM!JSjb?sJ8jN7f8n7&H@0LP^hZU6uP delta 69 zc-q^zjdSBR&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 0f1b4a06f..9e898a983 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 ec-q_ciE-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: función de sólo 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 estándard de /dev/null: %s" -#: execute_cmd.c:1094 +#: execute_cmd.c:1112 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': carácter de formato inválido" -#: execute_cmd.c:1993 +#: execute_cmd.c:2011 #, fuzzy msgid "pipe error" msgstr "error de escritura: %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: restringido: no se puede especificar `/' en nombres de órdenes" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: no se encontró la orden" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: intérprete erróneo" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "no se puede duplicar el df %d al df %d" @@ -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 erróneo `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': carácter de formato inválido" diff --git a/po/et.gmo b/po/et.gmo index 698eaa07bc4500ed02879b42c4fa31e4e26300fd..0f19bee6661b5bcba8cfff6c10f6abf754e82a2c 100644 GIT binary patch delta 20 bc-ngy|1f^TLRof81w#`nQ{&AmWG#gNSZ@az delta 20 bc-ngy|1f^TLRoeL1w%tC1JlhbWG#gNSJ4Lw diff --git a/po/et.po b/po/et.po index 555fb0cc2..37a016cb6 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 "võtit `-f' ei saa funktsiooni loomiseks kasutada" -#: builtins/declare.def:365 execute_cmd.c:4782 +#: builtins/declare.def:365 execute_cmd.c:4818 #, c-format msgid "%s: readonly function" msgstr "%s: funktsioon ei ole muudetav" @@ -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 käivitada" @@ -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: käskudes ei saa kasutada sümboleid `/'" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: käsku ei ole" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: halb interpretaator" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "" @@ -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 ec-lL5o$=Up#tkf1?3N0KCRV1#o4Kua8v+1fv;?*khE@iqo4Kua8v+1f76)el diff --git a/po/fr.po b/po/fr.po index 68d020e4a..9205af67d 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 bc-s5!_1$a3TQPP^1w#`nQ{&BF#G3g4UVI1Z delta 20 bc-s5!_1$a3TQPP61w%tC1Jli4#G3g4UET-W diff --git a/po/hu.po b/po/hu.po index fce180c21..a66ba7aeb 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: Gábor István \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 létrehozni: %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 létrehozni: %s" -#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639 +#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675 #: shell.c:1439 #, c-format msgid "%s: is a directory" @@ -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ó bináris fájl" @@ -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 található" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: egy könyvtár" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nem másolható a fd %d fd 0: %s-re" @@ -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 csatlakozás `%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 lc-nivob&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 bc-s4J|J{B=kqEn`f}x3(sqyAYkveVwQ=kUZ delta 20 bc-s4J|J{B=kqEnif}x?6f$8Q-kveVwQvwFW diff --git a/po/ja.po b/po/ja.po index 637b99217..15543c042 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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 l2Aekr`_tRz1lF{L1_idYcZB%AJnwOTOz#\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:242 +msgid "" +"readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c " +"quantum] [array]" msgstr "" -#: builtins.c:250 +#: builtins.c:254 #, fuzzy msgid "" "Define or display aliases.\n" @@ -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 kc-rgU!r8rrvtbLPpb@*Jf}x3(sd2l65#x3VBc{*l0EiC=UjP6A delta 29 kc-rgU!r8rrvtbLPpb@))f}x?6foZ#h5#x3VBc{*l0EZ?BPyhe` diff --git a/po/nl.po b/po/nl.po index de11af7de..6c396064e 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 ec-mWensMc6#tkf1?3N0KCRV1#o4Kv#X#)US`v(C4 delta 22 ec-mWensMc6#tkf1>;?*khE@iqo4Kv#X#)UST?X<1 diff --git a/po/pl.po b/po/pl.po index b71360920..8a88ff311 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 mo¿na utworzyæ: %s" @@ -302,7 +302,7 @@ msgstr "mo msgid "cannot use `-f' to make functions" msgstr "nie mo¿na u¿ywaæ `-f' do tworzenia funkcji" -#: builtins/declare.def:365 execute_cmd.c:4782 +#: builtins/declare.def:365 execute_cmd.c:4818 #, c-format msgid "%s: readonly function" msgstr "%s: funkcja tylko do odczytu" @@ -341,7 +341,7 @@ msgstr "%s: nie jest msgid "%s: cannot delete: %s" msgstr "%s: nie mo¿na usun±æ: %s" -#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639 +#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675 #: shell.c:1439 #, c-format msgid "%s: is a directory" @@ -357,7 +357,7 @@ msgstr "%s: nie jest zwyk msgid "%s: file is too large" msgstr "%s: plik jest za du¿y" -#: builtins/evalfile.c:185 execute_cmd.c:4709 shell.c:1449 +#: builtins/evalfile.c:185 execute_cmd.c:4745 shell.c:1449 #, c-format msgid "%s: cannot execute binary file" msgstr "%s: nie mo¿na uruchomiæ pliku binarnego" @@ -888,32 +888,32 @@ msgstr "\aprzekroczony czas oczekiwania na dane wej msgid "cannot redirect standard input from /dev/null: %s" msgstr "nie mo¿na przekierowaæ standardowego wej¶cia z /dev/null: %s" -#: execute_cmd.c:1094 +#: execute_cmd.c:1112 #, c-format msgid "TIMEFORMAT: `%c': invalid format character" msgstr "TIMEFORMAT: `%c': nieprawid³owy znak formatuj±cy" -#: execute_cmd.c:1993 +#: execute_cmd.c:2011 #, fuzzy msgid "pipe error" msgstr "b³±d zapisu: %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: ograniczony: nie mo¿na podawaæ `/' w nazwach poleceñ" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, c-format msgid "%s: %s: bad interpreter" msgstr "%s: %s: z³y interpreter" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nie mo¿na skopiowaæ deskryptora pliku %d do %d" @@ -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: z³y ³±cznik `%d'" -#: print_cmd.c:1347 +#: print_cmd.c:1348 #, c-format msgid "cprintf: `%c': invalid format character" msgstr "cprintf: `%c': nieprawid³owy znak formatuj±cy" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index 72fa32ee28375f71119af7e9f530062406f99a69..7f7ceea7bcde9134a673b35ab2e4a22ce450f7df 100644 GIT binary patch delta 20 cc-lMWd(3ykTQPP^1w#`nQ{&BF#4hmz09Zi>-v9sr delta 20 cc-lMWd(3ykTQPP61w%tC1Jli4#4hmz09T_2&;S4c diff --git a/po/pt_BR.po b/po/pt_BR.po index 6f08b9e21..b7ff3cf1f 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: impossível 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: função somente para leitura" @@ -341,7 +341,7 @@ msgstr "" msgid "%s: cannot delete: %s" msgstr "%s: impossível criar: %s" -#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4639 +#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4675 #: shell.c:1439 #, c-format msgid "%s: is a directory" @@ -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: impossível executar o arquivo binário" @@ -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: restrição: não é permitido especificar `/' em nomes de comandos" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: é um diretório" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "impossível duplicar fd (descritor de arquivo) %d para fd 0: %s" @@ -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 bc-njH{n&d$kT|=gf}x3(sqyAW@h(09P(}ur delta 20 bc-njH{n&d$kT|=6f}x?6f$8Q*@h(09PpAfo diff --git a/po/ro.po b/po/ro.po index a5cadab06..28235003f 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: funcþie 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 fiºierul 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 legãturã (pipe): %s" -#: execute_cmd.c:4327 +#: execute_cmd.c:4363 #, c-format msgid "%s: restricted: cannot specify `/' in command names" msgstr "%s: limitat: nu se poate specifica `/' în numele comenzilor" -#: execute_cmd.c:4418 +#: execute_cmd.c:4454 #, c-format msgid "%s: command not found" msgstr "%s: comandã negãsitã" -#: execute_cmd.c:4672 +#: execute_cmd.c:4708 #, fuzzy, c-format msgid "%s: %s: bad interpreter" msgstr "%s: este director" -#: execute_cmd.c:4821 +#: execute_cmd.c:4857 #, fuzzy, c-format msgid "cannot duplicate fd %d to fd %d" msgstr "nu se poate duplica fd %d în fd 0: %s" @@ -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 greºitr `%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 bc-q_MzRi6@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 kc-s56iSyeg&W0_Ff=29?3Wg?DrpE0OMvU7fjF{ro0iAdVoB#j- delta 29 kc-s56iSyeg&W0_Ff=28H3WkPO2Bz&2MvU7fjF{ro0i2HrjQ{`u diff --git a/po/sk.po b/po/sk.po index e59b1d2a3..ff72a8792 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 kc-s5g$N9C7vtbLPpb@*Jf}x3(sd2l65#x3VBc@nU0F}82KL7v# delta 29 kc-s5g$N9C7vtbLPpb@))f}x?6foZ#h5#x3VBc@nU0F=-OFaQ7m diff --git a/po/sv.po b/po/sv.po index bbb262742..87f40e16e 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 ec-nh;?*khE@iqo4KuSX#xOa(+8XY diff --git a/po/tr.po b/po/tr.po index 7b7f39748..74bc30dc3 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 kc-ouU#x=8zt6>YHpb@*Jf}x3(sd2l65#x3VBPPZ`0DuGsSpWb4 delta 29 kc-ouU#x=8zt6>YHpb@))f}x?6foZ#h5#x3VBPPZ`0Dl_?N&o-= diff --git a/po/vi.po b/po/vi.po index b5207dd72..6b5fcb1a5 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 bc-niZ_fl^|IUl>Ff}x3(sqyAIzSkT8PxuD? delta 20 bc-niZ_fl^|IUl=$f}x?6f$8QtzSkT8Pg(}< diff --git a/po/zh_TW.po b/po/zh_TW.po index be9043c56..4144b631c 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 50b26a3fa..285d8fffc 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 8eee6b214..2a7bf6bab 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 <