mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-21 21:07:57 +02:00
commit bash-20051027 snapshot
This commit is contained in:
+1
-9
@@ -1,9 +1 @@
|
||||
break maybe_make_export_env
|
||||
r --norc
|
||||
qui
|
||||
break maybe_make_export_env
|
||||
r
|
||||
where
|
||||
p export_env
|
||||
p export_env_size
|
||||
qui
|
||||
quit
|
||||
|
||||
@@ -1,3 +1,62 @@
|
||||
This document details the changes between this version, bash-3.1-rc1,
|
||||
and the previous version, bash-3.1-beta1.
|
||||
|
||||
1. Changes to Bash
|
||||
|
||||
a. Fixed a bug that could cause core dumps due of accessing the current
|
||||
pipeline while in the middle of modifying it.
|
||||
|
||||
b. Fixed a bug that caused pathnames with backslashes still quoting characters
|
||||
to be passed to opendir().
|
||||
|
||||
c. Command word completion now obeys the setting of completion-ignore-case.
|
||||
|
||||
d. Fixed a problem with redirection that caused file descriptors greater than
|
||||
2 to be inappropriately marked as close-on-exec.
|
||||
|
||||
e. In Posix mode, after `wait' is called to wait for a particular process
|
||||
explicitly, that process is removed from the list of processes known to
|
||||
the shell, and subsequent attempts to wait for it return errors.
|
||||
|
||||
f. Fixed a bug that caused extended pattern matching to incorrectly scan
|
||||
backslash-escaped pattern characters.
|
||||
|
||||
g. Fixed a synchronization problem that could cause core dumps when handling
|
||||
a SIGWINCH.
|
||||
|
||||
h. Fixed a bug that caused an unmatched backquote to be accepted without an
|
||||
error when processing here documents.
|
||||
|
||||
i. Fixed a small memory leak in the `cd' builtin.
|
||||
|
||||
j. Fix for MacOS X so it gets the values for the HOSTTYPE, MACHTYPE, and
|
||||
OSTYPE variables at build time, to support universal binaries.
|
||||
|
||||
k. Fixed a bug that could cause an exit trap to return the exit status of
|
||||
the trap command rather than the status as it was before the trap was
|
||||
run as the shell's exit status.
|
||||
|
||||
2. New Features in Bash
|
||||
|
||||
3. Changes to Readline
|
||||
|
||||
a. Fixed a bug that caused reversing the incremental search direction to
|
||||
not work correctly.
|
||||
|
||||
b. Fixed the vi-mode `U' command to only undo up to the first time insert mode
|
||||
was entered, as Posix specifies.
|
||||
|
||||
4. New Features in Readline
|
||||
|
||||
a. New application-callable auxiliary function, rl_variable_value, returns
|
||||
a string corresponding to a readline variable's value.
|
||||
|
||||
b. When parsing inputrc files and variable binding commands, the parser
|
||||
strips trailing whitespace from values assigned to boolean variables
|
||||
before checking them.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
This document details the changes between this version, bash-3.1-beta1,
|
||||
and the previous version, bash-3.1-alpha1.
|
||||
|
||||
|
||||
@@ -1,3 +1,177 @@
|
||||
This document details the changes between this version, bash-3.1-rc1,
|
||||
and the previous version, bash-3.1-beta1.
|
||||
|
||||
1. Changes to Bash
|
||||
|
||||
a. Fixed a bug that could cause core dumps due of accessing the current
|
||||
pipeline while in the middle of modifying it.
|
||||
|
||||
b. Fixed a bug that caused pathnames with backslashes still quoting characters
|
||||
to be passed to opendir().
|
||||
|
||||
c. Command word completion now obeys the setting of completion-ignore-case.
|
||||
|
||||
d. Fixed a problem with redirection that caused file descriptors greater than
|
||||
2 to be inappropriately marked as close-on-exec.
|
||||
|
||||
e. In Posix mode, after `wait' is called to wait for a particular process
|
||||
explicitly, that process is removed from the list of processes known to
|
||||
the shell, and subsequent attempts to wait for it return errors.
|
||||
|
||||
f. Fixed a bug that caused extended pattern matching to incorrectly scan
|
||||
backslash-escaped pattern characters.
|
||||
|
||||
g. Fixed a synchronization problem that could cause core dumps when handling
|
||||
a SIGWINCH.
|
||||
|
||||
h. Fixed a bug that caused an unmatched backquote to be accepted without an
|
||||
error when processing here documents.
|
||||
|
||||
i. Fixed a small memory leak in the `cd' builtin.
|
||||
|
||||
j. Fix for MacOS X so it gets the values for the HOSTTYPE, MACHTYPE, and
|
||||
OSTYPE variables at build time, to support universal binaries.
|
||||
|
||||
2. New Features in Bash
|
||||
|
||||
3. Changes to Readline
|
||||
|
||||
a. Fixed a bug that caused reversing the incremental search direction to
|
||||
not work correctly.
|
||||
|
||||
b. Fixed the vi-mode `U' command to only undo up to the first time insert mode
|
||||
was entered, as Posix specifies.
|
||||
|
||||
4. New Features in Readline
|
||||
|
||||
a. New application-callable auxiliary function, rl_variable_value, returns
|
||||
a string corresponding to a readline variable's value.
|
||||
|
||||
b. When parsing inputrc files and variable binding commands, the parser
|
||||
strips trailing whitespace from values assigned to boolean variables
|
||||
before checking them.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
This document details the changes between this version, bash-3.1-beta1,
|
||||
and the previous version, bash-3.1-alpha1.
|
||||
|
||||
1. Changes to Bash
|
||||
|
||||
a. Added some system-specific signal names.
|
||||
|
||||
b. Fixed a typo in the ulimit builtin to make `x' the right option to
|
||||
maniuplate the limit on file locks.
|
||||
|
||||
c. Fixed a problem with using += to append to index 0 of an array variable
|
||||
when not using subscript syntax.
|
||||
|
||||
d. A few changes to configure.in to remove calls to obsolete or outdated
|
||||
macros.
|
||||
|
||||
e. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
|
||||
made when the variable is set in the temporary environment to a command.
|
||||
|
||||
f. Make sure changes to variables bash handles specially (e.g., LC_ALL) are
|
||||
made when the variable is modified using `printf -v'.
|
||||
|
||||
g. The export environment is now remade on cygwin when HOME is changed, so
|
||||
DLLs bash is linked against pick up the new value. This fixes problems
|
||||
with tilde expansion when linking against and already-installed readline.
|
||||
|
||||
h. Small fix to the logic for performing tilde expansion in posix mode, so
|
||||
expansion on the right-hand side of an assignment statement takes place.
|
||||
|
||||
i. Fixed a bug that prevented redirections associated with a shell function
|
||||
from being executed when in a subshell.
|
||||
|
||||
j. Fixed `source' and `.' builtins to not require an executable file when
|
||||
searching $PATH for a file to source.
|
||||
|
||||
k. Fixed a bug that caused incorrect word splitting in a function when IFS
|
||||
was declared local, then unset.
|
||||
|
||||
l. Fixed a problem with the `kill' builtin that prevented sending signals
|
||||
to a process group under certain circumstances when providing a pid < 0.
|
||||
|
||||
m. When in POSIX mode, `pwd' now checks that the value it prints is the same
|
||||
directory as `.', even when displaying $PWD.
|
||||
|
||||
n. Fixed a problem with the `read' builtin when reading a script from standard
|
||||
input and reading data from the same file.
|
||||
|
||||
o. Fixed a problem with the `type' and `command' builtins that caused absolute
|
||||
pathnames to be displayed incorrectly.
|
||||
|
||||
p. Some changes to the `bg' builtin for POSIX conformance.
|
||||
|
||||
q. The `fc' builtin now removes the `fc' command that caused it to invoke an
|
||||
editor on specified history entries from the history entirely, rather than
|
||||
simply ignoring it.
|
||||
|
||||
r. When in POSIX mode, the `v' command in vi editing mode simply invokes vi
|
||||
on the current command, rather than checking $FCEDIT and $EDITOR.
|
||||
|
||||
s. Fixed a small memory leak in the pathname canonicalization code.
|
||||
|
||||
t. Fixed a bug that caused the expanded value of a $'...' string to be
|
||||
incorrectly re-quoted if it occurred within a double-quoted ${...}
|
||||
parameter expansion.
|
||||
|
||||
u. Restored default emacs-mode key binding of M-TAB to dynamic-complete-history.
|
||||
|
||||
v. Fixed a bug that caused core dumps when interrupting loops running builtins
|
||||
on some systems.
|
||||
|
||||
w. Make sure that some of the functions bash provides replacements for are
|
||||
not cpp defines.
|
||||
|
||||
x. The code that scans embedded commands for the parser (`...` and $(...)) is
|
||||
now more aware of embedded comments and their effect on quoted strings.
|
||||
|
||||
y. Changed the `-n' option to the `history' builtin to not reset the number of
|
||||
history lines read in the current session after reading the new lines from
|
||||
the history file if the history is being appended when it is written to
|
||||
the file, since the appending takes care of the problem that the adjustment
|
||||
was intended to solve.
|
||||
|
||||
z. Improved the error message displayed when a shell script fails to execute
|
||||
because the environment and size of command line arguments are too large.
|
||||
|
||||
aa. A small fix to make sure that $HISTCMD is evaluated whenever the shell is
|
||||
saving commands to the history list, not just when HISTSIZE is defined.
|
||||
|
||||
2. Changes to Readline
|
||||
|
||||
a. The `change-case' command now correctly changes the case of multibyte
|
||||
characters.
|
||||
|
||||
b. Changes to the shared library construction scripts to deal with Windows
|
||||
DLL naming conventions for Cygwin.
|
||||
|
||||
c. Fixed the redisplay code to avoid core dumps resulting from a poorly-timed
|
||||
SIGWINCH.
|
||||
|
||||
d. Fixed the non-incremental search code in vi mode to dispose of any current
|
||||
undo list when copying a line from the history into the current editing
|
||||
buffer.
|
||||
|
||||
e. The variable assignment code now ignores whitespace at the end of lines.
|
||||
|
||||
f. The `C-w' binding in incremental search now understands multibyte
|
||||
characters.
|
||||
|
||||
3. New Features in Bash
|
||||
|
||||
a. A new configuration option, `--enable-strict-posix-default', which will
|
||||
build bash to be POSIX conforming by default.
|
||||
|
||||
4. New Features in Readline
|
||||
|
||||
a. If the rl_completion_query_items is set to a value < 0, readline never
|
||||
asks the user whether or not to view the possible completions.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
This document details the changes between this version, bash-3.1-alpha1,
|
||||
and the previous version, bash-3.0-release.
|
||||
|
||||
@@ -223,6 +397,12 @@ qqq. Fixed a bug that caused core dumps when the shell was reading its non-
|
||||
interactive input from fd 0 and fd 0 was duplicated and restored using a
|
||||
combination of `exec' (to save) and redirection (to restore).
|
||||
|
||||
rrr. Fixed a problem that caused loops in sourced scripts to not be cleaned
|
||||
up properly when a `return' is executed.
|
||||
|
||||
sss. Change internal command substitution completion function to append a slash
|
||||
to directory names in the command.
|
||||
|
||||
2. Changes to Readline
|
||||
|
||||
a. Fixed a bug that caused multiliine prompts to be wrapped and displayed
|
||||
@@ -284,6 +464,9 @@ r. Lots of changes so readline builds and runs on MinGW.
|
||||
s. Readline no longer tries to modify the terminal settings when running in
|
||||
callback mode.
|
||||
|
||||
t. The Readline display code no longer sets the location of the last invisible
|
||||
character in the prompt if the \[\] sequence is empty.
|
||||
|
||||
3. New Features in Bash
|
||||
|
||||
a. Bash now understands LC_TIME as a special variable so that time display
|
||||
|
||||
@@ -12311,3 +12311,27 @@ 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)
|
||||
|
||||
+22
-1
@@ -12309,4 +12309,25 @@ subst.c
|
||||
-----
|
||||
builtins/cd.def
|
||||
- make sure we free TDIR in change_to_directory after calling
|
||||
set_working_directory (which allocates new memory)
|
||||
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
|
||||
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ CFLAGS = @CFLAGS@
|
||||
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
|
||||
LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
|
||||
LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG} ${MALLOC_DEBUG}
|
||||
DEFS = @DEFS@
|
||||
LOCAL_DEFS = @LOCAL_DEFS@
|
||||
|
||||
|
||||
+10
-10
@@ -1,7 +1,7 @@
|
||||
@%:@! /bin/sh
|
||||
@%:@ From configure.in for Bash 3.1, version 3.180.
|
||||
@%:@ Guess values for system-dependent variables and create Makefiles.
|
||||
@%:@ Generated by GNU Autoconf 2.59 for bash 3.1-beta1.
|
||||
@%:@ Generated by GNU Autoconf 2.59 for bash 3.1-rc1.
|
||||
@%:@
|
||||
@%:@ Report bugs to <bug-bash@gnu.org>.
|
||||
@%:@
|
||||
@@ -270,8 +270,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='bash'
|
||||
PACKAGE_TARNAME='bash'
|
||||
PACKAGE_VERSION='3.1-beta1'
|
||||
PACKAGE_STRING='bash 3.1-beta1'
|
||||
PACKAGE_VERSION='3.1-rc1'
|
||||
PACKAGE_STRING='bash 3.1-rc1'
|
||||
PACKAGE_BUGREPORT='bug-bash@gnu.org'
|
||||
|
||||
ac_unique_file="shell.h"
|
||||
@@ -785,7 +785,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures bash 3.1-beta1 to adapt to many kinds of systems.
|
||||
\`configure' configures bash 3.1-rc1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -846,7 +846,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of bash 3.1-beta1:";;
|
||||
short | recursive ) echo "Configuration of bash 3.1-rc1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1039,7 +1039,7 @@ fi
|
||||
test -n "$ac_init_help" && exit 0
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
bash configure 3.1-beta1
|
||||
bash configure 3.1-rc1
|
||||
generated by GNU Autoconf 2.59
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
@@ -1053,7 +1053,7 @@ cat >&5 <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by bash $as_me 3.1-beta1, which was
|
||||
It was created by bash $as_me 3.1-rc1, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -1422,7 +1422,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
|
||||
|
||||
|
||||
BASHVERS=3.1
|
||||
RELSTATUS=beta1
|
||||
RELSTATUS=rc1
|
||||
|
||||
case "$RELSTATUS" in
|
||||
alp*|bet*|dev*|rc*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
|
||||
@@ -27212,7 +27212,7 @@ _ASBOX
|
||||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by bash $as_me 3.1-beta1, which was
|
||||
This file was extended by bash $as_me 3.1-rc1, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -27275,7 +27275,7 @@ _ACEOF
|
||||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
bash config.status 3.1-beta1
|
||||
bash config.status 3.1-rc1
|
||||
configured by $0, generated by GNU Autoconf 2.59,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
||||
+17
-17
@@ -17,19 +17,19 @@
|
||||
{
|
||||
'm4_pattern_forbid' => 1,
|
||||
'AC_CONFIG_LIBOBJ_DIR' => 1,
|
||||
'AC_C_VOLATILE' => 1,
|
||||
'AC_TYPE_OFF_T' => 1,
|
||||
'AC_C_VOLATILE' => 1,
|
||||
'AC_FUNC_CLOSEDIR_VOID' => 1,
|
||||
'AC_REPLACE_FNMATCH' => 1,
|
||||
'AC_PROG_LIBTOOL' => 1,
|
||||
'AC_FUNC_STAT' => 1,
|
||||
'AC_HEADER_TIME' => 1,
|
||||
'AC_FUNC_WAIT3' => 1,
|
||||
'AC_FUNC_LSTAT' => 1,
|
||||
'AC_STRUCT_TM' => 1,
|
||||
'AC_HEADER_TIME' => 1,
|
||||
'AM_AUTOMAKE_VERSION' => 1,
|
||||
'AC_TYPE_MODE_T' => 1,
|
||||
'AC_STRUCT_TM' => 1,
|
||||
'AC_FUNC_LSTAT' => 1,
|
||||
'AC_FUNC_GETMNTENT' => 1,
|
||||
'AC_TYPE_MODE_T' => 1,
|
||||
'AC_FUNC_STRTOD' => 1,
|
||||
'AC_CHECK_HEADERS' => 1,
|
||||
'AC_FUNC_STRNLEN' => 1,
|
||||
@@ -48,17 +48,17 @@
|
||||
'AC_STRUCT_ST_BLOCKS' => 1,
|
||||
'AC_TYPE_SIGNAL' => 1,
|
||||
'AC_TYPE_UID_T' => 1,
|
||||
'AC_CONFIG_AUX_DIR' => 1,
|
||||
'AC_PROG_MAKE_SET' => 1,
|
||||
'sinclude' => 1,
|
||||
'AC_CONFIG_AUX_DIR' => 1,
|
||||
'm4_pattern_allow' => 1,
|
||||
'sinclude' => 1,
|
||||
'AC_DEFINE_TRACE_LITERAL' => 1,
|
||||
'AC_FUNC_STRERROR_R' => 1,
|
||||
'AC_PROG_CC' => 1,
|
||||
'AC_FUNC_FORK' => 1,
|
||||
'AC_DECL_SYS_SIGLIST' => 1,
|
||||
'AC_FUNC_VPRINTF' => 1,
|
||||
'AC_FUNC_FORK' => 1,
|
||||
'AC_FUNC_STRCOLL' => 1,
|
||||
'AC_FUNC_VPRINTF' => 1,
|
||||
'AC_PROG_YACC' => 1,
|
||||
'AC_INIT' => 1,
|
||||
'AC_STRUCT_TIMEZONE' => 1,
|
||||
@@ -80,33 +80,33 @@
|
||||
'AM_MAINTAINER_MODE' => 1,
|
||||
'AC_FUNC_UTIME_NULL' => 1,
|
||||
'AC_FUNC_SELECT_ARGTYPES' => 1,
|
||||
'AC_FUNC_STRFTIME' => 1,
|
||||
'AC_HEADER_STAT' => 1,
|
||||
'AC_PROG_CPP' => 1,
|
||||
'AC_FUNC_STRFTIME' => 1,
|
||||
'AC_C_INLINE' => 1,
|
||||
'AC_TYPE_PID_T' => 1,
|
||||
'AC_PROG_LEX' => 1,
|
||||
'AC_PROG_CPP' => 1,
|
||||
'AC_C_CONST' => 1,
|
||||
'AC_PROG_LEX' => 1,
|
||||
'AC_TYPE_PID_T' => 1,
|
||||
'AC_CONFIG_FILES' => 1,
|
||||
'include' => 1,
|
||||
'AC_FUNC_SETVBUF_REVERSED' => 1,
|
||||
'AC_PROG_INSTALL' => 1,
|
||||
'AM_GNU_GETTEXT' => 1,
|
||||
'AC_CHECK_LIB' => 1,
|
||||
'AC_FUNC_OBSTACK' => 1,
|
||||
'AC_CHECK_LIB' => 1,
|
||||
'AC_FUNC_MALLOC' => 1,
|
||||
'AC_FUNC_GETGROUPS' => 1,
|
||||
'AC_FUNC_GETLOADAVG' => 1,
|
||||
'AH_OUTPUT' => 1,
|
||||
'AC_FUNC_FSEEKO' => 1,
|
||||
'AM_PROG_CC_C_O' => 1,
|
||||
'AC_FUNC_MKTIME' => 1,
|
||||
'AC_CANONICAL_SYSTEM' => 1,
|
||||
'AM_CONDITIONAL' => 1,
|
||||
'AC_CANONICAL_SYSTEM' => 1,
|
||||
'AC_FUNC_MKTIME' => 1,
|
||||
'AC_CONFIG_HEADERS' => 1,
|
||||
'AC_HEADER_SYS_WAIT' => 1,
|
||||
'AC_FUNC_MEMCMP' => 1,
|
||||
'AC_PROG_LN_S' => 1,
|
||||
'AC_FUNC_MEMCMP' => 1,
|
||||
'm4_include' => 1,
|
||||
'AC_HEADER_DIRENT' => 1,
|
||||
'AC_CHECK_FUNCS' => 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
m4trace:configure.in:30: -1- AC_INIT([bash], [3.1-beta1], [bug-bash@gnu.org])
|
||||
m4trace:configure.in:30: -1- AC_INIT([bash], [3.1-rc1], [bug-bash@gnu.org])
|
||||
m4trace:configure.in:30: -1- m4_pattern_forbid([^_?A[CHUM]_])
|
||||
m4trace:configure.in:30: -1- m4_pattern_forbid([_AC_])
|
||||
m4trace:configure.in:30: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
/* Evaluate a string as one or more shell commands.
|
||||
|
||||
Copyright (C) 1996-2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash, the Bourne Again SHell.
|
||||
|
||||
@@ -233,6 +235,7 @@ parse_and_execute (string, from_file, flags)
|
||||
* IF
|
||||
* we were invoked as `bash -c' (startup_state == 2) AND
|
||||
* parse_and_execute has not been called recursively AND
|
||||
* we're not running a trap AND
|
||||
* we have parsed the full command (string == '\0') AND
|
||||
* we have a simple command without redirections AND
|
||||
* the command is not being timed AND
|
||||
@@ -241,6 +244,7 @@ parse_and_execute (string, from_file, flags)
|
||||
* tell the execution code that we don't need to fork
|
||||
*/
|
||||
if (startup_state == 2 && parse_and_execute_level == 1 &&
|
||||
running_trap == 0 &&
|
||||
*bash_input.location.string == '\0' &&
|
||||
command->type == cm_simple &&
|
||||
!command->redirects && !command->value.Simple->redirects &&
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
/* Evaluate a string as one or more shell commands.
|
||||
|
||||
Copyright (C) 1996-2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Bash, the Bourne Again SHell.
|
||||
|
||||
@@ -58,6 +60,7 @@ extern int indirection_level, startup_state, subshell_environment;
|
||||
extern int line_number;
|
||||
extern int last_command_exit_value;
|
||||
extern int running_trap;
|
||||
extern int loop_level;
|
||||
extern int posixly_correct;
|
||||
|
||||
int parse_and_execute_level = 0;
|
||||
@@ -105,6 +108,7 @@ parse_and_execute (string, from_file, flags)
|
||||
unwind_protect_jmp_buf (top_level);
|
||||
unwind_protect_int (indirection_level);
|
||||
unwind_protect_int (line_number);
|
||||
unwind_protect_int (loop_level);
|
||||
if (flags & (SEVAL_NONINT|SEVAL_INTERACT))
|
||||
unwind_protect_int (interactive);
|
||||
|
||||
@@ -231,6 +235,7 @@ parse_and_execute (string, from_file, flags)
|
||||
* IF
|
||||
* we were invoked as `bash -c' (startup_state == 2) AND
|
||||
* parse_and_execute has not been called recursively AND
|
||||
* we're not running a trap AND
|
||||
* we have parsed the full command (string == '\0') AND
|
||||
* we have a simple command without redirections AND
|
||||
* the command is not being timed AND
|
||||
@@ -239,12 +244,14 @@ parse_and_execute (string, from_file, flags)
|
||||
* tell the execution code that we don't need to fork
|
||||
*/
|
||||
if (startup_state == 2 && parse_and_execute_level == 1 &&
|
||||
running_trap == 0 &&
|
||||
*bash_input.location.string == '\0' &&
|
||||
command->type == cm_simple &&
|
||||
!command->redirects && !command->value.Simple->redirects &&
|
||||
((command->flags & CMD_TIME_PIPELINE) == 0) &&
|
||||
((command->flags & CMD_INVERT_RETURN) == 0))
|
||||
{
|
||||
itrace("parse_and_execute: turning on CMD_NO_FORK");
|
||||
command->flags |= CMD_NO_FORK;
|
||||
command->value.Simple->flags |= CMD_NO_FORK;
|
||||
}
|
||||
@@ -300,6 +307,7 @@ parse_and_execute (string, from_file, flags)
|
||||
if (should_jump_to_top_level)
|
||||
jump_to_top_level (code);
|
||||
|
||||
itrace("parse_and_execute: returning %d", last_result);
|
||||
return (last_result);
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -814,8 +814,10 @@ vbadd (buf, blen)
|
||||
}
|
||||
vbuf[vblen] = '\0';
|
||||
|
||||
if (strlen (vbuf) != vblen)
|
||||
internal_error ("printf:vbadd: vblen (%d) != strlen (vbuf) (%d)", vblen, strlen (vbuf));
|
||||
#ifdef DEBUG
|
||||
if (strlen (vbuf) != vblen)
|
||||
internal_error ("printf:vbadd: vblen (%d) != strlen (vbuf) (%d)", vblen, strlen (vbuf));
|
||||
#endif
|
||||
|
||||
return vbuf;
|
||||
}
|
||||
|
||||
+10
-5
@@ -115,7 +115,10 @@ extern int errno;
|
||||
do \
|
||||
{ \
|
||||
if (vflag) \
|
||||
bind_variable (vname, vbuf, 0); \
|
||||
{ \
|
||||
bind_variable (vname, vbuf, 0); \
|
||||
stupidly_hack_special_variables (vname); \
|
||||
} \
|
||||
if (conv_bufsize > 4096 ) \
|
||||
{ \
|
||||
free (conv_buf); \
|
||||
@@ -300,9 +303,10 @@ printf_builtin (list)
|
||||
else
|
||||
{
|
||||
/* Negative precisions are allowed but treated as if the
|
||||
precision were missing; as an extension we allow a
|
||||
leading `+' in the precision number. */
|
||||
#if 1
|
||||
precision were missing; I would like to allow a leading
|
||||
`+' in the precision number as an extension, but lots
|
||||
of asprintf/fprintf implementations get this wrong. */
|
||||
#if 0
|
||||
if (*fmt == '-' || *fmt == '+')
|
||||
#else
|
||||
if (*fmt == '-')
|
||||
@@ -374,7 +378,7 @@ printf_builtin (list)
|
||||
int rlen, r;
|
||||
|
||||
p = getstr ();
|
||||
ch = rlen = 0;
|
||||
ch = rlen = r = 0;
|
||||
xp = bexpand (p, strlen (p), &ch, &rlen);
|
||||
|
||||
if (xp)
|
||||
@@ -401,6 +405,7 @@ printf_builtin (list)
|
||||
char *p, *xp;
|
||||
int r;
|
||||
|
||||
r = 0;
|
||||
p = getstr ();
|
||||
if (ansic_shouldquote (p))
|
||||
xp = ansic_quote (p, 0, (int *)0);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
# From configure.in for Bash 3.1, version 3.180.
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.59 for bash 3.1-beta1.
|
||||
# Generated by GNU Autoconf 2.59 for bash 3.1-rc1.
|
||||
#
|
||||
# Report bugs to <bug-bash@gnu.org>.
|
||||
#
|
||||
@@ -270,8 +270,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='bash'
|
||||
PACKAGE_TARNAME='bash'
|
||||
PACKAGE_VERSION='3.1-beta1'
|
||||
PACKAGE_STRING='bash 3.1-beta1'
|
||||
PACKAGE_VERSION='3.1-rc1'
|
||||
PACKAGE_STRING='bash 3.1-rc1'
|
||||
PACKAGE_BUGREPORT='bug-bash@gnu.org'
|
||||
|
||||
ac_unique_file="shell.h"
|
||||
@@ -785,7 +785,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures bash 3.1-beta1 to adapt to many kinds of systems.
|
||||
\`configure' configures bash 3.1-rc1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -846,7 +846,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of bash 3.1-beta1:";;
|
||||
short | recursive ) echo "Configuration of bash 3.1-rc1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1039,7 +1039,7 @@ fi
|
||||
test -n "$ac_init_help" && exit 0
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
bash configure 3.1-beta1
|
||||
bash configure 3.1-rc1
|
||||
generated by GNU Autoconf 2.59
|
||||
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
@@ -1053,7 +1053,7 @@ cat >&5 <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by bash $as_me 3.1-beta1, which was
|
||||
It was created by bash $as_me 3.1-rc1, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -1422,7 +1422,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
|
||||
|
||||
|
||||
BASHVERS=3.1
|
||||
RELSTATUS=beta1
|
||||
RELSTATUS=rc1
|
||||
|
||||
case "$RELSTATUS" in
|
||||
alp*|bet*|dev*|rc*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
|
||||
@@ -27212,7 +27212,7 @@ _ASBOX
|
||||
} >&5
|
||||
cat >&5 <<_CSEOF
|
||||
|
||||
This file was extended by bash $as_me 3.1-beta1, which was
|
||||
This file was extended by bash $as_me 3.1-rc1, which was
|
||||
generated by GNU Autoconf 2.59. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -27275,7 +27275,7 @@ _ACEOF
|
||||
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
bash config.status 3.1-beta1
|
||||
bash config.status 3.1-rc1
|
||||
configured by $0, generated by GNU Autoconf 2.59,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
@@ -28319,3 +28319,4 @@ if test "$no_create" != yes; then
|
||||
# would make configure fail if this is the last instruction.
|
||||
$ac_cs_success || { (exit 1); exit 1; }
|
||||
fi
|
||||
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
AC_REVISION([for Bash 3.1, version 3.180])dnl
|
||||
|
||||
define(bashvers, 3.1)
|
||||
define(relstatus, beta1)
|
||||
define(relstatus, rc1)
|
||||
|
||||
AC_INIT(bash, bashvers-relstatus, bug-bash@gnu.org)
|
||||
|
||||
|
||||
+2
-2
@@ -25,7 +25,7 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
AC_REVISION([for Bash 3.1, version 3.180])dnl
|
||||
|
||||
define(bashvers, 3.1)
|
||||
define(relstatus, alpha1)
|
||||
define(relstatus, beta1)
|
||||
|
||||
AC_INIT(bash, bashvers-relstatus, bug-bash@gnu.org)
|
||||
|
||||
@@ -230,7 +230,7 @@ AC_ARG_ENABLE(restricted, AC_HELP_STRING([--enable-restricted], [enable a restri
|
||||
AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval)
|
||||
AC_ARG_ENABLE(separate-helpfiles, AC_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval)
|
||||
AC_ARG_ENABLE(single-help-strings, AC_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval)
|
||||
AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval)
|
||||
AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval)
|
||||
AC_ARG_ENABLE(usg-echo-default, AC_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval)
|
||||
AC_ARG_ENABLE(xpg-echo-default, AC_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval)
|
||||
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@
|
||||
/* Placeholder for future modifications if cross-compiling or building a
|
||||
`fat' binary, e.g. on Apple Rhapsody. These values are used in multiple
|
||||
files, so they appear here. */
|
||||
#if !defined (RHAPSODY)
|
||||
#if !defined (RHAPSODY) && !defined (MACOSX)
|
||||
# define HOSTTYPE CONF_HOSTTYPE
|
||||
# define OSTYPE CONF_OSTYPE
|
||||
# define MACHTYPE CONF_MACHTYPE
|
||||
|
||||
@@ -3870,9 +3870,18 @@ shell_execve (command, args, env)
|
||||
if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
|
||||
{
|
||||
char *interp;
|
||||
int ilen;
|
||||
|
||||
interp = getinterp (sample, sample_len, (int *)NULL);
|
||||
ilen = strlen (interp);
|
||||
errno = i;
|
||||
if (interp[ilen - 1] == '\r')
|
||||
{
|
||||
interp = xrealloc (interp, ilen + 2);
|
||||
interp[ilen - 1] = '^';
|
||||
interp[ilen] = 'M';
|
||||
interp[ilen + 1] = '\0';
|
||||
}
|
||||
sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : "");
|
||||
FREE (interp);
|
||||
return (EX_NOEXEC);
|
||||
|
||||
+23
-15
@@ -3050,13 +3050,9 @@ execute_builtin (builtin, words, flags, subshell)
|
||||
|
||||
/* The temporary environment for a builtin is supposed to apply to
|
||||
all commands executed by that builtin. Currently, this is a
|
||||
#if 0
|
||||
problem only with the `source' and `eval' builtins. */
|
||||
isbltinenv = (builtin == source_builtin || builtin == eval_builtin);
|
||||
#else
|
||||
problem only with the `source', `unset', and `eval' builtins. */
|
||||
problem only with the `unset', `source' and `eval' builtins. */
|
||||
|
||||
isbltinenv = (builtin == source_builtin || builtin == eval_builtin || builtin == unset_builtin);
|
||||
#endif
|
||||
|
||||
if (isbltinenv)
|
||||
{
|
||||
@@ -3228,18 +3224,12 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
|
||||
/* Number of the line on which the function body starts. */
|
||||
line_number = function_line_number = tc->line;
|
||||
|
||||
if (subshell)
|
||||
{
|
||||
#if defined (JOB_CONTROL)
|
||||
stop_pipeline (async, (COMMAND *)NULL);
|
||||
if (subshell)
|
||||
stop_pipeline (async, (COMMAND *)NULL);
|
||||
#endif
|
||||
fc = (tc->type == cm_group) ? tc->value.Group->command : tc;
|
||||
|
||||
if (fc && (flags & CMD_IGNORE_RETURN))
|
||||
fc->flags |= CMD_IGNORE_RETURN;
|
||||
}
|
||||
else
|
||||
fc = tc;
|
||||
fc = tc;
|
||||
|
||||
return_catch_flag++;
|
||||
return_val = setjmp (return_catch);
|
||||
@@ -3790,6 +3780,7 @@ initialize_subshell ()
|
||||
/* Forget about the way job control was working. We are in a subshell. */
|
||||
without_job_control ();
|
||||
set_sigchld_handler ();
|
||||
init_job_stats ();
|
||||
#endif /* JOB_CONTROL */
|
||||
|
||||
/* Reset the values of the shell flags and options. */
|
||||
@@ -3864,6 +3855,12 @@ shell_execve (command, args, env)
|
||||
errno = i;
|
||||
file_error (command);
|
||||
}
|
||||
/* errors not involving the path argument to execve. */
|
||||
else if (i == E2BIG || i == ENOMEM)
|
||||
{
|
||||
errno = i;
|
||||
file_error (command);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* The file has the execute bits set, but the kernel refuses to
|
||||
@@ -3873,9 +3870,20 @@ shell_execve (command, args, env)
|
||||
if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
|
||||
{
|
||||
char *interp;
|
||||
int ilen;
|
||||
|
||||
interp = getinterp (sample, sample_len, (int *)NULL);
|
||||
ilen = strlen (interp);
|
||||
errno = i;
|
||||
itrace("shell_execve: interp = `%s', ilen = %d", interp, ilen);
|
||||
itrace("shell_execve: interp[ilen - 1] = %d", interp[ilen - 1]);
|
||||
if (interp[ilen - 1] == '\r')
|
||||
{
|
||||
interp = xrealloc (interp, ilen + 2);
|
||||
interp[ilen - 1] = '^';
|
||||
interp[ilen] = 'M';
|
||||
interp[ilen + 1] = '\0';
|
||||
}
|
||||
sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : "");
|
||||
FREE (interp);
|
||||
return (EX_NOEXEC);
|
||||
|
||||
Binary file not shown.
@@ -1,6 +1,6 @@
|
||||
<HTML>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<!-- Created on July, 27 2004 by texi2html 1.64 -->
|
||||
<!-- Created on October, 27 2005 by texi2html 1.64 -->
|
||||
<!--
|
||||
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
|
||||
Karl Berry <karl@freefriends.org>
|
||||
@@ -2100,7 +2100,7 @@ to permit their use in free software.
|
||||
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
|
||||
</TR></TABLE>
|
||||
<H1>About this document</H1>
|
||||
This document was generated by <I>Chet Ramey</I> on <I>July, 27 2004</I>
|
||||
This document was generated by <I>Chet Ramey</I> on <I>October, 27 2005</I>
|
||||
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
|
||||
"><I>texi2html</I></A>
|
||||
<P></P>
|
||||
@@ -2262,7 +2262,7 @@ the following structure:
|
||||
<BR>
|
||||
<FONT SIZE="-1">
|
||||
This document was generated
|
||||
by <I>Chet Ramey</I> on <I>July, 27 2004</I>
|
||||
by <I>Chet Ramey</I> on <I>October, 27 2005</I>
|
||||
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
|
||||
"><I>texi2html</I></A>
|
||||
|
||||
|
||||
+217
-182
@@ -1,8 +1,8 @@
|
||||
This is history.info, produced by makeinfo version 4.5 from
|
||||
This is history.info, produced by makeinfo version 4.7 from
|
||||
./history.texi.
|
||||
|
||||
This document describes the GNU History library (version 5.0, 28
|
||||
January 2004), a programming tool that provides a consistent user
|
||||
This document describes the GNU History library (version 5.1-beta1,
|
||||
7 October 2005), a programming tool that provides a consistent user
|
||||
interface for recalling lines of previously typed input.
|
||||
|
||||
Copyright (C) 1988-2004 Free Software Foundation, Inc.
|
||||
@@ -22,7 +22,7 @@ preserved on all copies.
|
||||
(a) The FSF's Back-Cover Text is: "You have freedom to copy and
|
||||
modify this GNU Manual, like GNU software. Copies published by
|
||||
the Free Software Foundation raise funds for GNU development."
|
||||
|
||||
|
||||
INFO-DIR-SECTION Libraries
|
||||
START-INFO-DIR-ENTRY
|
||||
* History: (history). The GNU history library API.
|
||||
@@ -34,9 +34,9 @@ File: history.info, Node: Top, Next: Using History Interactively, Up: (dir)
|
||||
GNU History Library
|
||||
*******************
|
||||
|
||||
This document describes the GNU History library, a programming tool
|
||||
that provides a consistent user interface for recalling lines of
|
||||
previously typed input.
|
||||
This document describes the GNU History library, a programming tool that
|
||||
provides a consistent user interface for recalling lines of previously
|
||||
typed input.
|
||||
|
||||
* Menu:
|
||||
|
||||
@@ -50,13 +50,13 @@ previously typed input.
|
||||
|
||||
File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top
|
||||
|
||||
Using History Interactively
|
||||
***************************
|
||||
1 Using History Interactively
|
||||
*****************************
|
||||
|
||||
This chapter describes how to use the GNU History Library
|
||||
interactively, from a user's standpoint. It should be considered a
|
||||
user's guide. For information on using the GNU History Library in your
|
||||
own programs, *note Programming with GNU History::.
|
||||
This chapter describes how to use the GNU History Library interactively,
|
||||
from a user's standpoint. It should be considered a user's guide. For
|
||||
information on using the GNU History Library in your own programs,
|
||||
*note Programming with GNU History::.
|
||||
|
||||
* Menu:
|
||||
|
||||
@@ -65,12 +65,12 @@ own programs, *note Programming with GNU History::.
|
||||
|
||||
File: history.info, Node: History Interaction, Up: Using History Interactively
|
||||
|
||||
History Expansion
|
||||
=================
|
||||
1.1 History Expansion
|
||||
=====================
|
||||
|
||||
The History library provides a history expansion feature that is
|
||||
similar to the history expansion provided by `csh'. This section
|
||||
describes the syntax used to manipulate the history information.
|
||||
The History library provides a history expansion feature that is similar
|
||||
to the history expansion provided by `csh'. This section describes the
|
||||
syntax used to manipulate the history information.
|
||||
|
||||
History expansions introduce words from the history list into the
|
||||
input stream, making it easy to repeat commands, insert the arguments
|
||||
@@ -97,11 +97,11 @@ appearance of the history expansion character, which is `!' by default.
|
||||
|
||||
File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
|
||||
|
||||
Event Designators
|
||||
-----------------
|
||||
1.1.1 Event Designators
|
||||
-----------------------
|
||||
|
||||
An event designator is a reference to a command line entry in the
|
||||
history list.
|
||||
An event designator is a reference to a command line entry in the
|
||||
history list.
|
||||
|
||||
`!'
|
||||
Start a history substitution, except when followed by a space, tab,
|
||||
@@ -135,10 +135,10 @@ history list.
|
||||
|
||||
File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
|
||||
|
||||
Word Designators
|
||||
----------------
|
||||
1.1.2 Word Designators
|
||||
----------------------
|
||||
|
||||
Word designators are used to select desired words from the event. A
|
||||
Word designators are used to select desired words from the event. A
|
||||
`:' separates the event specification from the word designator. It may
|
||||
be omitted if the word designator begins with a `^', `$', `*', `-', or
|
||||
`%'. Words are numbered from the beginning of the line, with the first
|
||||
@@ -197,10 +197,10 @@ previous command is used as the event.
|
||||
|
||||
File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
|
||||
|
||||
Modifiers
|
||||
---------
|
||||
1.1.3 Modifiers
|
||||
---------------
|
||||
|
||||
After the optional word designator, you can add a sequence of one or
|
||||
After the optional word designator, you can add a sequence of one or
|
||||
more of the following modifiers, each preceded by a `:'.
|
||||
|
||||
`h'
|
||||
@@ -242,10 +242,10 @@ more of the following modifiers, each preceded by a `:'.
|
||||
|
||||
File: history.info, Node: Programming with GNU History, Next: Copying This Manual, Prev: Using History Interactively, Up: Top
|
||||
|
||||
Programming with GNU History
|
||||
****************************
|
||||
2 Programming with GNU History
|
||||
******************************
|
||||
|
||||
This chapter describes how to interface programs that you write with
|
||||
This chapter describes how to interface programs that you write with
|
||||
the GNU History Library. It should be considered a technical guide.
|
||||
For information on the interactive use of GNU History, *note Using
|
||||
History Interactively::.
|
||||
@@ -261,10 +261,10 @@ History Interactively::.
|
||||
|
||||
File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History
|
||||
|
||||
Introduction to History
|
||||
=======================
|
||||
2.1 Introduction to History
|
||||
===========================
|
||||
|
||||
Many programs read input from the user a line at a time. The GNU
|
||||
Many programs read input from the user a line at a time. The GNU
|
||||
History library is able to keep track of those lines, associate
|
||||
arbitrary data with each line, and utilize information from previous
|
||||
lines in composing new ones.
|
||||
@@ -297,14 +297,14 @@ public data structures.
|
||||
|
||||
File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History
|
||||
|
||||
History Storage
|
||||
===============
|
||||
2.2 History Storage
|
||||
===================
|
||||
|
||||
The history list is an array of history entries. A history entry is
|
||||
The history list is an array of history entries. A history entry is
|
||||
declared as follows:
|
||||
|
||||
typedef void *histdata_t;
|
||||
|
||||
|
||||
typedef struct _hist_entry {
|
||||
char *line;
|
||||
char *timestamp;
|
||||
@@ -335,10 +335,10 @@ stifled.
|
||||
|
||||
File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History
|
||||
|
||||
History Functions
|
||||
=================
|
||||
2.3 History Functions
|
||||
=====================
|
||||
|
||||
This section describes the calling sequence for the various functions
|
||||
This section describes the calling sequence for the various functions
|
||||
exported by the GNU History library.
|
||||
|
||||
* Menu:
|
||||
@@ -362,105 +362,105 @@ exported by the GNU History library.
|
||||
|
||||
File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions
|
||||
|
||||
Initializing History and State Management
|
||||
-----------------------------------------
|
||||
2.3.1 Initializing History and State Management
|
||||
-----------------------------------------------
|
||||
|
||||
This section describes functions used to initialize and manage the
|
||||
This section describes functions used to initialize and manage the
|
||||
state of the History library when you want to use the history functions
|
||||
in your program.
|
||||
|
||||
- Function: void using_history (void)
|
||||
-- Function: void using_history (void)
|
||||
Begin a session in which the history functions might be used. This
|
||||
initializes the interactive variables.
|
||||
|
||||
- Function: HISTORY_STATE * history_get_history_state (void)
|
||||
-- Function: HISTORY_STATE * history_get_history_state (void)
|
||||
Return a structure describing the current state of the input
|
||||
history.
|
||||
|
||||
- Function: void history_set_history_state (HISTORY_STATE *state)
|
||||
-- Function: void history_set_history_state (HISTORY_STATE *state)
|
||||
Set the state of the history list according to STATE.
|
||||
|
||||
|
||||
File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions
|
||||
|
||||
History List Management
|
||||
-----------------------
|
||||
2.3.2 History List Management
|
||||
-----------------------------
|
||||
|
||||
These functions manage individual entries on the history list, or set
|
||||
These functions manage individual entries on the history list, or set
|
||||
parameters managing the list itself.
|
||||
|
||||
- Function: void add_history (const char *string)
|
||||
-- Function: void add_history (const char *string)
|
||||
Place STRING at the end of the history list. The associated data
|
||||
field (if any) is set to `NULL'.
|
||||
|
||||
- Function: void add_history_time (const char *string)
|
||||
-- Function: void add_history_time (const char *string)
|
||||
Change the time stamp associated with the most recent history
|
||||
entry to STRING.
|
||||
|
||||
- Function: HIST_ENTRY * remove_history (int which)
|
||||
-- Function: HIST_ENTRY * remove_history (int which)
|
||||
Remove history entry at offset WHICH from the history. The
|
||||
removed element is returned so you can free the line, data, and
|
||||
containing structure.
|
||||
|
||||
- Function: histdata_t free_history_entry (HIST_ENTRY *histent)
|
||||
-- Function: histdata_t free_history_entry (HIST_ENTRY *histent)
|
||||
Free the history entry HISTENT and any history library private
|
||||
data associated with it. Returns the application-specific data so
|
||||
the caller can dispose of it.
|
||||
|
||||
- Function: HIST_ENTRY * replace_history_entry (int which, const char
|
||||
-- Function: HIST_ENTRY * replace_history_entry (int which, const char
|
||||
*line, histdata_t data)
|
||||
Make the history entry at offset WHICH have LINE and DATA. This
|
||||
returns the old entry so the caller can dispose of any
|
||||
application-specific data. In the case of an invalid WHICH, a
|
||||
`NULL' pointer is returned.
|
||||
|
||||
- Function: void clear_history (void)
|
||||
-- Function: void clear_history (void)
|
||||
Clear the history list by deleting all the entries.
|
||||
|
||||
- Function: void stifle_history (int max)
|
||||
-- Function: void stifle_history (int max)
|
||||
Stifle the history list, remembering only the last MAX entries.
|
||||
|
||||
- Function: int unstifle_history (void)
|
||||
-- Function: int unstifle_history (void)
|
||||
Stop stifling the history. This returns the previously-set
|
||||
maximum number of history entries (as set by `stifle_history()').
|
||||
The value is positive if the history was stifled, negative if it
|
||||
wasn't.
|
||||
|
||||
- Function: int history_is_stifled (void)
|
||||
-- Function: int history_is_stifled (void)
|
||||
Returns non-zero if the history is stifled, zero if it is not.
|
||||
|
||||
|
||||
File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions
|
||||
|
||||
Information About the History List
|
||||
----------------------------------
|
||||
2.3.3 Information About the History List
|
||||
----------------------------------------
|
||||
|
||||
These functions return information about the entire history list or
|
||||
These functions return information about the entire history list or
|
||||
individual list entries.
|
||||
|
||||
- Function: HIST_ENTRY ** history_list (void)
|
||||
-- Function: HIST_ENTRY ** history_list (void)
|
||||
Return a `NULL' terminated array of `HIST_ENTRY *' which is the
|
||||
current input history. Element 0 of this list is the beginning of
|
||||
time. If there is no history, return `NULL'.
|
||||
|
||||
- Function: int where_history (void)
|
||||
-- Function: int where_history (void)
|
||||
Returns the offset of the current history element.
|
||||
|
||||
- Function: HIST_ENTRY * current_history (void)
|
||||
-- Function: HIST_ENTRY * current_history (void)
|
||||
Return the history entry at the current position, as determined by
|
||||
`where_history()'. If there is no entry there, return a `NULL'
|
||||
pointer.
|
||||
|
||||
- Function: HIST_ENTRY * history_get (int offset)
|
||||
-- Function: HIST_ENTRY * history_get (int offset)
|
||||
Return the history entry at position OFFSET, starting from
|
||||
`history_base' (*note History Variables::). If there is no entry
|
||||
there, or if OFFSET is greater than the history length, return a
|
||||
`NULL' pointer.
|
||||
|
||||
- Function: time_t history_get_time (HIST_ENTRY *entry)
|
||||
-- Function: time_t history_get_time (HIST_ENTRY *entry)
|
||||
Return the time stamp associated with the history entry ENTRY.
|
||||
|
||||
- Function: int history_total_bytes (void)
|
||||
-- Function: int history_total_bytes (void)
|
||||
Return the number of bytes that the primary history entries are
|
||||
using. This function returns the sum of the lengths of all the
|
||||
lines in the history.
|
||||
@@ -468,23 +468,23 @@ individual list entries.
|
||||
|
||||
File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions
|
||||
|
||||
Moving Around the History List
|
||||
------------------------------
|
||||
2.3.4 Moving Around the History List
|
||||
------------------------------------
|
||||
|
||||
These functions allow the current index into the history list to be
|
||||
set or changed.
|
||||
These functions allow the current index into the history list to be set
|
||||
or changed.
|
||||
|
||||
- Function: int history_set_pos (int pos)
|
||||
-- Function: int history_set_pos (int pos)
|
||||
Set the current history offset to POS, an absolute index into the
|
||||
list. Returns 1 on success, 0 if POS is less than zero or greater
|
||||
than the number of history entries.
|
||||
|
||||
- Function: HIST_ENTRY * previous_history (void)
|
||||
-- Function: HIST_ENTRY * previous_history (void)
|
||||
Back up the current history offset to the previous history entry,
|
||||
and return a pointer to that entry. If there is no previous
|
||||
entry, return a `NULL' pointer.
|
||||
|
||||
- Function: HIST_ENTRY * next_history (void)
|
||||
-- Function: HIST_ENTRY * next_history (void)
|
||||
Move the current history offset forward to the next history entry,
|
||||
and return the a pointer to that entry. If there is no next
|
||||
entry, return a `NULL' pointer.
|
||||
@@ -492,16 +492,16 @@ set or changed.
|
||||
|
||||
File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions
|
||||
|
||||
Searching the History List
|
||||
--------------------------
|
||||
2.3.5 Searching the History List
|
||||
--------------------------------
|
||||
|
||||
These functions allow searching of the history list for entries
|
||||
These functions allow searching of the history list for entries
|
||||
containing a specific string. Searching may be performed both forward
|
||||
and backward from the current history position. The search may be
|
||||
"anchored", meaning that the string must match at the beginning of the
|
||||
history entry.
|
||||
history entry.
|
||||
|
||||
- Function: int history_search (const char *string, int direction)
|
||||
-- Function: int history_search (const char *string, int direction)
|
||||
Search the history for STRING, starting at the current history
|
||||
offset. If DIRECTION is less than 0, then the search is through
|
||||
previous entries, otherwise through subsequent entries. If STRING
|
||||
@@ -510,7 +510,7 @@ history entry.
|
||||
entry where STRING was found. Otherwise, nothing is changed, and
|
||||
a -1 is returned.
|
||||
|
||||
- Function: int history_search_prefix (const char *string, int
|
||||
-- Function: int history_search_prefix (const char *string, int
|
||||
direction)
|
||||
Search the history for STRING, starting at the current history
|
||||
offset. The search is anchored: matching lines must begin with
|
||||
@@ -520,8 +520,8 @@ history entry.
|
||||
the return value is 0. Otherwise, nothing is changed, and a -1 is
|
||||
returned.
|
||||
|
||||
- Function: int history_search_pos (const char *string, int direction,
|
||||
int pos)
|
||||
-- Function: int history_search_pos (const char *string, int
|
||||
direction, int pos)
|
||||
Search for STRING in the history list, starting at POS, an
|
||||
absolute index into the list. If DIRECTION is negative, the search
|
||||
proceeds backward from POS, otherwise forward. Returns the
|
||||
@@ -531,18 +531,18 @@ history entry.
|
||||
|
||||
File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions
|
||||
|
||||
Managing the History File
|
||||
-------------------------
|
||||
2.3.6 Managing the History File
|
||||
-------------------------------
|
||||
|
||||
The History library can read the history from and write it to a file.
|
||||
The History library can read the history from and write it to a file.
|
||||
This section documents the functions for managing a history file.
|
||||
|
||||
- Function: int read_history (const char *filename)
|
||||
-- Function: int read_history (const char *filename)
|
||||
Add the contents of FILENAME to the history list, a line at a time.
|
||||
If FILENAME is `NULL', then read from `~/.history'. Returns 0 if
|
||||
successful, or `errno' if not.
|
||||
|
||||
- Function: int read_history_range (const char *filename, int from,
|
||||
-- Function: int read_history_range (const char *filename, int from,
|
||||
int to)
|
||||
Read a range of lines from FILENAME, adding them to the history
|
||||
list. Start reading at line FROM and end at TO. If FROM is zero,
|
||||
@@ -550,18 +550,18 @@ This section documents the functions for managing a history file.
|
||||
the end of the file. If FILENAME is `NULL', then read from
|
||||
`~/.history'. Returns 0 if successful, or `errno' if not.
|
||||
|
||||
- Function: int write_history (const char *filename)
|
||||
-- Function: int write_history (const char *filename)
|
||||
Write the current history to FILENAME, overwriting FILENAME if
|
||||
necessary. If FILENAME is `NULL', then write the history list to
|
||||
`~/.history'. Returns 0 on success, or `errno' on a read or write
|
||||
error.
|
||||
|
||||
- Function: int append_history (int nelements, const char *filename)
|
||||
-- Function: int append_history (int nelements, const char *filename)
|
||||
Append the last NELEMENTS of the history list to FILENAME. If
|
||||
FILENAME is `NULL', then append to `~/.history'. Returns 0 on
|
||||
success, or `errno' on a read or write error.
|
||||
|
||||
- Function: int history_truncate_file (const char *filename, int
|
||||
-- Function: int history_truncate_file (const char *filename, int
|
||||
nlines)
|
||||
Truncate the history file FILENAME, leaving only the last NLINES
|
||||
lines. If FILENAME is `NULL', then `~/.history' is truncated.
|
||||
@@ -570,12 +570,12 @@ This section documents the functions for managing a history file.
|
||||
|
||||
File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions
|
||||
|
||||
History Expansion
|
||||
-----------------
|
||||
2.3.7 History Expansion
|
||||
-----------------------
|
||||
|
||||
These functions implement history expansion.
|
||||
These functions implement history expansion.
|
||||
|
||||
- Function: int history_expand (char *string, char **output)
|
||||
-- Function: int history_expand (char *string, char **output)
|
||||
Expand STRING, placing the result into OUTPUT, a pointer to a
|
||||
string (*note History Interaction::). Returns:
|
||||
`0'
|
||||
@@ -596,8 +596,8 @@ History Expansion
|
||||
If an error ocurred in expansion, then OUTPUT contains a
|
||||
descriptive error message.
|
||||
|
||||
- Function: char * get_history_event (const char *string, int *cindex,
|
||||
int qchar)
|
||||
-- Function: char * get_history_event (const char *string, int
|
||||
*cindex, int qchar)
|
||||
Returns the text of the history event beginning at STRING +
|
||||
*CINDEX. *CINDEX is modified to point to after the event
|
||||
specifier. At function entry, CINDEX points to the index into
|
||||
@@ -605,13 +605,13 @@ History Expansion
|
||||
character that is allowed to end the event specification in
|
||||
addition to the "normal" terminating characters.
|
||||
|
||||
- Function: char ** history_tokenize (const char *string)
|
||||
-- Function: char ** history_tokenize (const char *string)
|
||||
Return an array of tokens parsed out of STRING, much as the shell
|
||||
might. The tokens are split on the characters in the
|
||||
HISTORY_WORD_DELIMITERS variable, and shell quoting conventions
|
||||
are obeyed.
|
||||
|
||||
- Function: char * history_arg_extract (int first, int last, const
|
||||
-- Function: char * history_arg_extract (int first, int last, const
|
||||
char *string)
|
||||
Extract a string segment consisting of the FIRST through LAST
|
||||
arguments present in STRING. Arguments are split using
|
||||
@@ -620,60 +620,60 @@ History Expansion
|
||||
|
||||
File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History
|
||||
|
||||
History Variables
|
||||
=================
|
||||
2.4 History Variables
|
||||
=====================
|
||||
|
||||
This section describes the externally-visible variables exported by
|
||||
the GNU History Library.
|
||||
This section describes the externally-visible variables exported by the
|
||||
GNU History Library.
|
||||
|
||||
- Variable: int history_base
|
||||
-- Variable: int history_base
|
||||
The logical offset of the first entry in the history list.
|
||||
|
||||
- Variable: int history_length
|
||||
-- Variable: int history_length
|
||||
The number of entries currently stored in the history list.
|
||||
|
||||
- Variable: int history_max_entries
|
||||
-- Variable: int history_max_entries
|
||||
The maximum number of history entries. This must be changed using
|
||||
`stifle_history()'.
|
||||
|
||||
- Variable: int history_write_timestamps
|
||||
-- Variable: int history_write_timestamps
|
||||
If non-zero, timestamps are written to the history file, so they
|
||||
can be preserved between sessions. The default value is 0,
|
||||
meaning that timestamps are not saved.
|
||||
|
||||
- Variable: char history_expansion_char
|
||||
-- Variable: char history_expansion_char
|
||||
The character that introduces a history event. The default is `!'.
|
||||
Setting this to 0 inhibits history expansion.
|
||||
|
||||
- Variable: char history_subst_char
|
||||
-- Variable: char history_subst_char
|
||||
The character that invokes word substitution if found at the start
|
||||
of a line. The default is `^'.
|
||||
|
||||
- Variable: char history_comment_char
|
||||
-- Variable: char history_comment_char
|
||||
During tokenization, if this character is seen as the first
|
||||
character of a word, then it and all subsequent characters up to a
|
||||
newline are ignored, suppressing history expansion for the
|
||||
remainder of the line. This is disabled by default.
|
||||
|
||||
- Variable: char * history_word_delimiters
|
||||
-- Variable: char * history_word_delimiters
|
||||
The characters that separate tokens for `history_tokenize()'. The
|
||||
default value is `" \t\n()<>;&|"'.
|
||||
|
||||
- Variable: char * history_search_delimiter_chars
|
||||
-- Variable: char * history_search_delimiter_chars
|
||||
The list of additional characters which can delimit a history
|
||||
search string, in addition to space, TAB, `:' and `?' in the case
|
||||
of a substring search. The default is empty.
|
||||
|
||||
- Variable: char * history_no_expand_chars
|
||||
-- Variable: char * history_no_expand_chars
|
||||
The list of characters which inhibit history expansion if found
|
||||
immediately following HISTORY_EXPANSION_CHAR. The default is
|
||||
space, tab, newline, carriage return, and `='.
|
||||
|
||||
- Variable: int history_quotes_inhibit_expansion
|
||||
-- Variable: int history_quotes_inhibit_expansion
|
||||
If non-zero, single-quoted words are not scanned for the history
|
||||
expansion character. The default value is 0.
|
||||
|
||||
- Variable: rl_linebuf_func_t * history_inhibit_expansion_function
|
||||
-- Variable: rl_linebuf_func_t * history_inhibit_expansion_function
|
||||
This should be set to the address of a function that takes two
|
||||
arguments: a `char *' (STRING) and an `int' index into that string
|
||||
(I). It should return a non-zero value if the history expansion
|
||||
@@ -685,24 +685,24 @@ the GNU History Library.
|
||||
|
||||
File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History
|
||||
|
||||
History Programming Example
|
||||
===========================
|
||||
2.5 History Programming Example
|
||||
===============================
|
||||
|
||||
The following program demonstrates simple use of the GNU History
|
||||
The following program demonstrates simple use of the GNU History
|
||||
Library.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <readline/history.h>
|
||||
|
||||
|
||||
main (argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
char line[1024], *t;
|
||||
int len, done = 0;
|
||||
|
||||
|
||||
line[0] = 0;
|
||||
|
||||
|
||||
using_history ();
|
||||
while (!done)
|
||||
{
|
||||
@@ -715,30 +715,30 @@ Library.
|
||||
if (t[len - 1] == '\n')
|
||||
t[len - 1] = '\0';
|
||||
}
|
||||
|
||||
|
||||
if (!t)
|
||||
strcpy (line, "quit");
|
||||
|
||||
|
||||
if (line[0])
|
||||
{
|
||||
char *expansion;
|
||||
int result;
|
||||
|
||||
|
||||
result = history_expand (line, &expansion);
|
||||
if (result)
|
||||
fprintf (stderr, "%s\n", expansion);
|
||||
|
||||
|
||||
if (result < 0 || result == 2)
|
||||
{
|
||||
free (expansion);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
add_history (expansion);
|
||||
strncpy (line, expansion, sizeof (line) - 1);
|
||||
free (expansion);
|
||||
}
|
||||
|
||||
|
||||
if (strcmp (line, "quit") == 0)
|
||||
done = 1;
|
||||
else if (strcmp (line, "save") == 0)
|
||||
@@ -749,7 +749,7 @@ Library.
|
||||
{
|
||||
register HIST_ENTRY **the_list;
|
||||
register int i;
|
||||
|
||||
|
||||
the_list = history_list ();
|
||||
if (the_list)
|
||||
for (i = 0; the_list[i]; i++)
|
||||
@@ -780,8 +780,8 @@ Library.
|
||||
|
||||
File: history.info, Node: Copying This Manual, Next: Concept Index, Prev: Programming with GNU History, Up: Top
|
||||
|
||||
Copying This Manual
|
||||
*******************
|
||||
Appendix A Copying This Manual
|
||||
******************************
|
||||
|
||||
* Menu:
|
||||
|
||||
@@ -790,13 +790,14 @@ Copying This Manual
|
||||
|
||||
File: history.info, Node: GNU Free Documentation License, Up: Copying This Manual
|
||||
|
||||
GNU Free Documentation License
|
||||
==============================
|
||||
A.1 GNU Free Documentation License
|
||||
==================================
|
||||
|
||||
Version 1.2, November 2002
|
||||
|
||||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
|
||||
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
@@ -1187,10 +1188,10 @@ GNU Free Documentation License
|
||||
you may choose any version ever published (not as a draft) by the
|
||||
Free Software Foundation.
|
||||
|
||||
ADDENDUM: How to use this License for your documents
|
||||
----------------------------------------------------
|
||||
A.1.1 ADDENDUM: How to use this License for your documents
|
||||
----------------------------------------------------------
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
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:
|
||||
|
||||
@@ -1221,97 +1222,131 @@ permit their use in free software.
|
||||
|
||||
File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Copying This Manual, Up: Top
|
||||
|
||||
Concept Index
|
||||
*************
|
||||
Appendix B Concept Index
|
||||
************************
|
||||
|
||||
| ||||